从64位项目中使用32位库 - .NET

4
我们的应用程序是全64位的。我们使用ADODB提供程序来连接第三方数据库(nexusdb)。它是32位的,并包含.NET库(我们可以正确引用),以及我认为是32位的C .dll。因此,在32位编译时可以正常工作,而在64位编译时会提示找不到C .dll。如何解决这个问题而不需要将我们的代码编译为32位呢?
编辑: 以下是第三方DLL: ADONET.dll-这是.NET本地DLL,我可以成功引用。 ADONETProvider.dll-这是非.NET 32位DLL,我只需将其保存在bin/文件夹中。 我不想为x86编译我的项目,因为我引用了许多其他64位项目。我希望确保ADONET.dll以某种方式以“32位模式”调用。

为什么不尝试以下几个方法:
  1. CopyLocal=false 更改为 =true,对于所有第三方 dll 都进行设置。
  2. 另一个尝试的方法是创建一个“Dependencies”文件夹,并将所有第三方 dll 放在其中,同时将它们添加到项目的“References”节点中。 最后,您可以将项目构建更改为“x86”或“AnyCpu”。
- MethodMan
我已发布编辑。 我明白我需要复制非.NET dll并设置为x85。 我不想设置为x86。 AnyCpu不起作用。 - katit
1个回答

4

这是.NET,不确定是否有区别。提供的.NET DLL引用正常工作,但当它必须进入非托管代码时失败。请参见我的编辑。 - katit
LegacyWrapper就是为了实现这个特定目的而存在的。不过,你不能再将dll添加到项目的引用中了。你必须像这样手动加载它:`int x = (int)client.Invoke("User32.dll", "GetSystemMetrics", new object[] { 0 });` - Franz Wimmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接