使用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。它对于我的应用来说太小了,我该如何增加它?
如果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和无数其他网站上的现有信息足以帮助您注册对象