背景: Winform程序需要调用外设,外设厂商提供了一个动态库,由于后续还会使用到别的厂商的设备,为了不使最后的程序目录变得杂乱无章,希望能将这一套外设的动态库存放在一个文件内,如我希望非项目产生的dll都存放于程序运行目录下的others文件夹下。
外部DLL声明如下,存放与程序同级目录,一切调用正常。
[DllImport("Lib.dll", EntryPoint = "Test", CallingConvention = CallingConvention.StdCall)]
public static extern int Test();
我想把它放到Bin/Debug/Others文件夹下,但无论是写相对路径或者绝对路径(C:\Other\Lib.dll),均不成功。方法在调用的时候就拋错了。异常显示:
无法加载 DLL“xxxxx\Lib.dll”: 动态链接库(DLL)初始化例程失败。 (异常来自 HRESULT:0x8007045A)。 异常类型:DllNotFoundException, 从异常来看,只是简单的认不到路径,但是我改了绝对路径,P/Invoke时 依然认不到,拋错。
[DllImport("\\Other\\Lib.dll", EntryPoint = "Test", CallingConvention = CallingConvention.StdCall)]
public static extern int Test();
请问,如何让Winform程序调用指定目录下的外部dll?