无法加载由{dll}导入的过程

时间:2013-05-23 01:27:30

标签: c# static-linking managed-c++ ildasm

我有几个非托管C ++编写的lib文件,我需要链接到托管C ++ DLL 然后我需要从C#应用程序调用这个Managed C ++的函数。

第一步是OK - 管理C ++ dll已创建,我可以看到ildasm它导出我需要的函数。但是,当我尝试从我的C#编写的测试应用程序调用此函数时,它说:

  

未知模块中出现未处理的“System.IO.FileLoadException”类型异常。
  无法加载{MyManagedCPP.dll}导入的过程。

此消息来自VS2010 我做了一个简单的实验 - 从Managed C ++ dll中的所有lib文件中删除了依赖项并重建它 有了这个改变就可以了 - 应用程序启动,我可以从C#test app调用Managed C ++ dll的功能。

当dll与lib文件有静态链接时,设计是否无法调用托管c ++函数?技术限制?或者有一些解决方法?

由于

1 个答案:

答案 0 :(得分:1)

毫无疑问,您对本机DLL具有隐式依赖性。从问题可能是什么DLL不清楚。例如,它可能是msvcrxx.dll,是本机C ++代码的运行时支持库。这将是相当糟糕的,你不想混合CRT版本。这样一个丢失的DLL否则会阻止C ++ / CLI程序集加载,从而产生FileLoadException。

如果您不知道该DLL可能是什么,那么您可以使用SysInternals的ProcMon实用程序。跟踪将显示搜索DLL但未找到它的程序。如果是msvcrxx.dll,请确保使用与构建C ++ / CLI程序集相同的编译器版本重建.lib文件。如果是其他内容,请确保将该DLL复制到构建目录。