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

C# 在x64应用程序C中使用x86 dll#,c#,x86,64-bit,C#,X86,64 Bit,我有一个sdk。它是用C++编写的,用于x86,我需要在一个x64应用程序中使用这个DLL! 我在x86应用程序中使用了这个dll,一切都很好!但windows中的x86应用程序只能使用1.4 Gb。它对于我的应用程序来说太小了。如何增加该值?如果SDK的源代码可用,您可以尝试将其编译为64位目标。如果SDK没有一组验证测试,这可能会很困难,并且可能会出现一些问题,但这些问题并不是很明显。如果源代码不可用,则64位版本的SDK将不可用,并且将来很有可能不可用。您至少有一个选项可用 可以在64位应

我有一个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\U CLASSES\U ROOT\Wow6432Node\[APPID]\[GUID]
    [APPID]
    是对象的应用程序id,
    [GUID]
    是对象的GUID
  • 在每个键下添加一个新的字符串值(
    REG\u SZ
    ),并将其命名为
    DllSurrogate
    )。将该值保留为空
  • 创建一个新密钥
    HKEY\U LOCAL\U MACHINE\Software\Classes\[APPID]\[GUID]
    。您不必添加任何其他子键或值

[注意:如何设计COM接口和实现co类取决于您。我没有包含关于注册对象的文档,因为这是一个常见的过程。将它们与上面包含的代理一起使用的唯一区别是。MSDN和无数其他网站上的现有信息足以帮助您注册对象:[]

如果你使用C++(问题),为什么问题标题和标签上写的是C#?这两个是非常不同的野兽。你能很清楚它是哪一个吗?另外,windows中的x86可以使用2GB,如果你支持操作系统级别的3GB标志,可能是3GB。如果你可以访问源代码,请编写SDK使用64位内存寻址。如果你没有源代码,请让它的制造商为你做这件事e代码。Marc Gravell,如何启用此标志?