__cdecl强制带下划线的前缀

时间:2011-05-13 06:30:34

标签: c++ dll export borland-c++ cdecl

我的公司为第三方提供了一个DLL,它为他们提供了可用于连接我们应用程序的API函数。 DLL是用VC9编写的,API函数使用VC的默认调用约定(__cdecl)。第三方已经围绕这个界面构建了他们的应用程序。

我现在的任务是编写DLL的更新版本。我们希望DLL具有与旧的完全相同的接口,因此它们可以互换使用。不幸的是,我们的开发环境现在是CodeGear RAD Studio 2007,因此我必须使用它来编写DLL。

最好的解决方案是使旧的和新的DLL都将其函数导出为__stdcall。然后可以重新链接第三方应用程序以期望__stdcall函数,每个人都会很高兴。不幸的是,由于各种原因,这种情况不太可能发生。

或者,我可以将我的DLL中的函数声明为__cdecl。第三方期望__cdecl功能,所以这似乎是一个很好的解决方案。遗憾的是CodeGear坚持在__cdecl函数的名称后附加下划线('_')。这意味着第三方应用程序必须有条件地调用MyApiFunction(...)_MyApiFunction(...),具体取决于他们使用的DLL。

所以我的问题是,如何从我的新DLL导出API函数,使它们是__cdecl并且以下划线('_')作为前缀?

3 个答案:

答案 0 :(得分:7)

您应该使用.DEF文件:

EXPORTS
    HTMLayoutClassNameA = HTMLayoutClassNameA
    HTMLayoutClassNameW = HTMLayoutClassNameW
    HTMLayoutClipboardCopy = HTMLayoutClipboardCopy
    ...

我们有

externalname = internalname 

答案 1 :(得分:0)

Borland C / C ++编译器可以选择打开和关闭符号上的下划线生成。 -u(默认值)在符号名称上生成下划线。将-u-添加到命令行,看看是否有帮助。 (我不确定CodeRad中的这个位置,但我非常肯定会记住它可以在IDE中的某个地方完成。)

答案 2 :(得分:0)

使用-vu编译器选项不将下划线前缀加到bcc中的导出符号名称

相关问题