<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

  • 随笔 - 4
  • 文章 - 0
  • 评论 - 2
  • 引用 - 0

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

dll的使用方法


首先要建立一个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下调试通过

 

posted on 2009-04-12 11:32 梁少林 阅读(647) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理