我想静态链接来自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
我错过了什么?
答案 0 :(得分:7)
在C ++ Builder项目中编译.pas
文件时,会自动创建一个.hpp
头文件,然后您可以在需要时在C ++代码中#include
。无需手动声明该功能。
链接器错误是由于您在C ++端使用extern "C"
。这会影响C ++编译器为该函数发出名称修改/装饰的方式,因此它与Delphi编译器发出的名称修改/修饰不匹配。这就是链接器无法找到函数实现的原因。删除extern "C"
然后两个编译器应该发出相同的名称mangling / decoration以允许链接器匹配它们。