重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.新建一个ActiveX Dll,工程名字为vbmytestdll,类模块名字为mytestdll
创新互联-专业网站定制、快速模板网站建设、高性价比石峰网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式石峰网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖石峰地区。费用合理售后完善,10多年实体公司更值得信赖。
2.类模块内容只有一个函数,主要返回DLL的HELLO WORLD
Public Function dlltest1() As String
dlltest1 = "HELLO WORLD"
End Function
3.保存,生成DLL,名字为
vbmytestdll.dll
4.新建一个EXE工程,在菜单: 工程---引用---浏览里找到vbmytestdll.dll,把它引用进来
5.EXE工程代码如下:
Option Explicit
Dim testdll As mytestdll'类模块名字
Private Sub Form_Load()
Set testdll = New mytestdll 'DLL的一个新实例
Me.Caption = testdll.dlltest1 '我的标题=返回DLL的HELLO WORLD
End Sub
调用DLL有两种方法:静态调用和动态调用.
(一).静态调用其步骤如下:
1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;
2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;
3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下;
4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;
5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然后在Object/library modules输入框中输入:youApp.lib
6.选择你的目标工程Head Files加入:youApp.h文件;
7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h"
注:youApp是你DLL的工程名。
(二).动态调用其程序如下:
动态调用时只需做静态调用步骤1.
01 {
02 HINSTANCE hDllInst = LoadLibrary("youApp.DLL");
03 if(hDllInst)
04 {
05 typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);
06 MYFUNC youFuntionNameAlias = NULL;
07 // youFuntionNameAlias 函数别名
08 youFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,"youFuntionName");
09 // youFuntionName 在DLL中声明的函数名
10 if(youFuntionNameAlias)
11 {
12 youFuntionNameAlias(param1,param2);
13 }
14 FreeLibrary(hDllInst);
15 }
16 }
显式(静态)调用:
LIB + DLL + .H,注意.H中dllexport改为dllimport
隐式(动态)调用:
DLL + 函数原型声明,先LoadLibrary,再GetProcAddress(即找到DLL中函数的地址),不用后FreeLibrary
普通的c函数是在一个程序文件里的,而dll的导出函数是在dll文件里的 要想使用dll的函数 必须调用loadlibrary
一.动态链接库(dll)结构
——dll中定义有两种函数:导出函数(export
function)和内部函数
(internal
function),导出函数可以被其他模块调用,内部函数只能在dll内部使用。我们在用c++定制dll文件时,需要编写的就是包含导出函数表的模块定义文件(.def)和实现导出函数功能的c++文件。下面以sample.dll为例介绍def文件和实现文件的结构:
——1.模块定义文件(.def)是由一个或者多个用于描述dll属性的模块语
句组成的文本文件,每个.def文件至少必须包含以下模块定义语句:
第一个语句必须是library语句,指出dll的名字。
exports语句列出被导出函数的名字。
可以使用description语句描述dll的用途(此句可选)。
";"对一行进行注释(可选)
——2.实现文件(.cpp文件为例)
——实现入口表函数的.cpp文件中,包含dll入口点处理的api函数和导出
函数的代码。
Dell向运行于Windows操作系统下的程序提供代码、数据或函数。程序可根据DLL文件中的指令打开、启用、查询、禁用和关闭驱动程序。
打开一个程序的安装目录,在这里面可以看到一些dll的一些文件。如果在它的上面双击的话会在它的旁边提示:如果是想要查看它可以下载安装一个叫exescope的自定义应用软件的工具。
右边有一个更多,点击一下“更多”,可以看到它的默认安装路径,如果不需要更改的话,它就会默认的安装到c盘的程序文件夹中。
点击安装之后,在它弹出的面板中有一个自动汉化的说明,我们点击“已阅”。接着在它的安装过程中会出现一个安装类型,可以根据需要选择一个安装类型,这里就选择它默认的“典型安装”,然后点击:下一步。当安装到汉化的安装目录的时候它会提示,如果是不想把它安装到默认位置的话,可以在点击浏览选择一个安装的文件位置。
主要有下面几个步骤:
1. 创建新的动态链接库项目,并在其中添加类的声明和定义文件;
尤其需要注意的是在类成员函数的声明中需要使用declspec(dllexport)修饰符,该修饰符能够使此DLL中的方法被导出以供其他应用程序使用。
2. 创建引用动态链接库的应用程序;
若要使用在动态链接库中创建的成员函数,则必须引用该动态链接库。选中调用DLL的项目,从“项目”菜单中选择“引用”,找到动态链接库对应的工程目录。
若要引用动态链接库的头文件,必须修改包含目录路径。在“附加包含目录中”找到DLL头文件所在的路径。
可执行文件仅在运行时加载动态链接库。必须告诉系统在哪里查找DLL,通过PATH变量指出.dll文件所在的路径。
3. 在调用DLL的应用程序中像使用系统提供的其它DLL一样使用自定义的DLL中的成员函数就可以了。