C#导入dll的方法使用如下,查了很多都没找到问题原因,最终还是解决了,C#中的导入方法并没有问题,都是dll的问题。
const String DLL_NAME = "tt.dll";
// 模块
[DllImport(DLL_NAME, EntryPoint = "fntt", CallingConvention = CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
public static extern int fntt();
问题一:报错“无法加载 DLL“tt.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。”
原因:导入的dll中还静态加载了其他的dll(aa.dll),而tt.dll这个文件的路径没有这个aa.dll,导致报错。
解决方法:在tt.dll的路径放aa.dll 即可
问题二:找不到入口,报错:“无法在 DLL“tt.dll”中找到名为“fntt”的入口点。”
原因:导出方法有问题,宏缺少extern "C",参考:http://blog.youkuaiyun.com/lqlblog/article/details/48105883
解决方法:
将下面的语句
#ifdef TT_EXPORTS
#define TT_API __declspec(dllexport)
#else
#define TT_API __declspec(dllimport)
#endif
改为:
#ifdef TT_EXPORTS
#define TT_API extern "C" __declspec(dllexport)
#else
#define TT_API extern "C" __declspec(dllimport)
#endif