是否可以从带有特定错位名称的C ++ Builder DLL导出函数?
我正在尝试构建一个C ++ Builder DLL来替换现有的VC++
DLL。问题是使用DLL的应用程序需要其中一个函数具有特定的受损名称。
也就是说,它希望调用函数:
"?_FUNCTIONNAME_@@YAHPAU_PARAM1_@@PAU_PARAM2_@@@Z"
当然,我可以使用错误的名称从我的DLL导出函数,但CodeGear坚持使用自己的名称修改方案。
是否可以强制C ++ Builder:
为函数使用特定的受损名称?
或
请注意,我只想更改特定函数的修改,而不是DLL中的所有函数。
答案 0 :(得分:2)
名称修改只是ABI的许多方面之一。事实上,它将更容易标准化。编译器在使用不同的ABI时会使用有目的的不同名称重整,以防止链接不兼容的对象。
你可以尝试给定一个函数的一件事是将它标记为extern "C"
,然后它将使用C的调用约定和相同的修改(通常根本没有修改或只是初始_
)。显然,不会处理其他问题(处理异常,vtbls的精确内容,哪些寄存器用于传递参数,标准库的精确定义,......)
答案 1 :(得分:2)
使用.def
文件为导出的函数指定自己的命名。