全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1421
推到 Plurk!
推到 Facebook!

Delphi 中使用 Win32 API 會先被轉換嗎?

尚未結案
cancer
高階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-17 21:22:02 IP:210.201.xxx.xxx 未訂閱
各位大大好, 我想瞭解如何在 Delphi 使用 Windows 的 API,但有個問題困惑著我,那就是: 呼叫 API,是不是必須 Delphi 有定義過這個 API 的 Delphi 版本,才能在 Delphi 中呼叫它? 我會有這個問題,是因為在 Delphi 中直接呼叫,而不須經過轉換的話,好像是不太可能。試想看看,Windows 的 API 肯定不是用 object pascal 寫的,當中函式的 calling convention 跟 Delphi 的並不一樣。如果真的要經過轉換,那就等於說,即使我們知道如何使用某個 API,但如果 Delphi 沒有定義過這個 API 的 Delphi 版本,我們就不能使用它了。API 那麼多,Delphi 似乎不可能為每個 API 都定義一個版本。 這裡也延伸出另一個問題,並不是呼叫某個 API 就能做事,有些 API 需要傳 入某個型態的結構(即Delphi的record),而這些結構,在 Win32 裡面都已經定義好了,如果 Delphi 沒有另外再定義這些結構的 Delphi 版本,那麼我們也無法宣告這種結構,也等無法使用需要傳入這種結構的 API。 在Visual C 中 呼叫 API, 是非常自然的事,但轉換到 Delphi 之後,呼叫 API,我就一頭霧水了,希望大大們替我解惑解惑,謝謝。
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-17 22:55:44 IP:203.204.xxx.xxx 未訂閱
您可以Source\Rtl\Win裡面看,裡面有Borland替我們做好的Api Interface,如Socke,Win32 APi,ShellApi...等 早期Delphi 1時,Windows API的外部宣告分別是放在WinTypes與WinProcs這兩個unit中,直到Delphi 2,這兩個unit才合併成Windows這個單元,Windows這個Unit就是存放Win32 Api的宣告與函式. 發表人 - supman 於 2005/04/17 23:10:01
cancer
高階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-17 23:41:54 IP:210.201.xxx.xxx 未訂閱
Superman 大大, 我先前就有看過一下 Source\Rtl\Win\Windows.pas,總共 1157 kb,即一百多萬個字元,差不多等於一本一千頁的原文書,而且是頁頁滿字無空間,這樣來查 API 並無效率,有失 Delphi 開發環境的 RAD 真義。 Windows.pas的內容是給 Delphi 看的,不是給人看的,所以其內容結構以人的角度來看,又夠零亂,例如函式原型和型態宣告交錯混雜,又有很多 Compiler directives 夾雜其中,也沒有解說,不像 StrUtils.pas 的整齊,StrUtils.pas 裡面還有每個函式的使用簡說。 Delphi 的 HELP 裡面只有 Microsoft 的原版 SDK 說明,而並不是 "如何在 Delphi 下使用 Windows SDK ",學習如何在 Delphi 使用 API,好像有點不具效率。
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-18 00:15:12 IP:203.204.xxx.xxx 未訂閱
我是supman不是superman= =" 基本上我是看Win32 Programmer's Reference 的OnLine Help及一本1~2千頁的Bible做兩相比對參考,而我的學習的方式是在Bible目錄函式處,將所有函式加上自己的中文註解,以前Dos下C Bible我也做過一次,很花時間,但滿有效的.
cancer
高階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-19 00:00:37 IP:210.201.xxx.xxx 未訂閱
對不起,原來是 supman 大大 ,不是超人大大。 我想那本一定是 Charles Petzold 的 Programming Windows。我會參考您的方法,不過,我比較喜歡把函式資料自行輸入成為 Access 資料庫, 因為那不但可以排序,也可以替函式分類,我已經把一些常用的 Delphi 函式打成 Access 資料表,查起來比用 HELP 來查快很多,因為資料表可以一次秀出一、二十個函式,馬上就可以看出類似函式間的差異處,但 HELP 每次只能看一個。
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-20 10:03:32 IP:60.248.xxx.xxx 未訂閱
Delphi 自己宣告的 Win32 API 不是很齊 底下的這份,比較齊全,幾乎常見的 API 都幫你宣告了 大致上,如果是宣告在 XXX.h 的,會被宣告在 JwaXXX.pas http://sourceforge.net/projects/jedi-apilib 另外,就是其實也是可以自己宣告啊 使用 Windows API 其實跟使用 DLL 的意義是差不多的 如果有 .h 及使用的 DLL 名稱,要轉換成 Delphi 的宣告語法很容易的 實際上也是有這種工具(h2pas)可以使用
cancer
高階會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-20 23:23:59 IP:210.201.xxx.xxx 未訂閱
爬蟲類大大, 我想常用的 API 都會有 Delphi 版本,我先使用它們,其他較少用的,則再另想辨法。 謝謝
系統時間:2024-05-05 12:05:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!