首先要建立一个dll的资源,file->new->MFC appwizard(dll) 输入工程的名字
点击 FINISH 然后点击 OK
你就可以开始创建你自己的dll资源了 我这里的DLL资源是一个图片
INSERT -》RESOURCE -》选择BITMAP 单机IMPORT 找出要导入的图片就可以了
注意图片的后缀名是 .bmp 或 .ico 不能是其他格式的否则就用不了
导入成功以后就可以编译一下(不用运行)
然后在工程文件的目录中debug文件夹中就会有一个 .dll 和.lib的文件(这两个文件有用)
这样你自己的DLL就建立成功了
接下来的任务是如何把自己建立的DLL应用到自己的程序中去
打开工程建立一个基于对话框的应用程序,放置一个picture(这个控件必须修改名字,否则无法定义成员变量)和一个button,把picture的type设置成和你加载的图片一样的格式(比如在DLL中你导入的是一个.bmp的图片,那就把type设置成bitmap,导入的是.ico的图片 就设置成icon)
然后就是给button增加单机响应事件。
代码如下:
HINSTANCE hdll; //存储加载的动态连接库的句柄
HINSTANCE hcurrent; //保存当前句柄 以用于最后恢复到当前
hdll=::LoadLibrary("C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\cbitmap\\Debug\\cbitmap.dll");
//加载你自己建立的DLL 这里有一个注意的地方 文件目录之间要用 \\ 否则会有警告
if(hdll) //如果DLL不为空
{
hcurrent=AfxGetResourceHandle(); //获取当前的句柄
AfxSetResourceHandle(hdll); //设置成 DLL的句柄
HBITMAP hbit=::LoadBitmap(hdll,MAKEINTRESOURCE(IDB_BITMAP1)); //第一个参数 用的是哪个对象就要设置成相应的句柄 如果用的是本工程中的图片就用 AfxGetInstanceHandle 或者是AfxGetApp->m_Instance;
第二个参数是图片的一个资源标识,要用MAKEINTRESOURCE 进行转换 非常要注意的是MAKEINTRESOURCE的参数 你导入的图片在DLL中用的是什么名字 在这里也要用一样的的名字 否则就会出错。
m_pic.SetBitmap(hbit);
AfxSetResourceHandle(hcurrent); //恢复到当前句柄
}
AfxFreeLibrary(hdll); 释放hdll
并不是代码有了就可以用了 还需要一些准备工作,第一个 将制作DLL产生的lib文件导入
步骤:project ->add to project ->files 找到制作DLL产生的lib文件,将其导入
还要在工程的头文件中把制作DLL时产生的和工程名相同的头文件用语句“#include "xx.h"”
包含进来。这里有一个小细节要注意,由于这个头文件的目录和我们现有工程的的目录是不一样的
我们可以把这个头文件直接复制到我们现有工程的目录中即可。
这些工作做完了 我们就可以运行我们的工程了
DLL中定义有两种函数:
---- 导出函数(exportfunction): 可以被其他模块调用
---- 内部函数(internalfunction): 只能在DLL内部使用
---- 创建一个基于API的DLL.本例只定义了导出函数.
---- 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 ;导出函数的名字
四.调用DLL的方法:
---- 1.通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一:
---- (1)Windows的系统目录:\windows\system;
---- (2)DOS中path所指出的任何目录;
---- (3)程序所在的目录;
---- 同时应注意管理好你的.lib文件和.h和文件
---- 2.建立一个工程,简单起见可建立一个控制台应用程序.
---- 3.在工程中引入a.lib:
---- (1)如果你的a.lib放在VC标准的LIB文件夹中.
单击Project- >Project Settings...
在link选卡的object/library modules中加上a.lib即可
---- (2)如果你的a.lib不是放在VC标准的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下调试通过