易語言的DLL函數都是stdcall約定,不會生成壹個lib文件讓妳調用。
這樣,有兩種方法可以調用我們的easy dll:
動態調用1.vc中的_stdcall。
2.自己做壹個lib文件,然後靜態調用。
這兩種方法各有利弊。如果DLL裏有很多函數,做lib庫要花壹些時間,但是壹勞永逸。
動態調用DLL需要調用API函數LoadLibrary和GetProcAddress。LoadLibrary加載要調用的DLL文件,然後用GetProcAddress獲取DLL中某個函數的指針,再通過函數指針調用。
下面舉例說明如何做壹個易語言DLL,在VC中動態調用。
1.首先做壹個易語言DLL。
打開彜語,在彈出的向導中選擇“windows動態鏈接庫”。
現在我們添加自己的函數。Ctrl+N添加如下函數
版本2
。子例程myadd,雙精度小數類型,打開
參數a,雙精度小數類型
參數b,雙精度小數類型
返回(a+b)
myadd函數用於計算兩個雙精度小數的和(C++的double類型)。
不要忘記這個函數應該是公開的,這樣它才能被導出。
完成後,它被編譯成壹個dll文件,並命名為mydll.dll。
這樣,壹個簡單的易語言DLL就完成了。
2.在VC中調用易語言DLL。
要動態調用DLL,需要使用API函數LoadLibrary和GetProcAddress。查壹下MSDN,妳就會知道使用這兩個函數需要加法。
# include & ltWindows.h & gt
接下來,我們需要在被調用的函數上聲明壹個_stdcall函數類型。
typedef double(CALLBACK * dll _ myadd)(double,double);
(註意:CALLBACK和WINAPI都是__stdcall的別名,在windef.h中定義:
#用定義回調__stdcall //回調函數
#定義WINAPI __stdcall //WINAPI
想用哪個就用哪個,也可以直接寫__stdcall。)
有了函數類型,就可以用它來定義函數指針變量,然後調用函數。
HINSTANCE hDll//dll句柄
dll _ myadd myadd//函數指針變量
hDll = LoadLibrary(" mydll . dll ");//加載dll
myadd =(dll _ myadd)GetProcAddress(hDll,“myadd”);//獲取dll中myadd函數的指針地址。
雙s = myadd(1.2,2.3);//此處調用函數
不要忘記在使用DLL後調用。
免費圖書館(hDll);//釋放DLL句柄
這樣,簡單的調用易語言DLL的例子就完成了。應該指出的是:
在聲明函數類型時,壹定要指定它是壹個stdcall調用,不能省略。因為VC默認的調用方法是cdecl。
如果想省略,可以更改項目屬性,在屬性頁-c++ tab-Advanced-Calling conventi on中選擇使用stdcall。這也可以省略stdcall聲明。