移植到 x64:为 MS Word、Access、DAO 实现 OLE 自动化的 MFC x86 DLL
我有一个几年前编写的应用程序,我正在移植到 x64。它由一个使用 .Net 1.1 的 VB.Net GUI 和几个非托管 C++ DLL 组成。
更新程序很顺利。VB.Net 程序在 .Net 4.0 上运行良好,所有 DLL,除了一个,都可以作为 64 位 DLL 运行。对于不以 64 位运行的 DLL,我创建了一个存根,它只为每个函数调用返回 SUCCESS。
我在 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 数据库中提取数据并将其放入 struct pzUserData 中。
我认为这不会在 COM / ActiveX 边界上起作用。
如何使用 64 位指针访问 32 位进程中的内存?
ActiveX COM 服务器 DLL 是否能够访问 64 位内存?
将此代码移植到 64 位的最佳做法是什么?