首先,我将解释我的情况。我有一个DLL库,对我来说是一个黑盒子。我不确定它用什么语言写的。我的猜测是C ++甚至是C语言,但我不知道。但我知道DLL的功能,所以我知道如何使用它。
确定。直接到企业。我正在编写应用程序C#.NET,它将与上面提到的DLL一起使用。我尝试了所有人都知道链接方法,但只有一个工作:
[DllImport("myDll.dll")]
- 有效。The specified module could not be found
。这个问题在于缺少依赖性。The module was expected to contain an assembly manifest
。我的问题是,我真的需要在某种配置文件中指定我的黑盒子dll的路径。我可以要求任何提示我现在可以做什么,我该如何解决这个问题?更具体:是否有任何方法从配置文件加载字符串并使用它来填充静态链接DllImport(const字符串路径)所需的常量字符串;还是有另一种动态链接dll的方式,我不知道?
修改
回答另一个问题的可能重复:该问题的两个答案都引用了我无法使用的方法。正如我所说,我不能使用LoadLibrary(异常126),我也不能指定硬编码的可能路径的战利品(我说我需要从配置文件加载路径)
答案 0 :(得分:1)
Sinatr发布了this问题的链接,其中Cody Gray提供了一个有趣的解决方案。可以通过kernel32.dll SetDllDirectory覆盖到DLL的静态DllImport目标路径。我需要做的就是调用这个内核函数
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern bool SetDllDirectory(string lpPathName);
然后在首次使用目标dll函数之前用我的配置文件中保存的路径填充它。
SetDllDirectory(Settings.Default.dllPath);
重要的是将SetDllDirectory ONLY路径设置为目标dll所在的文件夹(如c:\ folder),而不是dll名称的完整路径(如c:\ folder \ name.dll)。