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

时间:2013-02-08 18:57:40

标签: c# c++ dll

我遇到了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 ++ CLR支持的DLL的C#类库时抛出异常的区别。是否支持这个或者这是抛出异常的原因?如果此组合不正确,是否有任何解决方法可以使C#类DLL调用托管C ++ CLR支持的DLL。

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

2 个答案:

答案 0 :(得分:1)

在我看过的每一个案例中,这是一个32位C#应用程序试图加载64位C ++或C ++ / CLI DLL或64位C#应用程序试图加载32位C ++或C ++ / CLI DLL。

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

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

答案 1 :(得分:0)

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