MFC使用动态库dll

来源:互联网 发布:泛鹏天地知乎 编辑:程序博客网 时间:2024/06/05 05:38

一、隐式链接

先把dll文件和lib文件和.h文件放到工程目录下,具体设置方式有两种:

1、vc6.0中:可以直接在工程->设置->连接的Object/Moduls栏中填入lib文件名,如mydll.lib;

      vs中:在属性的linker---input---附加依赖项中写入此lib文件名)。

     多个文件直接用空格隔开,在应用的文件的头文件处,(或者在stdafx.h中添加.h文件,如#include  “mydll.h”)。

2、也可以通过添加代码的方式:

# pragma  comment(lib, "mydll.lib")

#include “mydll.h”

 

另:

VS 项目中添加:
1. 添加编译所需要(依赖)的 lib 文件
在“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。等同于“#pragma comment(lib, "*.lib") ”语句。
2. 添加库(libs)文件目录
方法 1:项目->属性->配置属性->连接器->常规->附加库目录”
方法 2:[菜单]“工具->选项->项目和解决方案->c++ 目录”,选择对应平台,然后添加所需“库文件”目录
这个设置类似于设置环境变量,主要是为程序设置搜索的库目录,真正进行库加载还需要进行第一种设置!
3. 添加包含(include)文件目录
方法 1:“项目->属性->配置属性->c/c++->常规->附加包含目录”
方法 2:[菜单]“工具->选项->项目和解决方案->c++ 目录”,添加所需“包括文件”目录

方法2类似于设置环境变量。
4. 导入库(import)
在“项目->属性->配置属性->连接器->高级->导入库”填写需要生成的导入

 

二、显示链接

显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。

调用dll

   采用如下代码调用dll

   typedef void (*lpFun)(void);
   HINSTANCE hDll;
   hDll=LoadLibrary(L"XX.dll");
   if(NULL==hDll)
   {
       MessageBox(L"加载失败");
    }
   lpFun addFun;
   lpFun pShowDlg=(lpFun)GetProcAddress(hDll,"ShowDlg");//dll 中函数ShowDlg();
   if(pShowDlg==NULL)
   {
       MessageBox(L"加载失败");
   }
   pShowDlg();

   CloseHandle(hDll);
   其中XX.dll为dll的名称

3、dll中接口函数:

在头文件处增加声明:

extern "C" __declspec(dllexport) bool isJk();




原创粉丝点击