在x64应用程序中使用x86 dll C#

时间:2013-06-13 13:17:38

标签: c# x86 64-bit

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

1 个答案:

答案 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和无数其他站点上的现有信息足以帮助您注册对象。]