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

本文关键字:导入 过程 dll 加载 | 更新日期: 2023-09-27 18:15:00

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

第一步是OK -管理c++ dll创建,我可以看到ildasm,它导出我需要的功能。然而,当我试图从c#编写的测试应用程序调用这个函数时,它说:

未处理的System.IO类型异常。fileloadeexception '发生在未知模块中。
{MyManagedCPP.dll}导入的过程无法加载。

这个消息来自VS2010。
我做了一个简单的实验-从托管c++ dll中的所有库文件中删除依赖并重新构建它。有了这个改变,它是OK的-应用程序启动,我可以从c#测试应用程序调用托管c++ dll函数。

当dll与lib文件有静态链接时,不可能通过设计调用托管c++函数吗?技术上的限制吗?或者有一些变通的办法?

谢谢

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

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

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