编程论坛's Archiver

redice 发表于 2007-5-8 16:59

[转载]VB制作可输出函数的通用DLL

<P><FONT color=#421ae6>VB制作可输出函数的通用DLL---VB_DLL_Link用法</FONT></P>
<P><FONT color=#421ae6>    大家知道,VB6只能制作ActiveX DLL文件,制作能输出函数的通用DLL文件通常要用到VC等工具。实际上,VB在编译的时候加以控制,经过适当处理也是可以制作通用DLL的。使用VB_DLL_Link程序就可以利用VB编译出通用的DLL文件,此DLL文件可以被其他程序调用,例如在VB中用Declare语句调用并执行DLL中的函数。下面介绍VB_DLL_Link的使用方法:</FONT></P>
<P><FONT color=#421ae6>1、安装:<BR>本软件为纯绿色软件。下载VB_DLL_Link.exe后,双击它就可以自动安装了。你也可以手动将它复制到VB6程序目录下,将原Link.exe改名为Link2.exe,再将VB_DLL_Link.exe改名为Link.exe即可。</FONT></P>
<P><BR><FONT color=#421ae6>2、生成DLL:<BR>安装好VB_DLL_Link后,打开VB6,新建标准exe工程,工程菜单&gt;&gt;移除Form1,添加一个标准模块如Module1.bas,首先向其中写入DLL的入口代码:<BR>Function DLLMain(ByVal hInstDLL As Long, ByVal fdwReason As Long, ByVal lpwReserved As Long) As Long<BR>    DLLMain = 1<BR>End Function<BR>注意参数形式一定要正确,否则编译失败。高级编程时这些参数很有用。在首次调用DLL和调用DLL的原程序退出时均会执行DLLMain函数。这个函数是必须的。</FONT></P>
<P><FONT color=#421ae6>为了使VB不报错,还需加入以下代码:<BR>Sub Main()<BR>    '确保VB能编译<BR>End Sub</FONT></P>
<P><BR><FONT color=#421ae6>然后就可以向Module1.bas中写入自定义函数代码了,如:<BR>Function Add(ByVal A As Double, ByVal B As Double) As Double<BR>    MsgBox A + B<BR>    Add = A + B<BR>End Function<BR>Private Sub M(s As String)<BR>    MsgBox s, vbInformation<BR>End Sub</FONT></P>
<P><BR><FONT color=#421ae6>编写好代码后,保存工程,选择文件菜单&gt;&gt;生成exe,注意将文件扩展名改为.dll,否则本软件不能调出。然后本程序就会运行,出现一个对话框提示选择此工程需要导出的函数所在的模块文件,此例即Module1.bas,选择好后本程序主窗口会列出Module1.bas中所有的函数名。如果有多个模块,可以选择"从模块添加"按钮继续添加函数名。"添加函数名"按钮可手动添加现存的函数的名称。然后勾选需要导出的函数名,点击"编译为能输出函数的DLL"按钮,即可编译出通用DLL文件了,它能输出函数列表中打勾的所有函数。若不需要编译为通用DLL,请点击"常规编译"或按Esc键。</FONT></P>
<P><BR><FONT color=#421ae6>3、应用DLL:<BR>编译好的通用DLL文件,可按常规DLL文件的调用方法加以调用。如上述的例子在VB中调用方法如下(请将Lib后的字符串改为上面编译的Dll文件名):<BR>Private Declare Function Add Lib "编译好的DLL文件的路径及名称" (ByVal A As Double, ByVal B As Double) As Double<BR>Private Declare Sub M Lib "编译好的DLL文件的路径及名称" (s As String)<BR>Private Sub main()<BR>    Add 9, 2    '调用DLL中的函数<BR>    M StrConv("By 同济黄正", vbUnicode) '字符串需转换成Unicode再传递<BR>End Sub</FONT></P>
<P><BR><FONT color=#421ae6>试试看,效果怎样?</FONT></P>
<P><BR><FONT color=#421ae6>4、注意事项:<BR>*向DLL传递字符参数时,需转换成Unicode形式StrConv(yourString, vbUnicode),才能正确使用。<BR>*输出函数的模块建议用标准模块bas,虽然窗体模块frm和类模块cls中的函数也可以用,但有时会出错且限制多多。<BR>*一个工程可以有多个bas模块,其间的函数均能直接输出。<BR>*建议用Public类型的Function或Sub作为输出函数。<BR>*上例只是一个简单的示例,实际应用中可以在DLL工程(VB的exe工程)中加入窗体、控件、模块、类模块等,实现复杂的功能。</FONT></P>
<P><BR><FONT color=#421ae6>欢迎广大VB爱好者使用本软件!授予个人用户免费使用本软件,但严禁用于商业用途!本人保留本软件的一切权利。<BR>点此下载VB_DLL_Link最新版本! 若下载失败可去华军软件园下载老的版本。</FONT></P>
<P><FONT color=#421ae6>若有问题请给我言。  (免费空间数据库不稳定,若不能留言请隔天再试试)</FONT></P>
<P><FONT color=#421ae6>查看更多我的软件</FONT></P>
<P><FONT color=#421ae6>By 同济黄正<BR><BR>附:</FONT></P>[attach]20509[/attach]<BR><BR><FONT color=#e6421a>运行软件时 它会提示过期了 ,将你的系统时间修改到2006年 是不是能用了?<BR></FONT>

redice 发表于 2007-5-8 22:36

<P>没有人关心  啊</P>

youyun612 发表于 2007-5-14 14:48

侃侃<BR>不见仪把

lthiy 发表于 2007-5-14 16:38

看看

multiple1902 发表于 2007-9-30 20:58

<P>好东西。</P>
<P>以前有一个类似的程序,但重装几次系统之后就没了……<BR></P>

随风逐流 发表于 2007-10-26 10:25

<P>这种DLL注入后,有用没?</P>

永夜的极光 发表于 2007-10-26 13:30

<DIV class=quote><B>以下是引用<U>redice</U>在2007-5-8 16:59:50的发言:</B><BR><BR><BR><FONT color=#e6421a>运行软件时 它会提示过期了 ,将你的系统时间修改到2006年 是不是能用了?<BR></FONT></DIV>
<P>然后时间能改回来吗?</P>

redice 发表于 2007-10-26 15:58

回复:(永夜的极光)以下是引用redice在2007-5-8 16:...

不行<BR>每次编译程序时Link.exe都会先检测软件是否过期  <BR><BR><BR>你去下一个新版的就不用这样了

qzqzqzqz 发表于 2008-6-11 11:18

VB制作可输出函数的通用DLL

VB制作可输出函数的通用DLL

jxyga111 发表于 2008-6-11 11:33

真的有用不?

三断笛 发表于 2008-6-11 12:27

网上见过其他方法的   比这个麻烦点 但不像上边一样有限制

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.