2024年3月9日发(作者:)
怎样用VB编写DLL文件???
你先打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。编完后,保存一般是以“.cls”和“.vbw”
保存。这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正
在生成.dll文件”。生成以后是一个有好象齿轮状的图标。
如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”
的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。
在vb6里建新工程时选用建立dll 做好后用vb的引用就可以了
VB中创建的DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。其实MS
非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。
VB编译文件实际上采取了两次编译的方法,首先是调用产生*.OBJ文件,然后调用连
接。如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这
些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们
需要的DLL了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件
里面写下面的语句:
Sub Main
If MsgBox("哈哈", vbOKCancel) = vbOK Then
Shell " " & Command$
End If
End Sub
然后编译为,接下来将改名为,将改名为。
这样在VB调用时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了。
然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd:
Public Function mathadd(ByVal a As Long, ByVal b As Long) As Long
mathadd = a + b
End Function
编译这个工程,在Link的时候就会中断。然后把创建的、、备份出来。
然后就可以调用连接OBJ到DLL了,我的连接代码是:
"e:" "e:" "e:" "E:Program FilesMicrosoft
Visual " /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:"
/BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS
注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可
以被其他语言引入,例如在VB中,只需要:
Private Declare Function mathadd Lib "e:" (ByVal a As Long, ByVal b As Long) As
Long
我现在已经有了一个DLL文件,然后已经编了一个上位机程序,我想将那个DLL动态连接文件直接
调用到我的程序里,因为初学VB所以不知道怎么调用已有的DLL文件,请帮忙~~~
问题补充:我刚才已经把DLL文件有复制到你说的那几个文件夹里了,可是运行.EXE时还是提示找
不到DLL文件啊~~~~
1. 我给做了个示例工程:
/
你下载来看看, 里面就两句:
模块中定义:
Public Declare Function fnMyFunc Lib "" () As Long
按钮中放入:
Dim str1 As String
str1 = "函数调用成功"
If (fnMyFunc() = 42) Then MsgBox str1 '注:我那个DLL函数就返回42,其它没有了.
2. 下面重新给个微软的示例代码:
下列示例示范如何使用 Call 语句来将控制转移到子过程、内在函数、和动态链接库(DLL)过程,
' 调用一个子过程。
Call PrintToDebugWindow("Hello World")
' 上面的语句将控制转移到下面的子过程。
Sub PrintToDebugWindow(AnyString)
AnyString ' 在“立即”窗口中显示。
End Sub
' 调用一个内在函数,函数的返回值被忽略不处理。
Call Shell(AppName, 1) ' AppName 包含可执行文件的路径。
' 调用 Microsoft Windows DLL 过程。该声明语句必需是类模块中的私有的,而不是标准模块中的。
Private Declare Sub MessageBeep Lib "User" (ByVal N As Integer)
Sub CallMyDll()
Call MessageBeep(0) ' 调用 Windows DLL 过程。
MessageBeep 0 ' 再次调用,但不用“调用”这个关键字。
End Sub
LoadLibrary你试一试,不过这个需要自己做初始化工作。(对应于FreeLibrary)
回答者:
feenn
-
秀才 二级
3-9 09:34
这个问题好解决!
你先在运行中输入:regsvr32 dll文件的绝对地址
这样就注册了!
然后你在VB中点工程-》引用,选中刚才注册的文件,
就可以在工程中用了!


发布评论