使用x86 dll在x64中应用c#

本文关键字:应用 x64 x86 dll 使用 | 更新日期: 2023-09-27 18:18:27

我有一个sdk。它是用c++为x86编写的,我需要在x64应用程序中使用这个dll !我在x86应用程序中使用这个dll,一切都很好!但是windows上的x86应用只能使用1.4 Gb。它对于我的应用来说太小了,我该如何增加它?

使用x86 dll在x64中应用c#

如果SDK的源代码可用,您可以尝试将其编译为64位目标。如果SDK没有一组验证测试,这可能会很困难,并且可能存在无法立即显现的问题。如果源代码不可用,64位版本的SDK不可用,并且有一个渺茫的机会在未来不可用,你至少有一个选项可用。

可以在64位应用程序中使用32位DLL,方法是将其包装在COM接口中,并使用dllhost作为代理来处理封送处理。这不是一个困难的过程,但当参数被封送和函数被调用时,可能会对性能产生影响,但不会影响实际的函数本身。

创建包装SDK的32位COM对象集并将其注册为正常。确保每个对象都注册了应用程序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和无数其他网站上的现有信息足以帮助您注册对象