C++动态链接库(一)

来源:互联网 发布:淘宝怎么定时上架软件 编辑:程序博客网 时间:2024/06/09 15:00

动态链接库分三种:非MFC链接库,MFC链接库和扩展的MFC链接库;本文章主要介绍非MFC链接库

1 打开VS2010→新建win32项目→命名dll→下一步选中动态链接库dll完成(不能建空文档,否则会出现找不到入口)
2 新建空文件lib.h和lib.cpp

 其中lib.h文件中代码如下:

#ifndef LIB_H#define LIB_Hextern "C" int __declspec(dllexport) add(int x,int y);//__declspec(dllexport)语句。这个语句的含义是声明函数add为DLL的导出函数。//DLL内的函数分为两种:DLL导出函数,可供应用程序调用;  DLL内部函数,只能在DLL程序使用,应用程序无法调用它们。#endif
其中lib.cpp文件中代码如下:
#include "lib.h"int add(int x,int y){return x+y;}
3 点击生成(不是调试F5,否则报错),在Debug文件夹下产生dll.lib文件和dll.dll(不是lib.dll文件)两个文件

4 新建一个dlltest对话框工程,把生成的dll.dll文件拷贝到该工程文件夹下。
5 动态调用,即需要时调用,不需要时释放

不用声明直接在需要的地方调用,本案例在BOOL CdlltestDlg::OnInitDialog()中调用,代码如下:

typedef int (*lpMyAdd)(int,int);////宏定义函数指针类型,与要调用的函数参数和返回值相同HINSTANCE HDll;//实例一个程序lpMyAdd oneMyAdd;//实例一个dll中的函数HDll=LoadLibrary(L"dll.dll");//加载dllif (HDll!=NULL)//判断是否加载成功{oneMyAdd=(lpMyAdd)GetProcAddress(HDll,"add");//获取函数地址if (oneMyAdd!=NULL)//判断是否获取成功{int m=oneMyAdd(10,20);//调用显示CString cs;cs.Format(L"%d",m);AfxMessageBox(cs);}}FreeLibrary(HDll);//释放程序实例;

6 静态调用

需要三个文件一个.h头文件,一个.lib文件,一个.dll文件,把这些文件都考在要调用的程序目录,在程序中添加声明:

#include "1.h"#pragma comment(lib,"newdllhide.lib")

调用时只需要函数名就行

int b=add(10,20);



0 0
原创粉丝点击