如何在C++ Builder项目中静态链接Delphi过程

Pep*_*Pep 1 delphi c++builder

我想静态链接C++ Builder源代码中的Delphi函数.我将.pas文件添加到C++ Builder项目中.我尝试了以下声明:

在德尔福:

procedure SayHi; stdcall;
Run Code Online (Sandbox Code Playgroud)

在C++ Builder中:

extern "C" {
    void __stdcall SayHi();
}
Run Code Online (Sandbox Code Playgroud)

所有模块编译正常,但当我链接它时,我收到以下错误:

[ilink64 Error] Error: Unresolved external 'SayHi' referenced from C:\DEV\PACKSWAP\WIN64\DEBUG\MAIN.O
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Rem*_*eau 7

.pas在C++ Builder项目中编译文件时,.hpp会自动创建一个头文件,然后您可以#include在需要的C++代码中创建该头文件.无需手动声明该功能.

链接器错误是由于您extern "C"在C++端的使用.这会影响C++编译器为该函数发出名称修改/装饰的方式,因此它与Delphi编译器发出的名称修改/修饰不匹配.这就是链接器无法找到函数实现的原因.删除extern "C",然后两个编译器应发出相同的名称mangling/decoration,以允许链接器匹配它们.