C#中导入C++生成的dll文件错误
有一个C++程序,我要在C#项目中调用C++程序中的DLL文件,下面是我做过的一些操作:
第一步:直接在.net中添加dll应用报错“找不到类型库”
第二步:用DOS注册DLL文件 regsvr32 报错“找不到指定的模块”
第三步:直接把DLL文件拷贝到windows/system32目录下,并且也拷贝到项目的bin目录中用,用代码
[DllImport("LedCtrl.dll")] // LedCtrl.dll C++程序中的dll文件
public static extern bool LSN_IsPower(); //LSN_IsPower c++程序中的一个方法
调用,程序运行报错 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
以上几种引用DLL文件的方法都试过了无效,请问大家有什么解决方案给个支持
写了一下代码用来打开DLL文件。。其它的DLL文件可以打开。。就是不能打开LedCtrl.dll
///<summary>
/// API LoadLibrary
///</summary>
[DllImport("Kernel32")]
public static extern int LoadLibrary(String funcname);
///<summary>
/// API GetProcAddress
///</summary>
[DllImport("Kernel32")]
public static extern int GetProcAddress(int handle, String funcname);
///<summary>
/// API FreeLibrary
///</summary>
[DllImport("Kernel32")]
public static extern int FreeLibrary(int handle);
这是C++中源码的调用DLL
int dllint= LoadLibrary("LedCtrl.dll");
if (!dllint)
{
dllint= LoadLibrary("..\\LedCtrl.dll");
return false;
}
大家帮忙看看。。用什么方式能够在C#中调用C++的DLL文件
谢谢!
------解决方案--------------------用Depends工具分析一下,看C++ dll文件是否缺少一些依赖项?
------解决方案--------------------把LedCtrl.dll文件拷贝到c#的debug和release目录(也就是你c#的exe文件所在目录)下试试看,
------解决方案--------------------我也碰到过这种情况,问题正如一楼说的:缺少依赖项
解决办法是把跟dll有关的文件全部放在bin目录下 然后Import
------解决方案--------------------原来的C++生成的Dll可能没有用extern声明,导致无法用DllImport这种方式引用
------解决方案--------------------LZ,根据你的操作,发现几个问题:
1、“直接在.net中添加dll应用报错“找不到类型库””
C++的动态库不能直接添加到net工程里。
2、“用DOS注册DLL文件 regsvr32 报错“找不到指定的模块””
你些的是动态库,而非COM组件,所以不能注册。
3、“调用,程序运行报错 找不到指定的模块”
这类问题,一般是由于你的动态库,还依赖别的动态库,用VC的DEPENDS.EXE工具打开一看就能知道。
------解决方案--------------------楼上的专业啊
------解决方案--------------------7楼的专业,我记住了