Delphi學習之HInstance

var
h,a,f: Cardinal;
begin
h := HInstance;
a := Application.Handle;
f := Self.Handle;
ShowMessage(IntToStr(h)); {4194304}
ShowMessage(IntToStr(a)); {13107942}
ShowMessage(IntToStr(f)); {4260652}
end;

通過測試看出: HInstance、Application.Handle、Self.Handle 不是一回事.

Self.Handle 是窗體的句柄;

Application.Handle 也是個窗口的句柄, 不過這個窗口很小, 在任務欄上;

HInstance 是程序實例的句柄; 同一個程序可能會有幾個副本同時允許, 每個副本當然會有不同的句柄. 

-----------------------------------------------------

HInstance是你的EXE或者DLL加載內存的首地址,很多查找資源文件的函數都需要這個值

在Delphi中,可以通過訪問一個叫HInstance的全局變量來獲取本應用程序的實例句柄。
如果一個程序編譯成包,那麼HInstance並不代表應用程序的模塊句柄。此時要用MainInstance
來訪問宿主程序的模塊句柄,而HInstance代表代碼所在的模塊句柄。

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := IntToStr(getmodulehandle('本程序在磁盤上的全路徑名'));
Caption := Caption + '|' + IntToStr(HInstance);
end;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章