gpt4 book ai didi

c++ - __cdecl 强制前缀带下划线

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:22:03 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

您应该使用 .DEF 文件:

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

这里有

externalname = internalname 

关于c++ - __cdecl 强制前缀带下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com