C++ 如何强制VC++;名称mangling C++;建设者

C++ 如何强制VC++;名称mangling C++;建设者,c++,export,c++builder,C++,Export,C++builder,是否可以从具有特定损坏名称的C++Builder DLL导出函数? 我正在尝试构建一个C++Builder DLL来替换现有的VC++DLL。问题是,使用DLL的应用程序希望其中一个函数具有特定的损坏名称 也就是说,它希望调用函数: "?_FUNCTIONNAME_@@YAHPAU_PARAM1_@@PAU_PARAM2_@@@Z" 当然,我可以用一个损坏的名称从我的DLL中导出函数,但CodeGear坚持使用它自己的名称损坏方案 是否可以强制C++Builder执行以下操

是否可以从具有特定损坏名称的C++Builder DLL导出函数?
我正在尝试构建一个C++Builder DLL来替换现有的
VC++
DLL。问题是,使用DLL的应用程序希望其中一个函数具有特定的损坏名称

也就是说,它希望调用函数:

"?_FUNCTIONNAME_@@YAHPAU_PARAM1_@@PAU_PARAM2_@@@Z"
当然,我可以用一个损坏的名称从我的DLL中导出函数,但CodeGear坚持使用它自己的名称损坏方案

是否可以强制C++Builder执行以下操作:

  • 是否为函数使用特定的损坏名称

  • 是否为特定函数使用VC++名称混乱


  • 请注意,我只想更改特定函数的损坏,而不是DLL中的所有函数。

    名称损坏只是ABI的许多方面之一。事实上,它更容易标准化。编译器在使用不同的ABI时故意使用不同的名称损坏,以防止链接不兼容的对象


    对于给定函数,您可以尝试的一件事是将其标记为
    外部“C”
    ,然后它将使用C的调用约定和相同的损坏(通常完全没有损坏,或者只是一个初始的
    )。显然,这不会解决其他问题(异常处理、vtbls的精确内容、用于传递参数的寄存器、标准库的精确定义等等)

    名称篡改只是ABI的许多方面之一。事实上,它更容易标准化。编译器在使用不同的ABI时故意使用不同的名称损坏,以防止链接不兼容的对象


    对于给定函数,您可以尝试的一件事是将其标记为
    外部“C”
    ,然后它将使用C的调用约定和相同的损坏(通常完全没有损坏,或者只是一个初始的
    )。显然,这不会解决其他问题(异常处理、vtbls的精确内容、用于传递参数的寄存器、标准库的精确定义等等)

    使用
    .def
    文件为导出的函数指定您自己的命名。

    使用
    .def
    文件为导出的函数指定您自己的命名。

    我的理解是,使用
    外部“C”
    将停止函数名被损坏,我实际上希望它以某种方式被损坏。
    我的CodeGear允许开发人员使用特定的名称导出函数,但我只能使用简单的导出名称,而不能使用带有损坏字符的复杂名称。我想知道是否还有其他人能让它工作。+1,这个碎片是用来保护你免受不兼容的ABI的伤害的。你应该首先弄清楚你的目标是哪个VC++ABI无论如何,IIRC VC-pre-2005 ABI与VC2005及更高版本的ABI不兼容。我的理解是使用
    extern“C”
    将阻止函数名被损坏,我实际上希望它以某种方式被损坏。
    我的CodeGear允许开发人员使用特定的名称导出函数,但我只能使用简单的导出名称,而不能使用带有损坏字符的复杂名称。我想知道是否还有其他人能让它工作。+1,这个碎片是用来保护你免受不兼容的ABI的伤害的。你应该首先弄清楚你的目标是哪个VC++ABI,不管怎样,IIRC VC-2005之前的ABI与VC2005及更高版本的ABI不兼容。谢谢Remy。不幸的是,这似乎只适用于简单的名称。当我尝试在一个长的、损坏的函数名中执行此操作时,链接器抛出了一个错误+感谢你是唯一一个真正尝试回答我所问问题的人。谢谢雷米。不幸的是,这似乎只适用于简单的名称。当我尝试在一个长的、损坏的函数名中执行此操作时,链接器抛出了一个错误+因为我是唯一一个真正试图回答我所问问题的人。