我有一个sdk。它是用C ++编写的x86我需要在x64应用程序中使用这个dll! 我在x86应用程序中使用这个DLL,一切都很好!但是Windows中的x86应用程序只能使用1.4 Gb。它对我的应用来说太小了。我怎么能增加这个?
答案 0 :(得分:1)
如果SDK的源代码可用,您可以尝试为64位目标编译它。如果SDK没有一组验证测试,则这可能很困难,并且可能存在一些不明显的问题。如果源代码不可用,则无法使用64位版本的SDK,并且很有可能在将来您无法使用至少一个选项。
可以在64位应用程序中使用32位DLL,方法是将其包装在COM接口中,并使用dllhost
作为代理来处理编组。这不是一个困难的过程,但是当参数被封送并且函数被调用但不会影响实际函数本身时,可能会对性能产生影响。
创建一组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和无数其他站点上的现有信息足以帮助您注册对象。]