Windows下使用Dev C++ 編寫dll與使用dll(一)C項目下的dll


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM