请问关于C++的函数在DLL中名字改编的问题

shootingstars 2010-09-29 09:21:30
Hi,请问大家一个问题:我的OpenOffice程序在Windows下编译成功了(vs2008),但是我想用它中间的库的时候,发现动态库的函数名字改编得有问题。比如String类导出函数GetBuffer在我的项目中要求的导出函数名字是GetBuffer@String@@QBEPB_WXZ,但是查看对应Dll导出的函数名字是GetBuffer@String@@QBEPBGXZ。
并且也不是所有的导出函数名字改编得都有问题,某些函数如构造函数,析构函数等都是对的。。。

请问一下大家有没有遇到过类似问题,或者是否有某些编译选项可以选择导出函数名字的改编方式?
谢谢了。
...全文
326 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
shootingstars 2010-09-29
  • 打赏
  • 举报
回复
谢谢mapoor。
是不是def仅仅是导出的时候使用的?

我当然可以修改def,甚至可以去掉它。但是这是一个庞大开源软件(OpenOffice)中的一个dll,我担心去掉它会对于其他的应用有影响。
(呵呵,主要是我刚开始研究OpenOffice,担心去掉它会导致其他的问题)
mapoor 2010-09-29
  • 打赏
  • 举报
回复
def文件是在 导出动态链接库时用的。既然dll已经导出了,还用它干嘛?
再者,导出的名称GetBuffer@String@@QBEPBGXZ 不是你想要的GetBuffer
在导出dll之前 修改def指定其名称。
shootingstars 2010-09-29
  • 打赏
  • 举报
回复
to pengxn,zhanshen2891
C++就是因为有类似函数重载一类的问题,才会出现名字改编的。问题是各个编译器导出名字根本没有一个标准,所以导致名字改编五花八门。

我刚刚看了一下,貌似是DLL导出函数的时候用了def文件,问题是我如何在应用程序中使用这个def文件呢?
shootingstars 2010-09-29
  • 打赏
  • 举报
回复
请问一下大家,如果在dll中使用了def文件改编了名字,那么在应用程序中如何使用这个def文件呢?
zhanshen2891 2010-09-29
  • 打赏
  • 举报
回复
改为按C风格导出不就不改变名字了么

我没明白你说在你的项目中要求的导出函数名字是什么意思?

你按C++导出的自动给你改名字了啊
shootingstars 2010-09-29
  • 打赏
  • 举报
回复
嗯,C++中类导出的函数,不可能使用extern "C" 啊
pengxn 2010-09-29
  • 打赏
  • 举报
回复
使用extern "C" 修饰函数试试
shootingstars 2010-09-29
  • 打赏
  • 举报
回复
请参看帖子
http://topic.csdn.net/u/20100929/09/ae7fc15b-afe3-4e1a-8764-32599a9ce359.html?seed=345575122&r=68754013#r_68754013
问题解决
shootingstars 2010-09-29
  • 打赏
  • 举报
回复
to akirya
嗯,这个问题困扰我好多天了。。。
  • 打赏
  • 举报
回复
发了2份 ?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧