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 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|