__cdecl强制使用带下划线的前缀
__cdecl forcing prefix with underscore
我的公司为第三方提供了一个DLL,该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。
所以我的问题是,如何以__cdecl且不带有下划线('_')前缀的方式从我的新 DLL 导出 API 函数?
你应该使用 .DEF 文件:
EXPORTS
HTMLayoutClassNameA = HTMLayoutClassNameA
HTMLayoutClassNameW = HTMLayoutClassNameW
HTMLayoutClipboardCopy = HTMLayoutClipboardCopy
...
在这里我们有
externalname = internalname
Borland C/C++编译器可以选择打开和关闭符号的下划线生成。 -u
(默认值)在符号名称上生成下划线。将-u-
添加到命令行,看看是否有帮助。(我不确定在 CodeRad 中的哪个位置执行此操作,但我几乎可以记住它可以在 IDE 中的某个地方完成)。
使用 -vu 编译器选项,不在密件抄送中导出的符号名称前面加上下划线
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 下划线不会与"发送输入"一起显示C++
- 在 QTextEdit C++ 中为特定行添加下划线
- 导出函数中有多少下划线('_')(C++
- 有没有选项不自动所有前导下划线 _ 以导出 emscripten 中的函数?
- 删除数字并在C++中保留字符串的下划线
- c++ 函数中额外的下划线名称
- 在C 中,Haskell下划线有其他选择吗?
- 使用与号后跟下划线命名的变量是什么意思?
- C++20 中的严格别名规则是否允许标准 c++ unicode 字符和下划线类型之间"reinterpret
- 用下划线填充空格
- 在Typedef结构中,下划线意味着什么
- 为什么非下划线名称保留给 UDL 的实现,而不是相反
- Visual Studio构建OpenSSL,具有符号的下强前缀
- 下划线、名称和文字运算符
- 检查两个彼此相邻的两个下划线
- 使用查找检查,如果我的字符串中有下划线
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 用户定义的文字、下划线和全局名称
- __cdecl强制使用带下划线的前缀