C++ Windows移植到x64:MFC x86 DLL实现MS Word、Access和DAO的OLE自动化

C++ Windows移植到x64:MFC x86 DLL实现MS Word、Access和DAO的OLE自动化,c++,windows,x86,activex,porting,C++,Windows,X86,Activex,Porting,移植到x64:MFC x86 DLL实现MS Word、Access和DAO的OLE自动化 我有一个几年前写的应用程序,我正在移植到x64。 它由一个使用.NET 1.1的VB.NET GUI和几个非托管C++ DLL的组成。 更新程序进展顺利。VB.Net程序在.NET4.0上运行良好,除一个DLL外,所有DLL都可以作为64位DLL正常运行。对于不是以64位运行的DLL,我创建了一个存根,它只返回每个函数调用的成功 64位的DLL使用MFC,使用OLE自动化创建MS Word文档,并使用DA

移植到x64:MFC x86 DLL实现MS Word、Access和DAO的OLE自动化

我有一个几年前写的应用程序,我正在移植到x64。 它由一个使用.NET 1.1的VB.NET GUI和几个非托管C++ DLL的

组成。 更新程序进展顺利。VB.Net程序在.NET4.0上运行良好,除一个DLL外,所有DLL都可以作为64位DLL正常运行。对于不是以64位运行的DLL,我创建了一个存根,它只返回每个函数调用的成功

64位的DLL使用MFC,使用OLE自动化创建MS Word文档,并使用DAO更新Access数据库

由于MS Word和DAO仅在32位上可用,我使用DLL代理创建了一个COM服务器来运行代码。我关心的问题是使用指针来回传递参数

这是我使用的一个C++原型:

DWORD dtmDBaseToTags
    ( IN const struct UserData_t * pzUserData
    , IN struct DataTag_t* pzDataTag
);
此函数使用pzDataTag中的名称从Access数据库中提取数据并将其放入结构pzUserData中

我认为这在COM/ActiveX边界上是行不通的

如何使用64位指针在32位进程中访问内存

ActiveX COM服务器DLL是否能够访问64位内存


将此代码移植到64位的最佳操作过程是什么?

如果要使用代理,您需要使其在COM单元中工作。这需要在IDL中描述这些结构或编写自定义封送拆收器。请考虑这个代码在10年前到期,也许是退休的时候。我为一家大公司做这件事。我自己写的代码,客户现在想用它来处理非常大的文件,所以我们将其移植到64位。我有分析工作,只是报告和数据库挂断了我。我最担心的是指针在64位到32位之间无法工作。