关于VB生成带函数通道的dll
vb吧
全部回复
仅看楼主
level 7
北慕233 楼主
在网上下了一个能够使得vb生成带函数通道的dll的小软件,"vb_dll_link"。
写软件的人附上了一篇说明,说这个软件能够使得VB生成的DLL像API一样被其他程序调用,然后是一大篇教程。
——————以下就是原文————————
VB制作可输出函数的通用DLL---VB_DLL_Link用法
大家知道,VB6只能制作ActiveX DLL文件,制作能输出函数的通用DLL文件通常要用到VC等工具。实际上,VB在编译的时候加以控制,经过适当处理也是可以制作通用DLL的。使用VB_DLL_Link程序就可以利用VB编译出通用的DLL文件,此DLL文件可以被其他程序调用,例如在VB中用Declare语句调用并执行DLL中的函数。下面介绍VB_DLL_Link的使用方法:
1、安装:
本软件为纯绿色软件。下载VB_DLL_Link.exe后,双击它就可以自动安装了。你也可以手动将它复制到VB6程序目录下,将原Link.exe改名为Link2.exe,再将VB_DLL_Link.exe改名为Link.exe即可。
2、生成DLL:
安装好VB_DLL_Link后,打开VB6,新建标准exe工程,工程菜单>>移除Form1,添加一个标准模块如Module1.bas,首先向其中写入DLL的入口代码:
Function DLLMain(ByVal hInstDLL As Long, ByVal fdwReason As Long, ByVal lpwReserved As Long) As Long
DLLMain = 1
End Function
注意参数形式一定要正确,否则编译失败。高级编程时这些参数很有用。在首次调用DLL和调用DLL的原程序退出时均会执行DLLMain函数。这个函数是必须的。
为了使VB不报错,还需加入以下代码:
Sub Main()
'确保VB能编译
End Sub
然后就可以向Module1.bas中写入自定义函数代码了,如:
Function Add(ByVal A As Double, ByVal B As Double) As Double
MsgBox A + B
Add = A + B
End Function
Private Sub M(s As String)
MsgBox s, vbInformation
End Sub
编写好代码后,保存工程,选择文件菜单>>生成exe,注意将文件扩展名改为.dll,否则本软件不能调出。然后本程序就会运行,出现一个对话框提示选择此工程需要导出的函数所在的模块文件,此例即Module1.bas,选择好后本程序主窗口会列出Module1.bas中所有的函数名。如果有多个模块,可以选择"从模块添加"按钮继续添加函数名。"添加函数名"按钮可手动添加现存的函数的名称。然后勾选需要导出的函数名,点击"编译为能输出函数的DLL"按钮,即可编译出通用DLL文件了,它能输出函数列表中打勾的所有函数。若不需要编译为通用DLL,请点击"常规编译"或按Esc键。
3、应用DLL:
编译好的通用DLL文件,可按常规DLL文件的调用方法加以调用。如上述的例子在VB中调用方法如下(请将Lib后的字符串改为上面编译的Dll文件名):
Private Declare Function Add LLb "编译好的DLL文件的路径及名称" (ByVal A As Double, ByVal B As Double) As Double
Private Declare Sub M LLb "编译好的DLL文件的路径及名称" (s As String)
Private Sub main()
Add 9, 2 '调用DLL中的函数
M StrConv("By 同济黄正", vbUnicode) '字符串需转换成Unicode再传递
End Sub
试试看,效果怎样?
4、注意事项:
*向DLL传递字符参数时,需转换成Unicode形式StrConv(yourString, vbUnicode),才能正确使用。
*输出函数的模块建议用标准模块bas,虽然窗体模块frm和类模块cls中的函数也可以用,但有时会出错且限制多多。
*一个工程可以有多个bas模块,其间的函数均能直接输出。
*建议用Public类型的Function或Sub作为输出函数。
*上例只是一个简单的示例,实际应用中可以在DLL工程(VB的exe工程)中加入窗体、控件、模块、类模块等,实现复杂的功能。
欢迎广大VB爱好者使用本软件!授予个人用户免费使用本软件,但严禁用于商业用途!本人保留本软件的一切权利。
点此下载VB_DLL_Link最新版本! 若下载失败可去华军软件园下载老的版本。
若有问题请给我言。 (免费空间数据库不稳定,若不能留言请隔天再试试)
查看更多我的软件
By 同济黄正
——————————————————————
让人无语的[啊]是里面的DLLMain函数名字是错的,换成DllMain后就没问题了,也不知道这是作者特意挖的坑还是什么原因,错误提示里面说要注意大小写,然后给的资料里面自己都没注意大小写,坑死人了。
2019年06月11日 14点06分 1
level 11
谢谢分享,先收藏,慢慢学。哈哈哈
2019年06月12日 00点06分 3
level 11
分享精神值得点赞[吐舌]
2019年06月12日 23点06分 5
level 10
amicforvb 也支持函数导出
VB_DLL_Link 我在几年前用过 的确可以
2019年06月15日 00点06分 6
level 10
回复 lxy177720000 :我是没遇到过,VB_DLL_Link要替换文件,amicforvb 不需要动什么。
没有什么特殊要求 写DLL的时候只保留一个 。bas文件好了,窗口文件去掉。
2019年06月16日 00点06分 8
level 14
这种dll可以脱离vb的运行库吗?
2023年02月13日 14点02分 9
导入dll中还会有的,想脱离需要修改PE的,函数开头都会引入msvbvm60.dll的一些函数。现在脱不脱离其实意义不大了,win11等后面系统可能还会继续带msvbvm60.dll,原本要脱离msvbvm60.dll是以为后面的系统不带这个了,都不想单文件exe还要带个dl
2023年02月14日 07点02分
vb6很多内置函数都在运行库里,脱离运行库只能做简单的数学运算,连调用api都成问题,还有什么意义。
2023年02月20日 08点02分
level 1
如果只是为了写 导出函数。可以拿 Freebaic编译器 作为代码的编译工具。代码的改动很小。当然也仅限于 导出函数。
2023年02月14日 15点02分 10
1