Delphi 中使用 Win32 API 會先被轉換嗎? |
尚未結案
|
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
各位大大好,
我想瞭解如何在 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 發送簡訊給我 |
您可以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 發送簡訊給我 |
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 發送簡訊給我 |
|
cancer
高階會員 發表:58 回覆:319 積分:190 註冊:2004-07-31 發送簡訊給我 |
|
wyndog
資深會員 發表:7 回覆:362 積分:348 註冊:2004-10-12 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |