1.delphi怎么樣編寫DLL文件和怎么樣去加載我編寫的DLL文件,請高手DLL寫法:
library DLL;
uses
SysUtils,
Classes;
procedure proc;stdcall; //加上stdcall關鍵字
begin
end;
exports //申明的函數在這里導出以被其他程序調用
proc;
begin
end.
調用則有兩種方法
一種是靜態 只需寫
procedure proc;stdcall ; external 'DLL.dll' ;
便可當一般函數調用
另一種是動態
type
TProc = procedure;stdcall;
var
DLLHandle: THandle; //DLL句柄
proc = TProc; //函數變量
begin
DLLHandle := LoadLibrary('DLL.dll'); //Load DLL
@proc := GetProcAddress(DLLHandle, 'proc'); //得到函數的地址
proc; //調用過程
FreeLibrary(DLLHandle); //釋放
end;
2.Delphi7怎么寫dll函數Delphi里array of xxxx參數叫變體數組,信息包括了上下標信息 。
C里的數組只能從0開始,這是就差別,數據類型都不一樣 。大概會是這樣: type PSignle = ^Signle;function pisn_getsnapshots(pt: PInteger;rval: PSingle;istat:PInteger; timedate:PInteger; error:PInteger; count: Integer):Integer;stdcall;external 'piapi32.dll';var pt: array[0..9] of Integer;var rval: array[0..9] of Single;var istat: array[0..9] of Integer;var timedate: array[0..9] of Integer;var error: array[0..9] of Integer;begin pisn_getsnapshots(@pt[0], @rval[0], @istat[0], @timedate[0], @error[0], 10);end; 。
3.在Delphi里面如何使用DLL?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的全局變量來達到兩個應用程序間的數據傳遞,除非你用內存映像文件 。五 調用靜態載入1 客戶端函數聲名:1)大小寫敏感 。
2)與DLL中的聲明一樣 。如: showform(form:Tform);Far;external'yproject_dll.dll';3)調用時傳過去的參數類型最好也與windows c++一樣 。
4)調用時DLL必須在windows搜索路徑中,順序是:當前目錄;Path路徑;windows;widows\system;windows\ssystem32;六 調用動態載入1 建立一種過程類型[如果你對過程類型的變量只是一個指針的本質清楚的話,你就知道是怎么回事了] 。如:type mypointer=procedure(form:Tform);Far;external;var Hinst:Thandle; showform:mypointer;begin Hinst:=loadlibrary('yproject_dll');//Load一個Dll,按文件名找 。
- css內部樣式怎么寫
- 我的教室作文怎么寫
- 墳地證明怎么寫
- 辭職回去結婚辭職書怎么寫
- 筆畫豎左彎怎么寫
- 怎么解除手機綁定 怎么解除手機綁定的軟件
- qq消息聲音 qq消息聲音怎么關閉
- word里怎么打分數 word里怎么淡化水印
- 魚湯怎么去腥味 魚湯去腥 魚湯怎么除腥,魚湯煮好了怎么除腥
- 1月5日英語怎么寫
