繁体   English   中英

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

[英]Can a C# DLL call C++/CLI managed wrapper which calls native C++ static library?

我遇到了一个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 ++ CLR支持的DLL调用的静态库中有本机C ++代码。 直到下一点,一切似乎都可以正常工作。

我创建了一个测试C#EXE控制台应用程序,以调用托管C ++ CLR支持的DLL。 这按预期工作。 当有C#类库调用相同的托管C ++ CLR支持的DLL时,引发异常的区别。 这是完全受支持的还是这是引发异常的原因? 如果此组合不正确,是否有任何变通办法来获取C#类DLL来调用托管C ++ CLR支持的DLL。

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

在每种情况下,这都是32位C#应用程序试图加载64位C ++或C ++ / CLI DLL或64位C#应用程序试图加载32位C ++或C ++ / CLI DLL。

我通常要采取的下一步是使用Dependency Walker加载C ++ / CLI dll。 依赖行者将向您显示您的DLL试图加载哪些DLL。 在某些情况下,我的32位DLL与64位DLL的名称相同,因此会首先出现在路径中,因此它会尝试加载错误的DLL。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM