線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2665
推到 Plurk!
推到 Facebook!

想請問有那些方式可以將 Delphi 6 的專案, 建置為 64 bits 目的碼?

尚未結案
jasper
一般會員


發表:2
回覆:3
積分:1
註冊:2005-08-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-02-10 15:34:29 IP:211.23.xxx.xxx 訂閱

<!--[if gte mso 9]><xml> Normal 0 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><xml> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:表格內文; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> Hi, 各位前輩, 您好:

小弟目前需要將手邊一些 Win32 DLL 程式 (用以針對一些 x86 環境下應用軟體的 hook, Delphi 6 撰寫), 轉成 64 bits, 以便能在 Windows 7 x64 的環境下運作.

經查詢 http://edn.embarcadero.com/article/39934 網頁, 發現最快也要 2011/06 才有 Preview command line 版本. 由於客戶的壓力, 實在等不到那個時間點. 當然查資料的過程中, 也看到不少人的抱怨, 例如: http://delphihaters.blogspot.com/2010/01/64-bit-office-is-coming-to-town-delphi.html

網路上有找到 Open Pascal Compiler 這個軟體 ( http://wiki.freepascal.org/ ), 可以產生 64 bits 的目的碼, 目前剛下載來測試.

不知各位是否有移轉至該軟體的經驗, 或者採用其它的方式產生 64 bits 的目的碼, 可以分享, 供小弟參考, 感激不盡, 謝謝.

P.D.
版主


發表:571
回覆:3881
積分:3666
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-02-11 00:00:45 IP:118.169.xxx.xxx 未訂閱
其實大家都有X64的壓力, 我們以DELPHI5開發的程式, 實測結果在WIN7 X64下一樣可以正常運作, 並非有做任何調整, 或者修正WIN7下提供可以相容模式的作業或者VM模式, 而是直接把DELPHI5編譯好的程式丟到WIN7 上跑, 這是我的經驗提供你參考!
但要注意的是, 如果是使用BDE做為資料庫的引擎, Delphi內建的bde是16位元, 無法安裝在64位元的電腦, 必須找到適用32位元以上的bde安裝系統, 還有Delphi5的Install包裝程式(Delphi6我不清楚)也是無法在x64下執行的, 所以我都是用Delphi2007重新封包我的Delphi5程式, 利用Delphi2007的installshield 來安裝到win7 x64上, 到目前客戶執行的狀況一切都很順, 沒有大問題!
jasper
一般會員


發表:2
回覆:3
積分:1
註冊:2005-08-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-02-11 09:45:25 IP:211.23.xxx.xxx 訂閱

謝謝版主在深夜撥空回覆小弟的問題.

如果是一般資料庫應用的 .exe, 依版主分享的資料, 應可運作. 只是小弟遇到的是 hook 的程式, 在 Winddows 7 的世界裡, 應用程式有不同的行程種類 (例如: Office 2010 就有 32 bits or 64 bits, 不能強制客戶只能用 32 bits 的 ...; 可以由 工作管理員 辨視, 若為 32 bits 行程, 會有 * 32 的標記).

global hook 的程式, 在 32 bits 的行程裡, 必須載入 32 bits 的 dll (以 Windows 7 而言, 必須放在 Windows\SysWOW64 資料夾下); 在 64 bits 的行程裡, 必須載入 64 bits 的 dll (以 Windows 7 而言, 必須放在 Windows\System32 資料夾下). 若在 64 bits 行程裡, 載入 32 bits 的 dll, 應用程式會掛掉 ..., 因為以 integer 資料型態而言, 32 bits 與 64 bits 的長度就不同

再次謝謝版主分享的資料 ^^
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-02-12 11:39:05 IP:114.35.xxx.xxx 訂閱
您可以參考一下 Lazarus
http://www.lazarus.freepascal.org/

有 x64 版本
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
jasper
一般會員


發表:2
回覆:3
積分:1
註冊:2005-08-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-02-14 13:43:13 IP:211.23.xxx.xxx 訂閱

謝謝 sryang 兄提供的訊息.
正在 study Lazarus 與 Free Pascal 中 ...


cancer
高階會員


發表:58
回覆:319
積分:190
註冊:2004-07-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-03-10 10:04:20 IP:211.75.xxx.xxx 未訂閱
Delphi 昇級到 XE 版的講座就是講這個。
http://delphi.ktop.com.tw/board.php?cid=32&fid=107&tid=102165
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-03-10 10:16:30 IP:220.228.xxx.xxx 訂閱
Delphi XE 還不支援編譯成 x64,可能要下一個版本才可以
目前 Pascal 及 Object Pascal 的編譯器中,僅有 Free Pascal 以及 GNU Pascal 可以支援編譯成 x64
而 Lazarus IDE 底下呼叫的編譯器,就是 Free Pascal
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2011-03-09 19:25:41, 註解 無‧
jasper
一般會員


發表:2
回覆:3
積分:1
註冊:2005-08-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-03-10 14:47:18 IP:211.23.xxx.xxx 訂閱

謝謝大家的幫忙.

這段期間, 由於在忙其它的專案, 這個 x64 的部份就先擱下了.

有安裝過 Lazarus 去建置程式過, 但一建置就發生一些錯誤. 看來並不容易作轉換.

例如: 方法的參數名稱, 不可以含有 ClassName 這個變數, 依 complier 的訊息說明, 是跟 SYSTEM 這個 unit 的定義衝突. 但 Delphi 6 不會有這個錯誤. 錯誤訊息如下:
..\Utility\FindWindowUtility.pas(63,59) Error: Duplicate identifier "ClassName"
..\Utility\FindWindowUtility.pas(63,59) Hint: Identifier already defined in unit SYSTEM at line 199
[code delphi]
//==========================================================================
//尋找 child window handle,classname 必需符合 className 參數,符合條件再呼叫 FindWindProc
//==========================================================================
class function GetChildWindowWithClass(ParentWnd:HWND;CassName:string;FindWindProc:TFindWndHwndProc):HWND;overload;
[/code]

公司考量 Lazarus 為 Shareware, 故萬一後續真的發生問題, 可能會很麻煩; 且必須調整程式, 要花不少力氣, 與原來的 Delphi 是否能相容也在未定之天.

所以目前可能會改用 Microsoft Visual Studio 2010 的 C 重寫必須轉為 x64 的部份程式.

期盼 Delphi 的原廠能夠加油, 不然真的只能改用其它開發工具了 ...

系統時間:2017-10-23 17:32:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!