C#链接dll静态和动态
首先我会解释我的情况。我有一个DLL库,它对我来说是一个黑匣子。我不知道它是用什么语言写的。我猜是C++,甚至C,但我不知道。但我知道DLL函数,所以我知道如何使用它 嗯。直接去做生意。我正在编写应用程序C#.NET,它将与上面提到的DLL一起工作。我尝试了所有“我知道”的链接方法,但只有一种有效:C#链接dll静态和动态,c#,.net,dll,static-linking,dynamic-linking,C#,.net,Dll,Static Linking,Dynamic Linking,首先我会解释我的情况。我有一个DLL库,它对我来说是一个黑匣子。我不知道它是用什么语言写的。我猜是C++,甚至C,但我不知道。但我知道DLL函数,所以我知道如何使用它 嗯。直接去做生意。我正在编写应用程序C#.NET,它将与上面提到的DLL一起工作。我尝试了所有“我知道”的链接方法,但只有一种有效: 静态:[DllImport(“myDll.dll”)]-这很有效 动态:通过Kernel32.dll LoadLibrary/FreeLibrary-我遇到代码126异常-找不到指定的模块。这个问
- 静态:
-这很有效[DllImport(“myDll.dll”)]
- 动态:通过Kernel32.dll LoadLibrary/FreeLibrary-我遇到代码126异常-
。这个问题在于缺少依赖性找不到指定的模块
- 动态:通过反射-当使用Assembly.LoadFile(aPathFileName)时,我遇到了一个异常:
模块应该包含一个程序集清单
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
然后在第一次使用目标dll函数之前,用保存在我的配置文件中的路径填充它
SetDllDirectory(Settings.Default.dllPath);
重要的是要为SetDllDirectory设置目标dll所在文件夹的唯一路径(如c:\folder),而不是带有dll名称的完整路径(如c:\folder\name.dll)。这篇文章可能有用!在调用我的黑盒dll方法之前,我可以调用kernel32.dll SetDllDirectory并用配置文件中的路径填充它,该方法由静态dlliport链接!我会试试,然后贴出正确的答案。