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