使用了extern "C" 定义的dll导出函数,函数名仍然被加上修饰符,导致动态链接时找不到对应函数
时间:2011-12-01
来源:互联网
             HI,
我创建了一个dll,定义了下面这样的一个函数
C/C++ code
然后在调用者中通过LoadLibrary动态加载dll,在查找函数的时候,通过GetProcAddress(hinst,"MyFunc")查找,总是找不到。
通过dumpbin dll,发现导出函数名被修饰了,变为如下:
ordinal hint RVA name
1 0 000110C8 _MyFunc@0 = @ILT+195(_MyFunc@0)
1.如果是按照教程上说的,extern "C"不是限定符号编译时不加修饰符么?
2.如果去掉__stdcall,则extern "C"确实是不加修饰符的。
这么说,__stdcall和extern "C"不能共存的么?
我看到别人提供的dll,对应的头文件函数说明也是标明是stdcall,同时我们在访问函数的时候,也是正常使用MyFunc,并没有其他的修饰符,请问这个是怎么做到的呀?
            
            我创建了一个dll,定义了下面这样的一个函数
C/C++ code
extern "C" int __declspec(dllexport) __stdcall MyFunc()
然后在调用者中通过LoadLibrary动态加载dll,在查找函数的时候,通过GetProcAddress(hinst,"MyFunc")查找,总是找不到。
通过dumpbin dll,发现导出函数名被修饰了,变为如下:
ordinal hint RVA name
1 0 000110C8 _MyFunc@0 = @ILT+195(_MyFunc@0)
1.如果是按照教程上说的,extern "C"不是限定符号编译时不加修饰符么?
2.如果去掉__stdcall,则extern "C"确实是不加修饰符的。
这么说,__stdcall和extern "C"不能共存的么?
我看到别人提供的dll,对应的头文件函数说明也是标明是stdcall,同时我们在访问函数的时候,也是正常使用MyFunc,并没有其他的修饰符,请问这个是怎么做到的呀?
作者: zerotodream 发布时间: 2011-12-01
             Help~~~~~~~~~~~~~~~~~~~~~~~            
            作者: zerotodream 发布时间: 2011-12-01
             加个 .def 模块定义文件            
            作者: aaadddzxc 发布时间: 2011-12-01
             c默认是__cdecl 调用约定;
API函数都是 __stdcall 调用约定;
不同的调用约定对于怎么入栈,有谁平衡堆栈都不一样;
extern "C" 可以防止C++的名字改编
            API函数都是 __stdcall 调用约定;
不同的调用约定对于怎么入栈,有谁平衡堆栈都不一样;
extern "C" 可以防止C++的名字改编
作者: agoago_2009 发布时间: 2011-12-01
  引用 2 楼 aaadddzxc 的回复:
加个 .def 模块定义文件
加个 .def 模块定义文件
++
调用约定也会影响名字改编,最好用.def文件
作者: maoxing63570 发布时间: 2011-12-01
             __stdcall convention是下划线+name@参数大小和
影响dll的导出函数名
__cdecl convention的dll的导出函数名才跟代码中一致
            影响dll的导出函数名
__cdecl convention的dll的导出函数名才跟代码中一致
作者: wocow3 发布时间: 2011-12-02
 相关阅读 更多  
      
    热门阅读
-  
 office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
          阅读:74
 -  
 如何安装mysql8.0
          阅读:31
 -  
 Word快速设置标题样式步骤详解
          阅读:28
 -  
 20+道必知必会的Vue面试题(附答案解析)
          阅读:37
 -  
 HTML如何制作表单
          阅读:22
 -  
 百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
          阅读:31
 -  
 ET文件格式和XLS格式文件之间如何转化?
          阅读:24
 -  
 react和vue的区别及优缺点是什么
          阅读:121
 -  
 支付宝人脸识别如何关闭?
          阅读:21
 -  
 腾讯微云怎么修改照片或视频备份路径?
          阅读:28
 















