加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

vb6.0创建“标准”DLL

发布时间:2020-12-16 22:36:52 所属栏目:大数据 来源:网络整理
导读:vb6.0 IDE开发环境能创建 Activex DLL工程,这类工程发布的DLL,从严格意义上VB建立的DLL并不是像VC一样的动态链接库,VB建立的是ActiveX DLL,不能像kernel32.dll”那样通过“Declare Function .....”来调用的,这种ActiveX DLL是通过访问类的方式调用的:

vb6.0 IDE开发环境能创建 Activex DLL工程,这类工程发布的DLL,从严格意义上VB建立的DLL并不是像VC一样的动态链接库,VB建立的是ActiveX DLL,不能像kernel32.dll”那样通过“Declare Function .....”来调用的,这种ActiveX DLL是通过访问类的方式调用的:step1,注册DLL;step2,开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到“.dll”的文件名,在前面的复选框中打勾,代码 新建一个类,访问类的方法,如下:

Dim Ncls As New PRO.Class1
Ncls.Function1(para1)

那VB怎样创建“标准”的DLL呢?

一,VB编译文件原理

首先需要明白VB编译文件时实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接,C2.exe 和LINK.exe 在VB的安装目录可以找到:C:Program FilesMicrosoft Visual StudioVB98。如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。

二,制作“标准”DLL文件

对于“link.exe”,可以通过改变参数来调整其编译链接后的结果。因此,我们可以通过截获工程的obj文件,再把调用LINK.exe链接这些obj文件,并指明“/EXPORT”的函数即可。

第一步,如何截获工程的obj文件

步骤一:建立一个假的“Link.exe”;

建立一个新的项目,在那个项目中建立一个“Form”,然后,在“Form”中加入如下代码:
Private Sub Form_Load()
MsgBox "现在可以拷贝OBJ文件了!"
End
End Sub

编译为:Link.exe

步骤二:将“C:Program FilesMicrosoft Visual StudioVB98Link.exe”改名为“Link2.exe”;

步骤三:将假的那个Link.exe复制到“C:Program FilesMicrosoft Visual StudioVB98”中;
通过以上三步就可以在VB调用Link.EXE时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷

贝出来了。
第二步,生成obj文件

步骤一:建立一个新项目(VBStardDLL.vbp),选择“ActiveX DLL”,此时自动生成一个Class1类,添加一个“Module”,命名为Module1,在Module1中加入如下代码:

Public Function mathAdd(ByVal a As Long,ByVal b As Long) As Long
mathAdd = a + b
End Function
Public Function mathIncremente(ByVal a As Long,ByVal b As Long) As Long
mathIncremente= a * b
End Function
这里特别注意:需要输出的函数必须写在模块(Module)中,写在类(Class)里面是不能输出的。
步骤二:用VB菜单编译(文件-->生成Project1.dll)
当编译的时候会弹出一个对话框
步骤三:到当前工程目录下复制出OBJ文件,Class1.OBJ,Module1.OBJ,VBStardDLL.OBJ,将这三个文件复制到:“D:LINKOBJ”这个文件夹。
第三步,生成DLL文件
步骤一,到cmd下,运行C:Program FilesMicrosoft Visual StudioVB98 目录下的LINK2.exe,链接代码为:
LINK2.exe "D:LINKOBJClass1.obj" "D:LINKOBJModule1.obj" "D:LINKOBJVBStardDLL.obj" "c:Program FilesMicrosoft Visual StudioVCVB98VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathAdd /EXPORT:mathIncremente /OUT:"D:LINKOBJVBStardDLL.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS 至此已在目录 D:LINKOBJ下生成了 VBStardDLL.dll 的文件。
第四步,测试

新建一个标准exe工程,在一个module中做如下声明:

Public Declare Function mathAdd Lib "D:LINKOBJVBStardDLL.dll" (ByVal val1 As Long,ByVal val2 As Long) As Long
Public Declare Function mathIncremente Lib "D:LINKOBJVBStardDLL.dll" (ByVal val1 As Long,ByVal val2 As Long) As Long

在一个form里面,两个按钮:

Private Sub Command1_Click()
Dim val11 As Long
Dim val22 As Long
Dim resu As Long
val11 = 6
val22 = 4
resu = mathAdd(val11,val22)
MsgBox resu
End Sub
Private Sub Command2_Click()
Dim val11 As Long
Dim val22 As Long
val11 = 6
val22 = 4
Dim resu As Long
resu = mathIncremente(val11,val22)
MsgBox resu
End Sub

测试通过。

本文参考的博文地址:http://www.52php.cn/article/p-dvopuucu-bdd.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读