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

时间:2014-01-30 22:47:05

标签: delphi c++builder

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

在德尔福:

procedure SayHi; stdcall;

在C ++ Builder中:

extern "C" {
    void __stdcall SayHi();
}

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

[ilink64 Error] Error: Unresolved external 'SayHi' referenced from C:\DEV\PACKSWAP\WIN64\DEBUG\MAIN.O

我错过了什么?

1 个答案:

答案 0 :(得分:7)

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

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