2011-06-24 95 views
5

我正在Delphi 7中開發JNI DLL文件。生成的文件將是32位DLL,不適用於64位Java VM。目標文件的64位鏈接

Delphi 7有可能生成cC++目標文件。是否有可能通過第三方鏈接器從這些對象文件創建一個64位DLL?

+0

如果您不介意更改您的delphi代碼如何與Java代碼進行對話,也許您可​​以在它們之間創建網絡接口,並將Delphi代碼放入自己的REST服務器中,該服務器作爲CGI進程運行。然後,您可以輕鬆地將32位代碼與64位Java代碼交談,因爲它們處於不同的進程中,並且只能通過套接字連接。 –

回答

9

Delphi編譯器發出32位目標代碼。無論您如何分片,無法將代碼鏈接到64位模塊中。

目前最好的選擇是使用FreePascal這可以產生64位的DLL。有一個即將到來的64位版本的德爾福,但它的發佈日期是未知的。

另一種選擇是強制使用32位版本的JVM(如果可能的話)。

+0

我並沒有否定這個想法,因爲STDCALL接口在兩種情況下都是固定的。我認爲一個最小的兼容層可以創建一個32位的段和一個包裝導出的函數。但這只是猜測。 – vbence

+3

@vbence您無法在64位進程中運行32位代碼。 –

+1

@vbence - 調用約定在Win32和Win64上實際上是不同的。但是,從技術角度來看,編寫32位和64位代碼之間的橋樑是正確的(請參閱http://cc.embarcadero.com/item/27667)。 – PhiS

3

除了簡單地使用64位指令之外,64位代碼與32位代碼是非常不同的。 MS在參數傳遞,堆棧數據和對齊等方面引入了更嚴格的規則。真的沒有辦法在64位DLL中包含32位代碼(由於這也禁止從64位調用32位代碼,反之亦然,但使用特定技術)。你必須等待Delphi 64位編譯器(並希望它的第一個版本足夠好),或者看看別處。無論如何,Delphi 7已經過時了。

+0

謝謝!我知道它已經過時了,但我正在訂閱關於這個組件的「如果沒有破解不修復」的方法。 – vbence

+2

@vbence如果您不想更改Pascal代碼,則使用32位JVM –