【发布时间】:2013-05-23 01:27:29
【问题描述】:
我有几个非托管 C++ 编写的 lib 文件,我需要链接到托管 C++ dll。
然后我需要从 C# 应用程序调用这个托管 C++ 的函数。
第一步没问题 - 创建了托管 C++ dll,我可以通过 ildasm 看到它导出了我需要的函数。但是,当我尝试从我的 C# 编写的测试应用程序中调用此函数时,它会显示:
未知模块中出现“System.IO.FileLoadException”类型的未处理异常。
无法加载由 {MyManagedCPP.dll} 导入的过程。
此消息来自 VS2010。
我做了一个简单的实验 - 从托管 C++ dll 中的所有 lib 文件中删除依赖项并重建它。
有了这个更改就可以了 - 应用程序启动,我可以从 C# 测试应用程序调用托管 C++ dll 的函数。
当 dll 与 lib 文件具有静态链接时,是否无法通过设计调用托管 c++ 函数?技术限制?还是有一些解决方法?
谢谢
【问题讨论】:
-
看看 System.Runtime.InteropServices。特别是
DllImport["my.dll']。请注意放置 Dll 的位置(它们需要位于项目定义的工作目录中,不一定位于 exe 旁边。 -
不,我认为这里不需要 DLLImport。最后,我管理了 dll 和管理的 exe。但是 [DLLImport] “表明属性方法由非托管动态链接库 (DLL) 作为静态入口点公开。”这不是我的情况。
标签: c# static-linking managed-c++ ildasm