VC dll程序的编写与调用 笔记
来源:互联网 发布:af第三方数据监测公司 编辑:程序博客网 时间:2024/05/17 03:56
一、VC动态链接库的分类
Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。
非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。
二、静态链接库的编写与使用
1. 静态链接库的编写
1) 新建一个静态链接库工程
2) 给工程新建lib.cpp文件,添加库函数代码:
#include "lib.h"
int add(int x,int y)
{
return x + y;
}
3) 新建lib.h文件,添加声明:
#ifndef LIB_H
#define LIB_H
extern "C" int add(int x,int y); //声明为C编译、连接方式的外部函数
#endif
编译,将生成*lib文件。
2. 静态链接库的调用
新建工程,将头文件lib.h和*.lib拷到工程下。
在main.cpp文件前面,添加如下代码:
#include "lib.h"
#pragma comment( lib, "ibTest.lib" ) //指定与静态库一起连接
这样就能使用库中的函数int add(int x,int y)了。
(注:#pragma comment( lib, "ibTest.lib" ) 这一句也可以在设置中代替:tools->options->directories->library files中,填入库文件路径)
还有一种方法,(需在dllTest工程中添加lib.def文件)
下面的代码演示了怎样同.def文件将函数add声明为DLL导出函数(需在dllTest工程中添加lib.def文件):
; lib.def : 导出DLL函数
LIBRARY dllTest
EXPORTS
add @ 1
.def文件的规则为:
(1)LIBRARY语句说明.def文件相应的DLL;
(2)EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号将发挥其作用);
(3).def 文件中的注释由每个注释行开始处的分号 (;) 指定,且注释不能与语句共享一行。
由此可以看出,例子中lib.def文件的含义为生成名为“dllTest”的动态链接库,导出其中的add函数,并指定add函数的序号为1。
(摘自http://blog.csdn.net/hnarke/archive/2008/04/10/2277557.aspx)
三、动态链接库
1. 动态链接库的编写
建一个动态链接库工程,其他与静态链接库一样。
2. 动态链接库的调用
1) 在头文件或CPP文件前面定义函数指针类型:
typedef int(*lpAddFun)(int, int); //宏定义函数指针类型
2) 定义句柄及调用代码如下:
HINSTANCE hDll; //DLL句柄
lpAddFun addFun; //函数指针
hDll = LoadLibrary("..//Debug//dllTest.dll");
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, "add");
if (addFun != NULL)
{
int result = addFun(2, 3);
printf("%d", result);
}
FreeLibrary(hDll);
}
- VC dll程序的编写与调用 笔记
- VC DLL的编写调用
- VC-一个简单的DLL编写与调用
- Delphi调用VC++6.0编写的Dll
- DLL的编写与调用
- C#调用C++程序编写的dll
- VC编写和调用dll
- scwutong vc学习笔记1:编写调用dll的注意点
- 内核模式的dll编写与调用
- VS2008中DLL的编写与调用
- VS2008中DLL的编写与调用
- DLL的编写与调用,简单示例
- VS2008中DLL的编写与调用
- VS2008中DLL的编写与调用
- VS2008中DLL的编写与调用
- delphi调用vc编写的DLL应注意的问题
- 在C#中调用VC编写的dll库
- 如何用VC编写供JAVA调用的DLL
- 用心做事,用爱做人
- Linux环境进程间通信(三)
- OpenGL Shader基本概念
- 学习 WinCE 的路线
- 用Java来获取访问者真实的IP地址
- VC dll程序的编写与调用 笔记
- 求一个简单的仓库管理系统
- Linux环境进程间通信(四)
- Domino应用之:考勤管理(BETA1)
- Android简单数据存储类SharedPreferences详解及实例(通过“记住密码”功能学习SharedPreferences)
- Mysql 生成固定位数的随机数
- 在tomcat中运行php
- 数据库连接池和Tomcat6.0连接池配置
- 11/6/29 基本数据类型 【学习笔记】