C#DLL可以调用调用本机C++静态库的C++/CLI托管包装器吗

本文关键字:调用 C++ CLI 包装 本机 静态 C#DLL | 更新日期: 2023-09-27 17:58:18

我遇到一个DLL异常:

 response threw exception: Could not load file or assembly  or one of its dependencies. An attempt was made to load a program with an incorrect format.

我有以下DLL/库组合的所有源代码。我想知道我是否有一个奇怪的组合,或者我需要检查什么来确保它运行。我在一个静态库中有一个本机C++代码,它由托管C++CLR支持的DLL调用。一切似乎都很顺利,直到下一点。

我创建了一个测试C#EXE控制台应用程序来调用托管C++CLR支持的DLL。这是意料之中的事。当有一个C#类库调用此受托管C++CLR支持的DLL时,抛出异常的位置不同。这是支持的吗?还是这就是引发异常的原因?如果此组合不正确,是否有任何变通方法可以获取C#类DLL来调用托管C++CLR支持的DLL。

一切都是用Windows 7 64位Visual Studio 2012创建的。所有项目都处于已选择x64位平台的发布模式。

C#DLL可以调用调用本机C++静态库的C++/CLI托管包装器吗

在我见过的每一种情况下,32位C#应用程序都试图加载64位C++或C++/CLI DLL,或者64位C#应用软件试图加载32位C++或C++/CLI DLL。

我通常采取的下一步是使用Dependency Walker加载C++/CLI dll。依赖项助行器将向您显示DLL试图加载的DLL。在某些情况下,我有一个与64位DLL同名的32位DLL首先出现在Path中,因此它试图加载错误的DLL。

请注意,Dependency Walker将在64位DLL旁边的图标上显示64,并在底部的信息框中显示一条消息,行为:"错误:找到了不同CPU类型的模块。"

我的最佳选择是将c++dll编译为win32,您的c#dll设置为Any CPU,并且您在64位系统上运行。。。