請問有關 DLL 宣告識別字的涵義 |
尚未結案
|
Taiyo
一般會員 發表:2 回覆:2 積分:0 註冊:2003-02-19 發送簡訊給我 |
|
Vicen
高階會員 發表:13 回覆:145 積分:151 註冊:2005-03-14 發送簡訊給我 |
exports语句声明为外部函数,DLL的函数必须使用exports导出后,才能在外部程序调用时看到,否则无法使用。 Stdcall、far、Cdecl、Pascal,都是默认的约定调用格式而已,无论是Object Pascal还是C 都规定,凡是要输出的例程必须采用Stdcall调用约定。 WINDOWS 32位平台API也是采用该类型的调用约定,所以使用Stdcall调用约定
在Object Pascal、C 以及Windows9X/NT/2000/2003/XP下都通用,far则是为了兼容16位系统所采用的约定方式,现在应该没人用了吧~
|
Taiyo
一般會員 發表:2 回覆:2 積分:0 註冊:2003-02-19 發送簡訊給我 |
|
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
register, pascal, cdecl, stdcall,(far,near,export是16bit Windows Programing用)簡單的說就是應用程式在呼叫副程式(procedure /function)時
"傳遞參數的協定方法",基本上如果你要了解應用程式如何傳遞參數,你必須具備一點點組合語言的知識,了解CPU架構中Stack/Register(堆疊/暫存器)。
但就實際在寫應用程式時,除非你寫組合語言或類似Compiler或Interpreter的應用程式才需要了解參數傳遞的運作細節,不然的話你只要了解,你所引用的DLL or library 的函數實做為何,你在宣告引用時,用相同的宣告即可,剩下的細節Complier會幫你解決掉 我簡單說明每種 參數傳遞的運作方式
register :由左至右將參數放入暫存器(register),此種呼叫副程式的方式最快(Delphi 預設)
pascal :由左至右將參數放入堆疊(Stack)
cdecl :由右至左將參數放入堆疊(Stack),由副程式負責清除堆疊,此種呼叫副程式的方式通常用於C,C
stdcall :由右至左將參數放入堆疊(Stack),標準的Windows API使用
safecall :由右至左將參數放入堆疊(Stack),用於COM/COM 中的Dual Interface即ActiveX 你可一參考Delphi Help的
Calling conventions
Parameter passing
Method calls
Function results 最後強調的是 除非你想寫類似Compiler或Interpreter的應用程式才需要了解參數傳遞的運作細節不然你只需知道怎麼用即可 混心雜欲 棄修身~唉
------
唉~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |