Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
“调用转换”(calling conversion)和“命名转换”(naming conversion)这两个概念对我们来说其实并不陌生,只要你听说过extern "C",__cdecl,__stdcall和__fastcall这些东西,如果引用的声明和导出的声明不一致,就会出现类似下面这么一个编译错误:

RealTest.obj : error LNK2001: unresolved external symbol "double __stdcall Fun1(int,double)" (?Fun1@@YGNHN@Z)
Debug/RealTest.exe : fatal error LNK1120: 1 unresolved externals

解决这个问题很简单,只要使用一致的声明就可以了。我们用C++编程,常接触到的也就两种命名转换,一种是C++的,不需要特别声明,一种是C的,需要加上个extern "C"前缀;而调用转换有三种,__cdecl,__stdcall和__fastcall,调用转换不同,导出的符号也是有差别的。这里我就不深究它们的差别了,我们所要记住的就是:保持一致。
posted on 2010-04-02 14:06 Jiang Guogang 阅读(330) 评论(2)  编辑 收藏 引用 所属分类: Knowledge

评论

# re: 调用转换与命名转换 2010-04-06 09:52 matthew
曾经看过....忘了哈  回复  更多评论
  

# re: 调用转换与命名转换 2010-06-17 14:25 marrywindy
看了你很多文章,csdn你写了很多很多哦....受益匪浅....谢谢...  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理