无法加载由{dll}导入的过程 我有几个非托管C++写的文件,我需要链接到托管C++ DLL。 然后,我需要从C++应用程序中调用这个托管C++的函数。p> 第一步是创建OK管理的C++ DLL,我可以用ILDASM看到它导出了我需要的函数。但是,当我尝试从我的C#书面测试应用程序调用此函数时,它会说:

无法加载由{dll}导入的过程 我有几个非托管C++写的文件,我需要链接到托管C++ DLL。 然后,我需要从C++应用程序中调用这个托管C++的函数。p> 第一步是创建OK管理的C++ DLL,我可以用ILDASM看到它导出了我需要的函数。但是,当我尝试从我的C#书面测试应用程序调用此函数时,它会说:,c#,static-linking,managed-c++,ildasm,C#,Static Linking,Managed C++,Ildasm,未知模块中发生“System.IO.FileLoadException”类型的未处理异常。 无法加载由{MyManagedCPP.dll}导入的过程 此消息来自VS2010。 我从托管的C++ DLL中的所有LIB文件中做了简单的实验性的依赖关系,并重建它。 有了这个变化,它是OK—app启动,我可以从C++测试应用程序调用托管C++的DLL函数。p> 当DLL与LIB文件有静态链接时,设计是否不可能调用托管C++函数?技术限制?还是有解决办法 谢谢您无疑对本机DLL具有隐式依赖性。从这个问题上

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

此消息来自VS2010。
我从托管的C++ DLL中的所有LIB文件中做了简单的实验性的依赖关系,并重建它。 有了这个变化,它是OK—app启动,我可以从C++测试应用程序调用托管C++的DLL函数。p> 当DLL与LIB文件有静态链接时,设计是否不可能调用托管C++函数?技术限制?还是有解决办法


谢谢

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


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

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


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

查看System.Runtime.InteropServices。特别是
DllImport[“my.dll']
。请小心放置dll的位置(它们需要位于项目定义的工作目录中,不一定位于exe旁边。不,我认为我不需要在这里使用DllImport。最后我管理了dll和exe。但是[DllImport]”指示属性化方法由非托管动态链接库(DLL)作为静态入口点公开。“这不是我的情况。请查看System.Runtime.InteropServices。特别是
DllImport[“my.DLL']]
。小心放置DLL的位置(它们需要位于项目定义的工作目录中,不一定在exe旁边。不,我认为这里不需要DLLImport。最后我管理了dll和托管exe。但是[DLLImport]“表示属性化方法由非托管动态链接库(dll)作为静态入口点公开。”这不是我的情况。遗憾的是,我无法重建lib文件-没有源。我还知道,它们是在我使用VS2010时使用VS2008生成的。当我在Process explorer中遇到错误时,我看到托管dll已加载,而非托管dll(托管dll依赖于此)也加载了。看起来这在使用不同版本的编译器时是一个问题。如果DLL设计良好,从技术上讲,可能会在不匹配的情况下生存。但是,您的计算机上需要有正确版本的msvcr90.DLL来解决FileLoadException。遗憾的是,我无法重建lib文件-没有我还知道它们是在我使用VS2010时使用VS2008构建的。当我在Process explorer中遇到错误时,我看到托管dll被加载,而非托管dll(托管dll依赖于哪个)也加载了。看起来这在使用不同版本的编译器时是一个问题。从技术上讲,如果DLL设计良好,则可能存在不匹配。但是,您的计算机上需要有正确版本的msvcr90.DLL来解决FileLoadException。