2014-01-30 46 views
1

我想靜態鏈接C++ Builder源代碼中的Delphi函數。我將.pas文件添加到C++ Builder項目中。我嘗試了以下聲明:如何在C++ Builder項目中靜態鏈接Delphi過程

在Delphi:

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 

我錯過了什麼?

回答

7

當您在C++ Builder項目中編譯.pas文件時,會自動創建一個.hpp頭文件,然後您可以在需要的C++代碼中使用#include。不需要手動聲明該功能。

鏈接器錯誤是由於您在C++端使用了extern "C"。這影響了C++編譯器如何爲該函數發出名稱修飾/修飾,所以它與Delphi編譯器發出的名稱修飾/修飾不匹配。這就是鏈接器找不到函數實現的原因。刪除extern "C",然後這兩個編譯器應該發出相同的名稱修飾/修飾以允許鏈接器匹配它們。

相關問題