我的公司向第三方提供了一个 DLL,该 DLL 为他们提供了可用于连接到我们的应用程序的 API 函数。DLL 是用 VC9 编写的,API 函数使用 VC 的默认调用约定 (__cdecl)。第三方围绕这个接口构建了他们的应用程序。
我现在的任务是编写 DLL 的更新版本。我们希望 DLL 具有与旧接口完全相同的接口,以便它们可以互换使用。不幸的是,我们的开发环境现在是 CodeGear RAD Studio 2007,所以我必须使用它来编写 DLL。
最好的解决方案是让新旧 DLL 都将它们的函数导出为 __stdcall。然后可以重新链接第三方应用程序以期待 __stdcall 功能,每个人都会很高兴。不幸的是,由于各种原因,这不太可能发生。
或者,我可以将 DLL 中的函数声明为 __cdecl。第三方需要 __cdecl 函数,所以这似乎是一个很好的解决方案。不幸的是,CodeGear 坚持在 __cdecl 函数的名称后面加上下划线 ('_')。这意味着第三方应用程序必须有条件地调用MyApiFunction(...)
or _MyApiFunction(...)
,具体取决于他们使用的 DLL。
所以我的问题是,如何从我的新 DLL 中导出 API 函数,使其为 __cdecl 并且不带下划线 ('_') 前缀?