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位的編譯器即可。
