2010-11-25 92 views
3

我在Windows XP(在不久的將來遷移到Windows 7)的Delphi(D7和D2006)中進行編程。我需要爲我正在做的一些工作以及大多數數學庫(目前我傾向於Mathematica)使用數學庫,我已經研究過將生成已編譯的C代碼。這樣的代碼將爲我的主程序提供特定的功能。如何使用多種開發語言

我有一個非常基本的問題 - 給定此開發設置 - 我如何開始利用Delphi編譯的c代碼?我真的需要寶貝來讓我開始這個過程。

+0

您打算使用** Mathematica **來生成C代碼嗎? – 2010-11-25 19:29:33

+0

@Belisarius是的。 – 2010-11-25 19:32:26

回答

4

我已經用我的FE產品OrcaFlex完成了相當多的工作。你有兩個選項可以鏈接到Delphi的C代碼:靜態或動態。我靜態鏈接,因爲它使分發和版本化更容易。但讓它靜態工作真的是一個竅門,你必須依賴Delphi的一些無證方面。

我懷疑爲您的需要動態鏈接是最好的。基本上你需要編譯和鏈接你的C代碼到一個DLL中。我建議使用Borland C編譯器來做到這一點。您可以使用免費的命令行版本BCC55來執行此操作。使用Borland C的優點在於,它對Delphi 8087浮點單位進行了相同的假設。如果你使用MSVC構建,那麼你會發現MS選擇不提高浮點異常。 Borland C確實提出了浮點異常。這有點像一個角落案例,但如果您試圖發佈需要健壯的產品,它就變得相關。

您應該知道,C代碼默認情況下會使用C調用約定,我會堅持這一點。通過將外部例程聲明爲cdecl調用約定,將它帶入Delphi。

您需要注意的另一件事是定義兩個模塊之間的清晰接口。您需要確保異常不會跨越模塊邊界,並且您不會跨越邊界傳遞任何特殊類型(例如,Delphi字符串)。因此,對於字符串使用PChar(或者甚至更好的PAnsiChar或PWideChar,以確保在升級到Delphi 2009及更高版本時,它不會改變含義)。

2

如果您當前安裝了Mathematica,請轉到文檔中心並查找guide/CLanguageInterface,否則該指南是available on the web並且在那裏有很好的閱讀。

我的理解是,如果您需要全功能,Mathematica可以通過MathLink生成與Mathematica引擎鏈接的C程序,或者如果您只需要較低級別的功能,那麼它可以生成可以靜態鏈接的代碼與編譯Mathematica庫。所以這個獨立的代碼是可能的。

查看Code Generator documentation

如果您可以將C程序轉換爲DLLs,那麼從Delphi訪問這樣的外部函數相對簡單,外部聲明。

function MathematicaRoutine(const x : double) : double; external 'MyInterface.dll'; 

有勢必會在得到這個,如果你需要實現靜態綁定,使用未安裝的Mathematica,如果確實有可能工作的複雜性的大量。我從來沒有嘗試過。

3

我一直很喜歡Lohninger的SDL Library(http://www.lohninger.com/mathpack.html)。它是用Delphi寫的,可以直接編譯到你的應用程序中,所以沒有捆綁或調用約定問題或浮點使用差異,正如本主題中的其他響應所討論的。

看看他包括什麼。如果你幸運的話,他的圖書館會滿足你的需求,你就可以使用它!

2

您可以使用RAD Studio將您的項目與Delphi和C++(Builder)代碼混合使用。將自動創建的C代碼放入C++ Builder文件(.cpp)中,其餘部分添加Delphi文件。