C#导入Dll时报错

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.csdn.net/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


猜你喜欢

转载自blog.csdn.net/lllkey/article/details/79229454
今日推荐