易語言中調(diào)用DLL 使用說明
基本說明
本文所描述的部分功能需易語言4.01或以上版本支持。
“在易語言中調(diào)用DLL ”包含兩方面的內(nèi)容:調(diào)用Windows 系統(tǒng)API 函數(shù);調(diào)用普通DLL 函數(shù)。
下文用到的“調(diào)用API ”或“調(diào)用DLL ”等字眼,除非特別注明,一般都是指以上兩方面之一或之和,視上下文而定。絕大多數(shù)情況下,無需明確區(qū)分調(diào)用的是系統(tǒng)API 還是普通DLL 。
目前易語言只支持以stdcall 方式調(diào)用DLL 中的導(dǎo)出函數(shù)。
Windows 系統(tǒng)API 一般都是以stdcall 調(diào)用方式導(dǎo)出的,故在易語言中調(diào)用它們時(shí)通常不必考慮函數(shù)調(diào)用方式的問題。而普通DLL 有可能導(dǎo)出“非stdcall 調(diào)用方式”(比如cdecl )的函數(shù),調(diào)用時(shí)需要特別注意。一般而言,考慮到通用性,DLL 開發(fā)者都會選擇導(dǎo)出以sdtcall 方式調(diào)用的函數(shù)。(支持生成DLL 的編程語言通常都支持導(dǎo)出stdcall 調(diào)用方式的函數(shù),具體實(shí)現(xiàn)請參考各編程語言手冊。)
易語言編譯生成的DLL ,其導(dǎo)出函數(shù)全部為stdcall 調(diào)用方式,所以在易語言中調(diào)用易語言生成的DLL 不存在問題。
目前在易語言中調(diào)用DLL 時(shí)只支持1字節(jié)對齊的結(jié)構(gòu)(自定義數(shù)據(jù)類型)
如果DLL 命令的某個(gè)參數(shù)或參數(shù)的某個(gè)成員是結(jié)構(gòu)類型(自定義數(shù)據(jù)類型),則其對齊方式必須是1字節(jié)對齊。Windows 系統(tǒng)API 中所用到的結(jié)構(gòu)都是1字節(jié)對齊的,故在調(diào)用API 時(shí)不受此限制。但如果想用其它編
程語言生成DLL 供易語言調(diào)用且數(shù)據(jù)類型中包含了1或2字節(jié)數(shù)據(jù)長度的成員(如字符型或短整數(shù)),就需要考慮結(jié)構(gòu)的1字節(jié)對齊。