首先要建立一個(gè)dll的資源,file->new->MFC appwizard(dll) 輸入工程的名字
點(diǎn)擊 FINISH 然后點(diǎn)擊 OK
你就可以開(kāi)始創(chuàng)建你自己的dll資源了 我這里的DLL資源是一個(gè)圖片
INSERT -》RESOURCE -》選擇BITMAP 單機(jī)IMPORT 找出要導(dǎo)入的圖片就可以了
注意圖片的后綴名是 .bmp 或 .ico 不能是其他格式的否則就用不了
導(dǎo)入成功以后就可以編譯一下(不用運(yùn)行)
然后在工程文件的目錄中debug文件夾中就會(huì)有一個(gè) .dll 和.lib的文件(這兩個(gè)文件有用)
這樣你自己的DLL就建立成功了
接下來(lái)的任務(wù)是如何把自己建立的DLL應(yīng)用到自己的程序中去
打開(kāi)工程建立一個(gè)基于對(duì)話框的應(yīng)用程序,放置一個(gè)picture(這個(gè)控件必須修改名字,否則無(wú)法定義成員變量)和一個(gè)button,把picture的type設(shè)置成和你加載的圖片一樣的格式(比如在DLL中你導(dǎo)入的是一個(gè).bmp的圖片,那就把type設(shè)置成bitmap,導(dǎo)入的是.ico的圖片 就設(shè)置成icon)
然后就是給button增加單機(jī)響應(yīng)事件。
代碼如下:
HINSTANCE hdll; //存儲(chǔ)加載的動(dòng)態(tài)連接庫(kù)的句柄
HINSTANCE hcurrent; //保存當(dāng)前句柄 以用于最后恢復(fù)到當(dāng)前
hdll=::LoadLibrary("C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\cbitmap\\Debug\\cbitmap.dll");
//加載你自己建立的DLL 這里有一個(gè)注意的地方 文件目錄之間要用 \\ 否則會(huì)有警告
if(hdll) //如果DLL不為空
{
hcurrent=AfxGetResourceHandle(); //獲取當(dāng)前的句柄
AfxSetResourceHandle(hdll); //設(shè)置成 DLL的句柄
HBITMAP hbit=::LoadBitmap(hdll,MAKEINTRESOURCE(IDB_BITMAP1)); //第一個(gè)參數(shù) 用的是哪個(gè)對(duì)象就要設(shè)置成相應(yīng)的句柄 如果用的是本工程中的圖片就用 AfxGetInstanceHandle 或者是AfxGetApp->m_Instance;
第二個(gè)參數(shù)是圖片的一個(gè)資源標(biāo)識(shí),要用MAKEINTRESOURCE 進(jìn)行轉(zhuǎn)換 非常要注意的是MAKEINTRESOURCE的參數(shù) 你導(dǎo)入的圖片在DLL中用的是什么名字 在這里也要用一樣的的名字 否則就會(huì)出錯(cuò)。
m_pic.SetBitmap(hbit);
AfxSetResourceHandle(hcurrent); //恢復(fù)到當(dāng)前句柄
}
AfxFreeLibrary(hdll); 釋放hdll
并不是代碼有了就可以用了 還需要一些準(zhǔn)備工作,第一個(gè) 將制作DLL產(chǎn)生的lib文件導(dǎo)入
步驟:project ->add to project ->files 找到制作DLL產(chǎn)生的lib文件,將其導(dǎo)入
還要在工程的頭文件中把制作DLL時(shí)產(chǎn)生的和工程名相同的頭文件用語(yǔ)句“#include "xx.h"”
包含進(jìn)來(lái)。這里有一個(gè)小細(xì)節(jié)要注意,由于這個(gè)頭文件的目錄和我們現(xiàn)有工程的的目錄是不一樣的
我們可以把這個(gè)頭文件直接復(fù)制到我們現(xiàn)有工程的目錄中即可。
這些工作做完了 我們就可以運(yùn)行我們的工程了
DLL中定義有兩種函數(shù):
---- 導(dǎo)出函數(shù)(exportfunction): 可以被其他模塊調(diào)用
---- 內(nèi)部函數(shù)(internalfunction): 只能在DLL內(nèi)部使用
---- 創(chuàng)建一個(gè)基于API的DLL.本例只定義了導(dǎo)出函數(shù).
---- 1.在FILE- >NEW- >PROJECTS中選擇"WIN32 Dynamic-Link Library"在Project Name中輸入 "a"按OK
---- 2.在FILE- >NEW- >FILES中選擇C++ SOURCE FILE,在FILE中輸入a.cpp,按OK
---- 在FILE- >NEW- >FILES中選擇TEXT文件,在FILE中輸入a.h,按OK
---- 在FILE- >NEW- >FILES中選擇TEXT文件,在FILE中輸入a.def,按OK
---- 3.源文件:
file://---------------------------
file://a.cpp
#include < windows >
WINAPI int add(int a,int b)
{ return (a+b);
}
file://---------------------------
file://a.h
WINAPI int add(int a,int b);
file://---------------------------
file://a.def
LIBRARY "aaa" ;指出DLL的名字
DESCRIPTION ''aaa Windows Dynamic Link Library''
;描述DLL的用途(此句可選)
EXPORTS add ;導(dǎo)出函數(shù)的名字
四.調(diào)用DLL的方法:
---- 1.通常我們?cè)谡{(diào)用DLL時(shí)所需的DLL文件必須位于以下三個(gè)目錄之一:
---- (1)Windows的系統(tǒng)目錄:\windows\system;
---- (2)DOS中path所指出的任何目錄;
---- (3)程序所在的目錄;
---- 同時(shí)應(yīng)注意管理好你的.lib文件和.h和文件
---- 2.建立一個(gè)工程,簡(jiǎn)單起見(jiàn)可建立一個(gè)控制臺(tái)應(yīng)用程序.
---- 3.在工程中引入a.lib:
---- (1)如果你的a.lib放在VC標(biāo)準(zhǔn)的LIB文件夾中.
單擊Project- >Project Settings...
在link選卡的object/library modules中加上a.lib即可
---- (2)如果你的a.lib不是放在VC標(biāo)準(zhǔn)的LIB文件夾中
單擊Project- >Add to Project- >files...
找到a.lib文件,按OK
< pre >
4.//------------------------
file://call_a.cpp
#include< stdio.h >
#include "c:/a/a.h"
void main(void)
{ int c=0;
c=add(1,2);
printf("1+2=%d",c);
}
file://本程序在VC5.0下調(diào)試通過(guò)