我有一个用C#写的程序。我想在这个程序中使用用C语言制作的动态链接库。public class Test{ [DllImport(@"C:/.../surcouche2.dll")] public static extern int refreshEntities();}我将函数称为:Test.refreshEntities();我正在使用Visual Studio。为了创建DLL,我创建了一个新的VisualC++应用程序控制台,然后选择了DLL,并在默认值上留下了选项。然后,我告诉VS使用C进行编译。功能是:__declspec(dllexport) int refreshEntities() { int ret = 0; LibData *n; n = newLibData(LIB_MODULES_MODULE_ENTITES, LIB_MODULES_ACTION_SELECT, "http://10.0.2.2:4242/WebService1.asmx"); if (n) { ret = n->refreshDb(n); n->destroy(n); } return (ret);}调用的函数位于另一个DLL(被引用)中。但我有个错误:system.DllNotFoundException: Impossible de charger la DLL 'C:/.../surcouche2.dll': Le module spécifié est introuvable. (Exception de HRESULT : 0x8007007E) à app.Lol.refreshEntities() à app.MainWindow..ctor() dans c:\...\MainWindow.xaml.cs:ligne 30但是,如果我像这样改变函数surcouche2.dll,那么它工作得很好:__declspec(dllexport) int refreshEntities() { return (42);}第二个DLL使用另一个DLL(都在C中)。我用“创建一个空项目”选项创建了它们,所以我没有refreshEntities。。。文件夹。我想这不是问题,因为我可以使用第二个DLL中第三个DLL的函数。 最佳答案 如果无法解析加载的dll的依赖项,则可能发生此错误。首先,我建议您将两个本机程序集放在bin文件夹中并更改引用从[DllImport(@"C:/.../surcouche2.dll")]到[DllImport("surcouche2.dll")]一般来说,调试依赖关系问题的工具,如Dependency Walker和Process Monitor可能很有用。首先有助于理解依赖关系是什么,其次检查应用程序试图查找的是什么。将流程监视器配置为仅显示流程活动,并使用应用程序名称应用流程名称筛选器(如下图所示),您将获得应用程序尝试访问的所有文件。它将有助于找到丢失的dll。关于c# - 在C#程序中使用用C编写的多个DLL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28475830/
10-11 22:53
查看更多