六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Win32 API 使用的特殊情況

[摘要]我個人認為,Delphi 是當(dāng)今最好的 Windows 可視化開發(fā)工具。其種種特點令開發(fā)如虎添翼。但要想發(fā)揮出 Delphi 真正的內(nèi)含性能比如開發(fā)控件,實現(xiàn)一些特殊的功能,就必須直接調(diào)用 Win32 API。Win32 API 主要包含在 Windows95/98/NT/2K 的系統(tǒng)動態(tài)連接庫中...
    我個人認為,Delphi 是當(dāng)今最好的 Windows 可視化開發(fā)工具。
其種種特點令開發(fā)如虎添翼。但要想發(fā)揮出 Delphi 真正的內(nèi)含性能
比如開發(fā)控件,實現(xiàn)一些特殊的功能,就必須直接調(diào)用 Win32 API。
Win32 API 主要包含在 Windows95/98/NT/2K 的系統(tǒng)動態(tài)連接庫中
如 Kernel32.dll、User32.dll、Gdi32.dll、Shell32.dll 等等
    通常情況下 我們只要在代碼的 Uses 部分加入 Windows 等單元
的聲明即可像使用 Delphi 內(nèi)置函數(shù)一樣的使用 Win32 API 函數(shù),十
分方便。
    但是,這樣使用有時候會帶來一些意想不到的麻煩。具體如下:
眾所周知,Windows 的版本十分多,僅 Win95 就有 Win95A,Win95B
等等,而它們對 Win32 API 的實現(xiàn)是有細微差別的,盡管它們都是
Win32 平臺。有一些 Win32 API 函數(shù)在特定的 Windows 版本中名稱有
些許不同,或者根本就是是不存在的。
    這樣就帶來了問題: Delphi 的 Windows 等單元是與當(dāng)時最新的
Win32 API 全集對應(yīng)的,Delphi 在編譯的時候總是動態(tài)連接 Windows
函數(shù)庫(所有的 Windows 編譯型開發(fā)工具都是這樣的)。編譯時毫無
問題的代碼,其可執(zhí)行文件在特定的 Windows 平臺上就無法使用。
    由于 Windows 的可執(zhí)行文件加載機制,在 Delphi 集成環(huán)境中是
無法跟蹤這樣的潛在問題的。下面舉兩個例子:
    例一:
    Win32 API 聲明:
    function BroadcastSystemMessage; external user32
       name 'BroadcastSystemMessageA';
    (來自 Delphi 5 Enterprise Windows.pas :29408)
注意,使用這個函數(shù)編譯后,程序在 Win95 的早期版本中無法使用(
好像是 Win95A)
    將函數(shù)聲明改為如下后,問題解決:
    function BroadcastSystemMessage; external user32
       name 'BroadcastSystemMessage'; //注意這里!!
    例二:
    Win32 API 聲明:
    function SHGetSpecialFolderPath; external shell32
       name 'SHGetSpecialFolderPathA'
    (來自 Delphi 5 Enterprise ShlObj.pas :3333)
注意,使用這個函數(shù)編譯后,程序在 Win95 某版本中無法使用
(Shell32.dll 版本:4.00.1111),因為這個函數(shù)根本就不存在!!
目前我尚無解決方案
    要避免這樣的問題的出現(xiàn),有兩個方法:
    一:不直接使用 Win32 API,找第三方控件(這個方法好像是廢話)
    二:動態(tài)加在函數(shù)。方法如下:以 Win2K 中的 AnimateWindow 為例
(關(guān)于 AnimateWindow 函數(shù)的詳細討論,請到 www.csdn.net 文檔,VB
查找關(guān)鍵字 AnimateWindow,感謝: iProgram)

Unit XXXX;
.....
type
   FAnimateWindow = function(
                       const hwnd : HWND;       //僅對窗口有效
                       const dwTime : DWORD;    //動畫持續(xù)時間,默認200ms
                       const dwFlags : DWORD): DWORD; stdcall;
   
function AnimateWindow(const hWnd : HWND; const dwTime : DWORD;
                       const dwFlags : DWORD): DWORD;

implementation

function AnimateWindow(const hWnd : HWND; const dwTime : DWORD;
                       const dwFlags : DWORD): DWORD;
var
   DLLHandle : THandle;
   AnimateWindow : FAnimateWindow;
begin
   Result := 0;
   DLLHandle := LoadLibrary('user32.dll');
   @AnimateWindow := GetProcAddress(DllHandle,'AnimateWindow');
   Result := AnimateWindow(hWnd, dwTime, dwFlags);
end;

.....
end.

怎么樣,是有些麻煩吧,很值的。
    如果你不想讓自己的程序挑三揀四,
    如果你不想讓自己被稱為廢物程序員,呵呵,試一下吧。


主站蜘蛛池模板: 日韩中文一区宇都宫紫苑 | 日韩欧美精品综合久久 | 天天看天天干 | 在线不欧美 | 亚洲综合视频在线 | 速度与激情9在线 | 亚洲一区2区三区4区5区 | 四虎一区二区三区 | 亚洲欧洲精品在线 | 午夜欧美激情 | 天堂√在线中文资源网 | 亚洲婷婷综合网 | 在线成人免费观看国产精品 | 婷婷综合久久中文字幕 | 亚洲欧美精品在线 | 四虎影视国产在线观看精品 | 欧美一级在线观看视频 | 日韩三级视频在线观看 | 四虎精品成人a在线观看 | 亚欧精品在线观看 | 中文成人在线视频 | 日本乱中文字幕系列在线观看 | 日本a在线观看 | 欧美一区二区三区久久综合 | 亚洲福利视频网 | 欧美午夜视频在线观看 | 日本在线观看a | 亚洲成人免费网站 | 在线视频二区 | 天天摸夜夜添久久精品麻豆 | 日本高清视频免费观看 | 日韩免费专区 | 午夜精品18视频 | 婷婷丁香五 | 日韩国产免费一区二区三区 | 午夜性刺激片免费观看成人 | 欧美在线小视频 | 日本在线网站 | 欧美在线观看网址 | 四虎影视国产精品永久在线 | 青青草狠狠干 |