Delphi 系統[28]關鍵字和保留字 index、near、far、export、exports、external、name、resident
阿新 • • 發佈:2021-08-16
Delphi 系統[28]關鍵字和保留字 index、near、far、export、exports、external、name、resident
1、定義:
- index :用於在屬性中標識序號,以便用相同的屬性方法(Get,Set)對不同的屬性進行操作。index 關鍵字也用於在屬性中指出多個元素。
- near :標明函式的呼叫協定,指出函式可以被本地呼叫。其他程式可以用 dll 的形式呼叫程式內的函式,保留它是為了向下相容。
- far :標明瞭函式呼叫協定,指出函式可以被遠端呼叫。其他程式可以用 dll 的形式呼叫程式內的函式,保留它是為了向下相容。
- export :標明瞭函式的呼叫協定,指出函式可以被輸出,輸出的函式能被本地或遠端呼叫。其他程式可以用 dll 的形式呼叫程式內的函式,保留它是為了向下相容。
- exports :用於輸出物件,它必須被用在介面和實現之間,可以同時輸出多個項,項與項之間用逗號分開。
- external :用於引用一個外部的或是 OBJ 內的方法。使用 external 關鍵字時,程式碼必須注意大小寫,否則將出現錯誤。
- name :用於指出方法的別名,對於一個要被外部引用的方法,建議用 name 申請方法別名,以避免外部程式改動方法的實體內容。從外部引用一個方法時,如果該方法有別名,則必須用 name 進行標識。
- resident :使用 resident,則當 DLLs 裝入時,特定的輸出資訊始終保持在記憶體中。這樣當其它應用程式呼叫該過程時,可以比利用名字掃描 DLL 入口降低時間開銷。對於那些其它應用程式常常要呼叫的過程或函式,使用 resident 指示是合適的。這個關鍵字已經被廢棄不用了。
2、示例:
{ index:屬性序號 } type TMyObject = class(TObject) private FLeft: Integer; FTop: Integer; FWidth: Integer; FHeight: Integer; function GetInfo(const Index: Integer): Longint; procedure SetInfo(const Index: Integer; const Value: Longint); public property iLeft: Longint index 0 read GetInfo write SetInfo; property iTop: Longint index 1 read GetInfo write SetInfo; property iWidth: Longint index 2 read GetInfo write SetInfo; property iHeight: Longint index 3 read GetInfo write SetInfo; end; function TMyObject.GetInfo(const Index: Integer): Longint; begin case Index of 0: Result := FLeft; 1: Result := FTop; 2: Result := FWidth; 3: Result :=FHeight; end; end; procedure TMyObject.SetInfo(const Index: Integer; const Value: Longint); begin case Index of 0: FLeft := Value; 1: FTop := Value; 2: FWidth := Value; 3: FHeight :=Value; end; end; ---------------------------------------------------------------------------------------- { index:屬性的多個元素 } type TMyObject = class(TObject) private FList: TStringList; function GetItem(Index: Integer): string; procedure SetItem(Index: Integer; const Value: string); public constructor Create; destructor Destroy; override; property Items[Index: Integer]: string read GetItem write SetItem; end; constructor TMyObject.Create; begin inherited; FList := TStringList.Create; FList.Add('星期一'); FList.Add('星期二'); FList.Add('星期三'); FList.Add('星期四'); FList.Add('星期五'); FList.Add('星期六'); FList.Add('星期日'); end; destructor TMyObject.Destroy; begin FList.Free; inherited; end; function TMyObject.GetItem(Index: Integer): string; begin if (Index >= 0) and (Index <= (FList.Count - 1)) then Result := FList[Index] else Result := 'Out of Index'; end; procedure TMyObject.SetItem(Index: Integer; const Value: string); begin if (Index >= 0) and (Index <= (FList.Count - 1)) then FList[Index] := Value; end; procedure TForm1.Button1Click(Sender: TObject); var I: Integer; MyObj: TMyObject; begin MyObj := TMyObject.Create; try Caption := MyObj.Items[2]; MyObj.Items[2] := 'Wednesday'; for I := 0 to 6 do ShowMessage(MyObj.Items[I]); finally MyObj.Free; end; end; --------------------------------------------------------------------------------------- { near } function Add(A, B: Integer): Integer; near; { 如果這個程式被編譯為 Test.exe,並且另一個處於本地的程式需要呼叫這個函式,可以使用以下語句 } function Add(A, B: Integer): Integer; stdcall; external 'Test.exe'; ---------------------------------------------------------------------------------------- { far } function Add(a,b: Integer): Integer; far; { 如果這個程式被編譯為 Test.exe, 並且另一個處於其他計算機的程式需要呼叫這個函式, 可以使用以下語句 } function Add(a,b: Integer): Integer; stdcall; external 'Test.exe'; ---------------------------------------------------------------------------------------- { export } function Add(a,b: Integer): Integer; export; { 如果這個程式被編譯為 Test.exe, 而另一個程式需要呼叫這個函式,可以使用以下語句 } function Add(a,b: Integer): Integer; stdcall; external 'Test.exe'; ---------------------------------------------------------------------------------------- { exports } library Test; function TestFunc(I: Integer): string; stdcall; begin Result := IntToStr(I); end; exports TestFunc; begin end. { name 如果輸出的物件被過載,則必須給物件起個別名,並註明引數 } library Test; function TestFunc(I: Integer): string; overload; stdcall; begin Result := IntToStr(I); end; function TestFunc(S: string): Integer; overload; stdcall; begin Result := StrToInt(S); end; exports TestFunc(I: Integer) name 'TestFunc1', TestFunc(S: string) name 'TestFunc2'; begin end. ---------------------------------------------------------------------------------------- { external } {$L Test.OBJ} procedure TestFunc(I:Integer); external; { 如果是從 dll 或外部程式中引用,則可以使用以下程式碼 } function TestFunc(FileName: string): string; external 'Test.dll'; { 如果被引用的函式被過載,則必須另外指出引用的名稱 } function MyFunc1(Code: Integer): string; overload; stdcall; external 'Test.dll' name 'TestFunc1'; function MyFunc2(Name: string): Integer; overload; stdcall; external 'Test.dll' name 'TestFunc2'; ---------------------------------------------------------------------------------------- { name } function MessageBox(HWnd: Integer; Text, Caption: PChar; Flags: Integer): Integer; stdcall; external 'user32.dll' name 'MessageBoxA'; ---------------------------------------------------------------------------------------- { resident } function Test: string;exports Test name 'MyTest' resident; //編譯時會給出警告:Symbol 'RESIDENT' is deprecated
建立時間:2021.08.16 更新時間:
部落格園 滔Roy https://www.cnblogs.com/guorongtao 希望內容對你所有幫助,謝謝!