在易語(yǔ)言中調(diào)用DLL(共9頁(yè))_第1頁(yè)
在易語(yǔ)言中調(diào)用DLL(共9頁(yè))_第2頁(yè)
在易語(yǔ)言中調(diào)用DLL(共9頁(yè))_第3頁(yè)
在易語(yǔ)言中調(diào)用DLL(共9頁(yè))_第4頁(yè)
在易語(yǔ)言中調(diào)用DLL(共9頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、易語(yǔ)言中調(diào)用(dioyng)DLL使用說(shuō)明基本(jbn)說(shuō)明本文(bnwn)所描述的部分功能需易語(yǔ)言4.01或以上版本支持。“在易語(yǔ)言中調(diào)用DLL”包含兩方面的內(nèi)容:調(diào)用Windows系統(tǒng)API函數(shù);調(diào)用普通DLL函數(shù)。下文用到的“調(diào)用API”或“調(diào)用DLL”等字眼,除非特別注明,一般都是指以上兩方面之一或之和,視上下文而定。絕大多數(shù)情況下,無(wú)需明確區(qū)分調(diào)用的是系統(tǒng)API還是普通DLL。目前易語(yǔ)言只支持以stdcall方式調(diào)用DLL中的導(dǎo)出函數(shù)。Windows系統(tǒng)API一般都是以stdcall調(diào)用方式導(dǎo)出的,故在易語(yǔ)言中調(diào)用它們時(shí)通常不必考慮函數(shù)調(diào)用方式的問(wèn)題。而普通DLL有可能導(dǎo)出“非std

2、call調(diào)用方式”(比如cdecl)的函數(shù),調(diào)用時(shí)需要特別注意。一般而言,考慮到通用性,DLL開(kāi)發(fā)者都會(huì)選擇導(dǎo)出以sdtcall方式調(diào)用的函數(shù)。(支持生成DLL的編程語(yǔ)言通常都支持導(dǎo)出stdcall調(diào)用方式的函數(shù),具體實(shí)現(xiàn)請(qǐng)參考各編程語(yǔ)言手冊(cè)。)特別地,在VC中類(lèi)似如下代碼導(dǎo)出的函數(shù)并非stdcall調(diào)用方式:extern C_declspec (dllexport) test(int a, int b)return (a + b);要想該函數(shù)被易語(yǔ)言調(diào)用,應(yīng)該按類(lèi)似如下方式定義(并在.def文本中聲明導(dǎo)出):int WINAPI test (int a, int b)return (a +

3、b);易語(yǔ)言編譯生成的DLL,其導(dǎo)出函數(shù)全部為stdcall調(diào)用方式,所以在易語(yǔ)言中調(diào)用易語(yǔ)言生成的DLL不存在問(wèn)題。目前在易語(yǔ)言中調(diào)用DLL時(shí)只支持1字節(jié)對(duì)齊的結(jié)構(gòu)(自定義數(shù)據(jù)類(lèi)型)如果DLL命令的某個(gè)參數(shù)或參數(shù)的某個(gè)成員是結(jié)構(gòu)類(lèi)型(自定義數(shù)據(jù)類(lèi)型),則其對(duì)齊方式必須是1字節(jié)對(duì)齊。Windows系統(tǒng)API中所用到的結(jié)構(gòu)都是1字節(jié)對(duì)齊的,故在調(diào)用API時(shí)不受此限制。但如果想用其它編程語(yǔ)言生成DLL供易語(yǔ)言調(diào)用且數(shù)據(jù)類(lèi)型中包含了1或2字節(jié)數(shù)據(jù)長(zhǎng)度的成員(如字符型或短整數(shù)),就需要考慮結(jié)構(gòu)的1字節(jié)對(duì)齊。在VC中,可以這樣定義1字節(jié)對(duì)齊的結(jié)構(gòu)(結(jié)構(gòu)在C/C+中稱(chēng)為struct):#pragma pa

4、ck (push, old_value) / 保存VC+編譯器結(jié)構(gòu)對(duì)齊字節(jié)數(shù)。#pragma pack (1) / 設(shè)置為以一字節(jié)對(duì)齊。struct xxxbyte a;int b;double c;#pragma pack (pop, old_value) / 恢復(fù)VC+編譯器結(jié)構(gòu)對(duì)齊字節(jié)數(shù)。在Delphi中,可以(ky)這樣定義1字節(jié)對(duì)齊的結(jié)構(gòu)(結(jié)構(gòu)(jigu)在Delphi中稱(chēng)為(chn wi)record):type xxx = packed record a: byte; b: integer; c: double;end;在其它編程語(yǔ)言或編譯器中的定義方式請(qǐng)參考各自的編程手冊(cè)。目前

5、易語(yǔ)言支持調(diào)用任意復(fù)雜的DLL命令只要滿(mǎn)足了前面的兩個(gè)條件調(diào)用方式為stdcall,參數(shù)結(jié)構(gòu)為1字節(jié)對(duì)齊易語(yǔ)言支持調(diào)用任意復(fù)雜的DLL命令:參數(shù)除了可以是基本數(shù)據(jù)類(lèi)型或普通結(jié)構(gòu)類(lèi)型外,還可以是基本類(lèi)型地址或基本類(lèi)型數(shù)組,也可以是結(jié)構(gòu)類(lèi)型地址或結(jié)構(gòu)類(lèi)型數(shù)組,結(jié)構(gòu)類(lèi)型的成員中還可以包含任意數(shù)量和任意層次的其它結(jié)構(gòu)、結(jié)構(gòu)地址、結(jié)構(gòu)數(shù)組,等等。DLL命令調(diào)用表要在易語(yǔ)言中調(diào)用Windows API或普通DLL中的導(dǎo)出函數(shù),必須首先在易語(yǔ)言中對(duì)該函數(shù)進(jìn)行聲明,聲明的方式就是頗具易語(yǔ)言特色的“填寫(xiě)DLL命令調(diào)用表”?!癉LL命令調(diào)用表”正確填寫(xiě)完畢之后,就可以象調(diào)用普通易語(yǔ)言子程序一樣調(diào)用DLL命令了。在

6、易語(yǔ)言中填寫(xiě)“DLL命令調(diào)用表”與在VB中聲明DLL函數(shù)是同樣的作用,具有等同的效果。只不過(guò)易語(yǔ)言把原本文本型的東西表格化了,更加直觀,便于編輯修改。易語(yǔ)言中的表格與其它編程工具中的普通文本一樣,可以被復(fù)制和粘貼。下面重點(diǎn)說(shuō)明“DLL命令調(diào)用表”的填寫(xiě)。在易語(yǔ)言中,選擇菜單“插入DLL命令”即可插入一個(gè)空白的“DLL命令調(diào)用表”。當(dāng)然還有其它操作方式,請(qǐng)參考易語(yǔ)言相關(guān)操作手冊(cè)??瞻椎摹癉LL命令調(diào)用表”已填寫(xiě)的“DLL命令調(diào)用表”要填寫(xiě)的項(xiàng)目說(shuō)明Dll命令名定義該DLL命令在易語(yǔ)言中的名稱(chēng)。必須填寫(xiě),但具體什么名稱(chēng)并不重要,只要不與易語(yǔ)言中的其它子程序重名即可。返回值類(lèi)型定義DLL命令的實(shí)際返

7、回值類(lèi)型所對(duì)應(yīng)的易語(yǔ)言類(lèi)型。如果在易語(yǔ)言中調(diào)用該DLL函數(shù)時(shí)不需要用到其返回值,可以不填寫(xiě)而不管實(shí)際的DLL函數(shù)有沒(méi)有返回值。易語(yǔ)言中的數(shù)據(jù)類(lèi)型與生成該DLL的編程語(yǔ)言中的數(shù)據(jù)類(lèi)型并不完全一致,需進(jìn)行適當(dāng)?shù)霓D(zhuǎn)換,詳見(jiàn)下文數(shù)據(jù)類(lèi)型對(duì)照表。公開(kāi)目前不被使用。(Dll命令)備注對(duì)該DLL的注釋?zhuān)梢圆惶?。Dll庫(kù)文件名指定被調(diào)用的DLL文件名稱(chēng)。文件名中的英文字母不區(qū)分大小寫(xiě),可以省略后綴“.dll”。如果是Windows系統(tǒng)DLL的話(huà),可以省略不填??梢允褂媒^對(duì)路徑或相對(duì)路徑,使用相對(duì)路徑時(shí)路徑相對(duì)于當(dāng)前“.e”文件(調(diào)試運(yùn)行時(shí))或當(dāng)前“.exe”文件(編譯后運(yùn)行時(shí))。考慮到通用性,不建議在此處指

8、定路徑,可在代碼中以“置DLL裝載目錄()”動(dòng)態(tài)指定被調(diào)用DLL的路徑。在Dll庫(kù)中對(duì)應(yīng)命令名指定被調(diào)用的DLL命令(或函數(shù))名稱(chēng)。必須準(zhǔn)確填寫(xiě)。名稱(chēng)中的英文字母不區(qū)分大小寫(xiě)。注意:某些帶文本參數(shù)的API,其函數(shù)名稱(chēng)通常以“A”或“W”結(jié)尾。如FindWindow函數(shù),其實(shí)user32.dll中只有FindWindowA和FindWindowW,并沒(méi)有FindWindow,所以我們?cè)谶@里要填FindWindowA和FindWindowW而不是FindWindow。參數(shù)名定義該DLL命令在易語(yǔ)言中的名稱(chēng)。必須填寫(xiě),但具體什么名稱(chēng)并不重要。(Dll參數(shù))類(lèi)型定義該參數(shù)的實(shí)際類(lèi)型所對(duì)應(yīng)的易語(yǔ)言類(lèi)型。

9、可以為易語(yǔ)言自定義數(shù)據(jù)類(lèi)型(該數(shù)據(jù)類(lèi)型的成員必須與DLL所需數(shù)據(jù)類(lèi)型的成員一一對(duì)應(yīng))。易語(yǔ)言中的數(shù)據(jù)類(lèi)型與生成該DLL的編程語(yǔ)言中的數(shù)據(jù)類(lèi)型并不完全一致,需進(jìn)行適當(dāng)?shù)霓D(zhuǎn)換,詳見(jiàn)下文數(shù)據(jù)類(lèi)型對(duì)照表。傳址如果選中本標(biāo)志,表示將傳遞參數(shù)的內(nèi)存首地址(類(lèi)似C/C+中的傳指針參數(shù)或VB中的ByRef參數(shù)或Delphi中的var參數(shù));如果不選中本標(biāo)志,表示傳遞參數(shù)實(shí)際數(shù)據(jù)。應(yīng)根據(jù)該DLL的參數(shù)聲明或參數(shù)說(shuō)明來(lái)決定是否使用“傳址”,詳見(jiàn)示例。此外,如果參數(shù)為文本型、字節(jié)集型,或者為數(shù)組數(shù)據(jù),則總是傳址(而不管此處是否定義為傳址)。數(shù)組指定是否傳入數(shù)組數(shù)據(jù)。應(yīng)根據(jù)該DLL的參數(shù)聲明或參數(shù)說(shuō)明來(lái)決定是否使用“

10、數(shù)組”,詳見(jiàn)示例。(Dll參數(shù))備注對(duì)該參數(shù)的注釋?zhuān)梢圆惶?。注:上?shn bio)中所謂“實(shí)際(shj)(數(shù)據(jù)(shj))類(lèi)型”表示在生成該DLL的編程語(yǔ)言中參數(shù)或返回值的數(shù)據(jù)類(lèi)型。易語(yǔ)言與VB,C/C+, API的數(shù)據(jù)類(lèi)型對(duì)照表(待更新):易語(yǔ)言VBC/C+, API整數(shù)型Longint, long, bool, INT, LONG, BOOL, DWORD, UINT, LRESULT,WPARAM, LPARAM, HWND, HFILE, HMODULE, 文本型Stringchar*, LPSTR, LPTSTR, LPCSTR, LPCTSTR邏輯型Longint, INT,

11、 BOOL字節(jié)集型Void*, LPVOID小數(shù)型SingleFloat雙精度小數(shù)型Double, CurrencyDouble日期時(shí)間型DateDATE字節(jié)型Bytebyte, char, bool, BYTE, CHAR短整數(shù)型Integer, Booleanshort, SHORT, WORD長(zhǎng)整數(shù)型_int64, INT64注1:固定長(zhǎng)度(chngd)的文本(如VB中的“Dim s As String * 32”或C/C+中的“char s32;”)在易語(yǔ)言中應(yīng)定義為相應(yīng)(xingyng)長(zhǎng)度的字節(jié)型數(shù)組,并傳址。注2:各編程語(yǔ)言之間數(shù)據(jù)類(lèi)型相互對(duì)照的一般(ybn)原則是“所占內(nèi)存字節(jié)

12、數(shù)相同”。注3:VB的Integer,Bool均占兩個(gè)字節(jié)內(nèi)存,而易語(yǔ)言的“整數(shù)型”“邏輯型”均占四個(gè)字節(jié)內(nèi)存,注意區(qū)分。注4:如果不能確信其它編程語(yǔ)言中的某個(gè)數(shù)據(jù)類(lèi)型對(duì)應(yīng)易語(yǔ)言的哪個(gè)類(lèi)型,可首先嘗試“整數(shù)型”,然后可嘗試“字節(jié)集”(注意使用前以“取空白字節(jié)集()”等命令分配足夠的內(nèi)存空間)。注5:有些API(如FindWindow(A))的文本參數(shù)需要接收NULL值,有兩種處理方案:在易語(yǔ)言中將該參數(shù)定義為整數(shù)型并傳入0;在易語(yǔ)言中將該參數(shù)定義為文本型并傳入“字符(0)”(在這里“字符(0)”類(lèi)似于VB中的vbNullString)。自定義數(shù)據(jù)類(lèi)型如果DLL命令中有參數(shù)為結(jié)構(gòu)類(lèi)型,就需要事先

13、在易語(yǔ)言中定義與其對(duì)應(yīng)的自定義數(shù)據(jù)類(lèi)型。定義自定義數(shù)據(jù)類(lèi)型的成員,與定義DLL命令的參數(shù)基本相同(具體含義請(qǐng)參考上文),只是有一點(diǎn)不同:如果DLL命令參數(shù)為數(shù)組,將忽略“傳址”設(shè)置并總是認(rèn)為“傳址”;但如果自定義數(shù)據(jù)類(lèi)型成員為數(shù)組,“傳址”與否有不同的含義。此外,自定義數(shù)據(jù)類(lèi)型的成員“數(shù)組”屬性需指定一個(gè)明確的數(shù)值,而不象DLL命令參數(shù)那樣僅僅設(shè)置一個(gè)標(biāo)志。在自定義數(shù)據(jù)類(lèi)型的成員為數(shù)組時(shí),如果設(shè)置“傳址”,表示在此自定義數(shù)據(jù)類(lèi)型中該成員位置處只存儲(chǔ)數(shù)組數(shù)據(jù)的內(nèi)存首地址;如果不設(shè)置傳址,表示在此自定義數(shù)據(jù)類(lèi)型中該成員位置處的數(shù)據(jù)為所有數(shù)組數(shù)據(jù)的順序排放。至于如何判斷某自定義數(shù)據(jù)類(lèi)型成員是否為“數(shù)

14、組”及是否應(yīng)該“傳址”,則應(yīng)視具體的自定義數(shù)據(jù)類(lèi)型及其說(shuō)明文檔而定,有時(shí)還需考慮該成員的“語(yǔ)義”。下面舉例說(shuō)明,請(qǐng)看CPINFO這個(gè)結(jié)構(gòu)的C/C+定義及其對(duì)應(yīng)的易語(yǔ)言自定義數(shù)據(jù)類(lèi)型:C/C+定義易語(yǔ)言定義struct _cpinfo UINT HYPERLINK MaxCharSize; BYTE HYPERLINK DefaultCharMAX_DEFAULTCHAR; BYTE HYPERLINK LeadByteMAX_LEADBYTES; CPINFO, *LPCPINFO;CPINFO的最后兩個(gè)成員都是字節(jié)型數(shù)組,且不是地址,所以應(yīng)將其分別定義為“字節(jié)型”“數(shù)組”(數(shù)組長(zhǎng)度分別為MA

15、X_DEFAULTCHAR 和MAX_LEADBYTES,查VC相應(yīng)頭文件得知兩個(gè)常量的值分別是2和12)。自定義數(shù)據(jù)類(lèi)型成員是數(shù)組且需要“傳址”的情況比較少見(jiàn),暫舉一例:C/C+定義易語(yǔ)言定義struct x_Info DWORD* value; CHAR* pChars; /指向一個(gè)256字符長(zhǎng)度的緩沖區(qū) XINFO, *LPXPINFO;其它(qt)的自定義數(shù)據(jù)類(lèi)型實(shí)例(shl):錯(cuò)誤(cuw)及處理如果易語(yǔ)言運(yùn)行時(shí)提示“無(wú)法找到指定DLL庫(kù)文件*中的輸出命令*”,往往會(huì)有以下幾種情況:DLL調(diào)用表中,填寫(xiě)“Dll庫(kù)文件名”或“在Dll庫(kù)中對(duì)應(yīng)命令名”時(shí)出現(xiàn)打字錯(cuò)誤;指定的“Dll庫(kù)文件

16、名”不在當(dāng)前目前,也不在Windows系統(tǒng)目錄,也不在特定目錄中;指定的“Dll庫(kù)文件名”中只有*A或*W函數(shù),而沒(méi)有*函數(shù);Dll編寫(xiě)時(shí)失誤,沒(méi)有導(dǎo)出相應(yīng)的函數(shù),或?qū)С隽祟?lèi)似“?testYAHHHZ”的奇怪函數(shù)(通常是因?yàn)橥浽贑+中將該函數(shù)聲明為extern “C”);如果易語(yǔ)言在運(yùn)行時(shí)提示“調(diào)用DLL命令后發(fā)現(xiàn)堆棧錯(cuò)誤”,通常是因?yàn)椋篋LL調(diào)用表中,對(duì)該DLL命令的參數(shù)定義錯(cuò)誤,或數(shù)據(jù)類(lèi)型不準(zhǔn)確,或多提供了參數(shù),或少提供了參數(shù);或錯(cuò)誤使用了傳址,或錯(cuò)誤使用了數(shù)組;如果某參數(shù)的類(lèi)型為自定義類(lèi)型,其成員定義錯(cuò)誤,或數(shù)據(jù)類(lèi)型不準(zhǔn)確,或多提供了成員,或少提供了成員;或錯(cuò)誤使用了傳址,或錯(cuò)誤使用了

17、數(shù)組;該DLL命令的調(diào)用方式并非stdcall易語(yǔ)言目前不支持調(diào)用非stdcall調(diào)用方式的DLL命令,見(jiàn)上文;示例(shl)下面(xi mian)以幾個(gè)具體的DLL的調(diào)用(dioyng)來(lái)說(shuō)明其使用方法(重點(diǎn)是“DLL命令調(diào)用表”的填寫(xiě))首先要說(shuō)明是,要在易語(yǔ)言在調(diào)用系統(tǒng)API或普通DLL,必須要有欲調(diào)用函數(shù)詳細(xì)說(shuō)明。對(duì)于系統(tǒng)API函數(shù),微軟的MSDN有詳細(xì)的說(shuō)明文檔;網(wǎng)絡(luò)上也有不少網(wǎng)友整理的針對(duì)VB的API函數(shù)說(shuō)明。對(duì)于普通DLL,其作者通常會(huì)附帶相應(yīng)的說(shuō)明。以下例子以網(wǎng)上流行較廣的“VBAPI函數(shù)參考手冊(cè)BSL軟件工作室”(CHM,中文)作為主要參考資料,以MSDN(英文)作為輔助資料因

18、為前者有的地方說(shuō)明不夠詳細(xì)和深入,搜集的API也不十分全面。首先看一個(gè)在易語(yǔ)言中調(diào)用API函數(shù)PolyBezier畫(huà)賽貝爾曲線(xiàn)的例子。因?yàn)镻olyBezier需要一個(gè)“設(shè)備場(chǎng)景句柄”參數(shù),所以還要引入另外兩個(gè)API函數(shù)GetDC和ReleaseDC以分別獲取和釋放“設(shè)備場(chǎng)景句柄”。我們先來(lái)看GetDC的VB聲明:GetDCDeclare Function GetDC Lib user32 Alias GetDC (ByVal hwnd As Long) As Long說(shuō)明:獲取指定窗口的設(shè)備場(chǎng)景返回值:Long,指定窗口的設(shè)備場(chǎng)景句柄,出錯(cuò)則為0。參數(shù)名稱(chēng)參數(shù)類(lèi)型及說(shuō)明hWndLong,將獲取

19、其設(shè)備場(chǎng)景的窗口的句柄。若為0,則要獲取整個(gè)屏幕的DC根據(jù)上表的VB聲明,可以得知,GetDC位于動(dòng)態(tài)庫(kù)“user32”中,其實(shí)際函數(shù)名稱(chēng)為“GetDC”;其返回值類(lèi)型是Long,對(duì)應(yīng)易語(yǔ)言中的“整數(shù)型”;其參數(shù)hWnd的類(lèi)型是Long,也對(duì)應(yīng)易語(yǔ)言中的“整數(shù)型”,同時(shí)因?yàn)殛P(guān)鍵字ByVal的存在,表示該參數(shù)并非“傳址”參數(shù)。根據(jù)以上分析,可以得到以下易語(yǔ)言DLL調(diào)用表:再看ReleaseDC的VB聲明:ReleaseDCDeclare Function ReleaseDC Lib user32 Alias ReleaseDC (ByVal hwnd As Long, ByVal hdc As

20、Long) As Long說(shuō)明:釋放由調(diào)用 HYPERLINK mk:MSITStore:E:liigo共享編程Win%20APIvbapi.chm:/GetDC.htm GetDC或 HYPERLINK mk:MSITStore:E:liigo共享編程Win%20APIvbapi.chm:/GetWindowDC.htm GetWindowDC函數(shù)獲取的指定設(shè)備場(chǎng)景。返回值:Long,執(zhí)行成功為1,否則為0。參數(shù)名稱(chēng)參數(shù)類(lèi)型及說(shuō)明hWndLong,要釋放的設(shè)備場(chǎng)景相關(guān)的窗口句柄hDCLong,要釋放的設(shè)備場(chǎng)景句柄根據(jù)上表的VB聲明,可以得知,ReleaseDC位于(wiy)動(dòng)態(tài)庫(kù)“user3

21、2”中,其實(shí)際(shj)函數(shù)名稱(chēng)為“ReleaseDC”;其返回值類(lèi)型(lixng)為L(zhǎng)ong,按說(shuō)應(yīng)該對(duì)應(yīng)易語(yǔ)言中的“整數(shù)型”,但根據(jù)其語(yǔ)義(說(shuō)明中明確指出返回值表示該函數(shù)是否執(zhí)行成功,應(yīng)是邏輯型值),我們選擇將其定義為“邏輯型”當(dāng)然定義為“整數(shù)型”也是對(duì)的。它的兩個(gè)參數(shù)類(lèi)型都是Long,對(duì)應(yīng)易語(yǔ)言中的“整數(shù)型”,且都有ByVal關(guān)鍵字,表示并非傳址。根據(jù)以上分析,可以得到以下易語(yǔ)言DLL調(diào)用表:最后看PolyBezier的VB聲明:PolyBezierDeclare Function PolyBezier& Lib gdi32 (ByVal hdc As Long, lppt As POI

22、NTAPI, ByVal cPoints As Long)說(shuō)明:描繪一條或多條貝塞爾(Bezier)曲線(xiàn)。返回值:Long,非零表示成功,零表示失敗。參數(shù)名稱(chēng)參數(shù)類(lèi)型及說(shuō)明hdcLong,要在其中繪圖的設(shè)備場(chǎng)景l(fā)ppt HYPERLINK mk:MSITStore:E:liigo共享編程Win%20APIvbapi.chm:/POINTAPI.htm POINTAPI,指定一個(gè) HYPERLINK mk:MSITStore:E:liigo共享編程Win%20APIvbapi.chm:/POINTAPI.htm POINTAPI結(jié)構(gòu)數(shù)組。其中的第一個(gè)結(jié)構(gòu)指定了起點(diǎn)。剩下的點(diǎn)三個(gè)一組包括兩個(gè)控件點(diǎn)

23、和一個(gè)終點(diǎn)原文:An array of HYPERLINK mk:MSITStore:E:liigo共享編程Win%20APIvbapi.chm:/POINTAPI.htm POINTAPI structures. The first structure specifies the starting point. The remaining points are in groups of three, consisting of two control points and an end point.cPointsLong,lppt數(shù)組的總點(diǎn)數(shù)根據(jù)上表,可以得知,PolyBezier函數(shù)位于動(dòng)

24、態(tài)庫(kù)“gdi32”中;返回值類(lèi)型為L(zhǎng)ong,根據(jù)語(yǔ)義我們選擇定義為易語(yǔ)言中的“邏輯型”(理由同上);第一個(gè)和第三個(gè)參數(shù)都是Long,均對(duì)應(yīng)易語(yǔ)言中的“整數(shù)型”;第二個(gè)參數(shù),根據(jù)參數(shù)說(shuō)明可知它是一個(gè)“指向POINTAPI結(jié)構(gòu)數(shù)組的指針”,參數(shù)類(lèi)型為“POINTAPI”(后面將為這個(gè)結(jié)構(gòu)定義一個(gè)易語(yǔ)言自定義數(shù)據(jù)類(lèi)型),“數(shù)組”,“傳址”。根據(jù)以上分種,得到了易語(yǔ)言DLL調(diào)用表:因?yàn)樯厦嬗玫搅私Y(jié)構(gòu)POINTAPI,我們需要將它定義(dngy)為易語(yǔ)言自定義數(shù)據(jù)類(lèi)型。它有兩個(gè)成員,參數(shù)都是Long,對(duì)應(yīng)易語(yǔ)言中的“整數(shù)型”:到此為止,已將所需的DLL命令及其自定義數(shù)據(jù)類(lèi)型定義好了,下面就可以象調(diào)用易語(yǔ)言普通子程序一樣(yyng)調(diào)用這幾個(gè)DLL命令了:其它(qt)的DLL命令調(diào)用表實(shí)例:注意上面兩圖的“在Dll庫(kù)中對(duì)應(yīng)命令名”一欄,命令最后都有一個(gè)字符“A”,在其VB聲明中就可找出其來(lái)源:Declare Function OpenPrinter Lib winspool.drv Alias OpenPrinterA (ByVal

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論