我有一个sdk。它是用 C++ 为 x86 编写的,我需要在 x64 应用程序中使用这个 dll!我在 x86 应用程序中使用了这个 dll,一切都很好!但是 Windows 中的 x86 应用程序只能使用 1.4 Gb。它对我的应用程序来说太小了。我怎样才能增加这个?
问问题
1662 次
1 回答
2
如果 SDK 的源代码可用,您可以尝试为 64 位目标编译它。如果 SDK 没有一组验证测试,这可能会很困难,并且可能存在不会立即显现的问题。如果源代码不可用,则 64 位版本的 SDK 不可用,并且将来可能不可用,您至少有一个可用选项。
通过将32 位 DLL 包装在 COM 接口中并dllhost
用作处理封送处理的代理,可以在 64 位应用程序中使用 32 位 DLL。这不是一个困难的过程,但可能会在编组参数并调用函数时对性能产生影响,但不会影响实际函数本身。
创建您的一组 32 位 COM 对象来包装 SDK 并正常注册它们。确保每个对象都注册了一个应用程序 ID,这很重要。下面概述的其他步骤将允许您通过dllhost
代理在 64 位应用程序中使用它们。
- 如果您已正确注册对象,则每个对象的注册表中都会有一个键 -
HKEY_CLASSES_ROOT\Wow6432Node\[APPID]\[GUID]
.[APPID]
是对象的应用程序 ID,是对象[GUID]
的 GUID。 - 在每个键下
HKEY_CLASSES_ROOT\Wow6432Node\[APPID]\[GUID]
添加一个新的字符串值 (REG_SZ
) 并为其命名DllSurrogate
。将该值留空。 - 创建一个新密钥
HKEY_LOCAL_MACHINE\Software\Classes\[APPID]\[GUID]
。您不必添加任何其他子项或值。
[注意:如何设计 COM 接口和实现协同类取决于您。我没有包含有关注册对象的文档,因为这是一个常见的过程。将它们与上面包含的代理一起使用的唯一区别。MSDN 和无数其他网站上的现有信息足以帮助您注册对象。]
于 2013-06-13T14:40:04.560 回答