1. 程式人生 > >CodeBlocks載入動態動態庫

CodeBlocks載入動態動態庫

CodeBlocks新建一個Dynamic Link Library工程,工程名稱叫做:dll,程式碼已由嚮導自己生成好了


這裡函式就不寫了

編譯該工程,Ctrl+F9,完畢,關閉工程

再新建一個Project,名稱為cbp,選擇Console application,完畢

CodeBlocks比較特殊,如果呼叫已編譯好的dll檔案,需要使用到兩個標頭檔案windows.h和winbase.h,注意:windows.h一定要宣告在winbase.h之前,否則會提示winbase.h中的DWORD未定義

把之前dll.dll生成的標頭檔案包含進去,該標頭檔案中將dll編譯的程式碼設定成以標準C的形式輸出,這樣比較安全。這裡我使用的是#include "\..\temp\dll\main.h"

接下來定義一個函式名為指標的宣告,表明這是一個指標來自外部的函式

這裡我使用的是typedef void(WINAPI *pfunction)(const LPCSTR sometext);

然後為函式指標宣告一個例項,再宣告一個控制代碼,用來存放庫檔案

不說了直接上程式碼:

#include <windows.h>
#include <winbase.h>
#include <stdio.h>
#include "\..\temp\dll\main.h"

typedef void(WINAPI *pfunction)(const LPCSTR sometext);

int main(int argc,char *argv[])
{
	pfunction pfu=NULL;
	HMODULE hlib=NULL;
	hlib=LoadLibrary("dll.dll");
	pfu=(pfunction)GetProcAddress(hlib,"SomeFunction");
	SomeFunction("DLL呼叫成功!");
	SomeFunction(*argv);
	FreeLibrary(hlib);
	return 0;
}