-1

我有一个sdk。它是用 C++ 为 x86 编写的,我需要在 x64 应用程序中使用这个 dll!我在 x86 应用程序中使用了这个 dll,一切都很好!但是 Windows 中的 x86 应用程序只能使用 1.4 Gb。它对我的应用程序来说太小了。我怎样才能增加这个?

4

1 回答 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 回答