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

问题描述:

我有一个DLL例外,我我遇到:C#DLL可以调用调用C++静态库的C++/CLI托管包装吗?

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。

使用Visual Studio 2012的Windows 7 64位创建了所有内容。所有项目均处于选择x64位平台的发布模式。

在我见过的任何情况下,这是其中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类型的模块。”在底部的信息框中

我最好的选择是,是Win32的C#DLL设置为Any CPU,你是一个64位系统上运行的C++编译DLL ...

+0

如上所述,我已经确认了所有内容都以发布模式构建为64位。 – 2013-02-08 19:02:35