我正在开发一个应用程序,该应用程序使用硬件提供程序提供的C++ DLL与某些硬件进行通信。我也有这个DLL的头文件,但没有源文件。在我的C#应用程序,我试图导入和调用DLL的功能是这样的:在C#应用程序中导入并使用C++ DLL函数
public class MyClass
{
[DllImport("CaGe.dll")]
public static extern long someLibraryFunction();
public void callLibFunction()
{
Console.WriteLine("function call: " + someLibraryFunction());
}
}
的library.dll文件位于同一文件夹中的文件MyClass.cs,也是项目的其余部分文件。然而,当我开始调试会话时,我首先从系统收到一个对话窗口,内容如下:CAGE InitDll:加载库“CdbClientInit”上的Erro,当我点击OK后,在我调用库函数的行上出现一个无法处理的异常。
异常说:System.DllNotFoundException:从HRESULT异常:0x8007045A
我在互联网上,这可以通过该CaGe.dll需要一个缺少DLL引起上找到,所以我试图通过把DLL Dependency Walker,但结果对我来说有点混乱。在CAGE.DLL下有WS32_32.DLL,VERSION.DLL,KERNEL.DLL和USER32.DLL选项卡,我认为我需要的库是USER32.DLL选项卡下的somwhere,但我不认识它们中的任何一个如果缺少DLL是导致此问题的原因)。
任何意见将非常appretiated :)
问题可能是更可能的是你的程序无法找到' CaGe.dll'。你说它和你的源文件位于同一个目录中,但这不是你的可执行文件生成的位置(默认情况下)。尝试将.dll放到你的程序可执行文件所在的Bin \ Debug或Bin \ Release中。 – 2014-11-06 12:54:42
是的,解决了它,谢谢:) – 2014-11-06 12:59:00