用Delphi 制作DLL
一 Dll 的制作一般步驟
二 參數傳遞
三 DLL 的初始化和退出清理[如果需要初始化和退出清理]
四 全局變量的使用
五 調用靜態載入
六 調用動態載入
七 在DLL 建立一個TForM
八 在DLL 中建立一個TMDIChildForM
九 示例:
十 Delphi 制作的Dll 與其他語言的混合編程中常遇問題:
十一 相關資料
一 Dll 的制作一般分為以下幾步:
1 在一個DLL 工程里寫一個過程或函數
2 寫一個Exports 關鍵字,在其下寫過程的名稱。不用寫參數和調用后綴。
二 參數傳遞
1 參數類型最好與window C++的參數類型一致。不要用DELPHI 的數據類型。
2 最好有返回值[即使是一個過程],來報出調用成功或失敗,或狀態。成功或失敗的返回值
最好為1[成功]或0[失敗].一句話,與windows c++兼容。
3 用stdcall 聲明后綴。
4 最好大小寫敏感。
5 無須用far 調用后綴,那只是為了與windows 16 位程序兼容。
三 DLL 的初始化和退出清理[如果需要初始化和退出清理]
1 DLLProc[SysUtils 單元的一個Pointer]是DLL 的入口。在此你可用你的函數替換了它的
入口。但你的函數必須符合以下要求[其實就是一個回調函數]。如下:
procedure DllEnterPoint(dwReason: DWORD);far;stdcall;
dwReason 參數有四種類型:
DLL_PROCESS_ATTACH:進程進入時
DLL_PROCESS_DETACH 進程退出時
DLL_THREAD_ATTACH 線程進入時
DLL_THREAD_DETACH 線程退出時
在初始化部分寫:
DLLProc := @DLLEnterPoint;
DllEnterPoint(DLL_PROCESS_ATTACH);
2 如Form 上有TdcomConnection 組件,就Uses Activex,在初始化時寫一句CoInitialize
(nil);
3 在退出時一定保證DcomConnection.Connected := False,并且數據集已關閉。否則報地
址錯。
四 全局變量的使用
在widnows 32 位程序中,兩個應用程序的地址空間是相互沒有聯系的。雖然DLL 在內存中
是一份,但變量是在各進程的地址空間中,因此你不能借助dll 的全局 |
|