战场万箭齐发的声音:写出vc动态连接库的方法之一

来源:百度文库 编辑:中科新闻网 时间:2024/05/08 19:10:31

用VC++6.0制作动态链接库的步骤 :
动态链接库(dll)是包含共享函数库的二进制文件,可以被多个应用程序同时使用。建立应用程序的可执行文件时,不必将DLL连接到应用程序中,而是在运行时动态装载DLL,装载时DLL被映射到调用进程的地址空间中。通常我们在调用DLL时所需的DLL文件必须位于以下三个目录之一:
(1)Windows的系统目录:\windows\system;
(2)DOS 中path所指出的任何目录;
(3)程序所在的目录;
本设计用的是第三种。
3.2.1动态链接库(DLL)结构
1.实现文件(.cpp文件为例)
包含DLL入口点处理函数和导出函数,以及被导出函数调用的函数的代码。
格式如下:
#include "stdafx.h" //加入所使用的相关头文件
#include "oil.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
以下为各函数:(被调用函数和导出函数之一)
void WINAPI sub(double a, double b, double c)
注:DLLMain 表示在Windows中DLL开始执行的地方。
2.模块定义文件(.DEF)是由一个或多个用于描述DLL属性的模块语句组成的文本文件,每个.DEF文件至少必须包含以下模块定义语句:
第一个语句必须是LIBRARY语句,指出DLL的名字。
EXPORTS 语句列出被导出函数的名字。
可以使用DESCRIPTION语句描述DLL的用途(此句可选)。
格式如下:
EXPORTS HanL @1
3.函数原型声明文件(.h文件为例)
以以下格式写入:
#ifdef _cplusplus
extern"c"
{
#endif //_cplusplus
double WINAPI sub( double a ,double b ,double c ); //函数原型
#ifdef _cplusplus
}
#endif //_cplusplus
注意:
(1) c语言中须在调用函数前面声明或定义该函数,调用才能成功。在c中,函数原型通常和函数定义很相似,只不过原型以分号结尾。在c中原型仅仅用于类型检验。
(2) 建立函数原型:.h文件。.h文件可包含c或c++模块中,正如能从ifdef 看出的一样,若代码在c文件中,则不使用extern“c”语句,但作为一个c++文件进行编译,则需要使用。
(3)使用CPP文件(C++),则须防止C++引起的过多的名称修饰,为避免C++的名称修改,可使用extern“c”定义。extern”c”是C程序提供外部连接的方式,在C++代码中提供Visual Basic程序的链接,须使用extern”c”链接声明,这样定义的文件就可以使得其函数能被Visual Basic访问。
4.2.2创建oil.dll
1.创建oil.dll的工程,启动VC++6.0按以下步骤生成DLL工程:
在菜单中选择File\New\Project
在工程列表中选择Win32 Dynamic-Link Library
在Project Name中输入工程名: oil
单击Location右边按钮,选择 “F:\李帆设计”目录
单击OK完成,至此已创建了oil.dll的工程文件
2.创建oil.def文件
在菜单中选择File\New\Text File。输入以下代码后保存文件名"oil.def" //指出DLL的名字oil,链接器将这个名字放到DLL导入库中
LIBRARY oil //定义导出函数suanfa()为例
EXPORTS HanL @1
3.创建oil.h
在菜单中选择File\New\C++ Head File项
输入代码后保存文件名" oil.h"
4.填写oil.cpp文件,输入代码后保存文件名“oil.cpp”。
5.编译DLL文件 ---- 从Build菜单中选择Build oil.DLL,产生oil.DLL文件,以后就可以调用了。