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 Files\Microsoft Visual Studio\VB98。如果在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 Files\Microsoft Visual Studio\VB98\Link.exe”改名为“Link2.exe”;
步骤三:将假的那个Link.exe复制到“C:\Program Files\Microsoft Visual Studio\VB98\”中;
通过以上三步就可以在VB调用Link.EXE时会弹出对话框,处理就会中断。这时就可以有机会将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 Files\Microsoft Visual Studio\VB98 目录下的LINK2.exe,链接代码为:
LINK2.exe "D:\LINKOBJ\Class1.obj" "D:\LINKOBJ\Module1.obj" "D:\LINKOBJ\VBStardDLL.obj" "c:\Program Files\Microsoft Visual StudioVC\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathAdd /EXPORT:mathIncremente /OUT:"D:\LINKOBJ\VBStardDLL.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS 至此已在目录 D:\LINKOBJ下生成了 VBStardDLL.dll 的文件。
第四步,测试
新建一个标准exe工程,在一个module中做如下声明:
Public Declare Function mathAdd Lib "D:\LINKOBJ\VBStardDLL.dll" (ByVal val1 As Long,ByVal val2 As Long) As Long
Public Declare Function mathIncremente Lib "D:\LINKOBJ\VBStardDLL.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
测试通过。