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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值