Dev C++時很方便上手的東西,下載安裝的exe,一路運行,即可成功安裝,這里就不敘述下載及安裝過程了。
實在是很方便,下載鏈接暫時也不貼了。
打開編譯器,文件->新建->項目
這里先選擇C項目,點擊確定,即會自動生成一個.c和一個.h文件。
這里自動生成的Hello()程序,一運行就會彈出一個信息框。
我們直接點擊編譯運行,保存文件后,就會生成一個dll文件。
注意右邊的32位版本,很重要,因為編譯生成的32位dll只能在32位編譯器下調用,64位只能在64位編譯器下調用。
這樣,即代表成功生成dll文件,項目名為test1,這里生成了test1.dll
我們在這個目錄下寫一個test.cpp對這個dll進行測試。
#include<iostream> #include<windows.h> using namespace std; int main() { typedef void (*Hello)(); HMODULE hMod = LoadLibrary("test1.dll"); if(hMod!=NULL) { cout<<"dll調用成功"; Hello hello = (Hello)GetProcAddress(hMod,"HelloWorld"); hello(); } else { cout<<"dll調用失敗"; } }
直接點擊編譯運行。
運行成功,輸出了調試語句以及HelloWorld()中彈出的信息框。
易語言調用dll命令就和這個是一樣的。
C語言中要引入<windows.h>
用LoadLibrary()引入dll文件。
用GetProcAddress獲取dll中指定函數名的函數地址,結合上面的typedef void (*Hello)()。表示引入一個無返回類型,也無參數的函數。
我們在dllmain.c中,再次添加一個add函數,如下: DLLIMPORT int add(int a,int b) { return a+b; } 在dll.h中,添加如下定義,重新編譯運行。 DLLIMPORT int add(int,int); 生成一個新的dll。 重新寫一個新的test1.cpp。 代碼如下。 #include<iostream> #include<windows.h> using namespace std; int main() { typedef int (*Hello)(int,int); HMODULE hMod = LoadLibrary("test1.dll"); if(hMod!=NULL) { cout<<"dll調用成功<<endl"; Hello hello = (Hello)GetProcAddress(hMod,"add"); cout<<hello(5,6)<<endl; } else { cout<<"dll調用失敗"; } }
這樣就表示引入一個返回整數類型,參數為兩個整數類型的函數。
點擊運行,結果如下:
如果我們把右上角改成64位的編譯器,如圖:
再點擊編譯運行,就無法引入剛才的dll:
可見,dll的調用與生成與編譯器的版本有很大關系,如果需要生成64位的dll,在編譯生成dll中選擇64位的編譯器即可。