- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
转帖] VB创建能作为输出函数的DLL
DLL, 函数, 输出
QQ:594363468
DLL文件(即Dynamic Link Library,动态链接库)作为系统的一个重要的组成部分,除了一些小程序外,我们几乎能在所有软件中看到DLL文件,而且如果使用VB写的一些收费软件有一个DLL代替关键函数,想破解都难了。因此,我们就有必要来学习如何编写DLL。
对于很多初学VB的网友来说,VB是一门比较简单的语言,而MicroSoft公司在开发VB时,也增添了很多功能。所以,我个人觉得VB除了部分不足之外还是挺不错的,当然我指的不足是主要是VB运行库方面的问题。
对于很多VB初学者来说,都会有这么一个错误的认识——VB中创建的DLL只是COM组件,无法作为输出函数的DLL(即VB写的DLL是不完整的DLL)。然而,对于一些VB的高手来说,他们就知道应该如何写具有返回值的DLL。其实,国外早已经有人做出了在VB中制作标准DLL的Add-Ins了,而且在网上也有对于写VB创建能作为输出函数的DLL的相关文章。今天,我再来讲讲这个话题——VB创建能作为输出函数的DLL
对于VB编写DLL,按照我的经验,主要分为两步:一、“安内”,二、“攘外”
首先,“攘外必先安内”
我们要知道如何使DLL拥有一个能被调用的API函数。很简单,我不想多说,就是在Module里面写一个Public的Function
接下来,我们就可以“攘外”了
那么,先来介绍一下编译技术
编译器的编译技术可以分为Native Compile(自然编译)与P-Code Compile(伪编译)两种。
自然编译是编译器将高级语言转换为汇编代码,并经链接生成EXE程序的过程。
伪编译是编译器将高级语言转换为某种编码后,将能解释、执行此编码的一段程序一同链接,生成EXE程序。
伪代码P-Code,最早应该叫做Pascal-Code,其名称起源于一个Pascal编译器使用的“中间代码”编译技术。现在一般作为Pseudo-code(伪代码)或Packed-code(压缩代码)简称。
采用伪代码编译时,每个VB源文件(包括.frm(窗体)、.bas(标准模块)、.cls(类模块))经VB IDE编译后各自生成相应的.obj文件,交链接程序Link.exe生成伪编译的可执行文件(EXE、DLL、OCX等)。
而用自然编译时,每个VB源文件由C2.exe编译生成汇编代码,生成相应的obj文件,再由Link.exe链接成为完整的可执行文件。
别看编译只有两步,其实,有大玄奥在里头。。。
MicroSoft公司,可以说是十分的狡猾,因为在默认的方式下,VB编译的两步使用到的命令行都是他们设定好的,所以,跳过了很多有用的部分,包括我们今天讲的输出函数部分。如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VBLinkd的命令行中将这个选项部分跳过了。而且过分的是:VB在构造EXE后会将编译出来的OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。
根据前人的方法,加上自己修改,用一个比较龌龊的方法来变通
打开“VB6.0”,新建一个“标准EXE 工程”,把Form移除,添加一个Module
在模块里输入一下代码:
Sub Main()
If Command = Then Exit Sub 命令行不为空
Dim intCMD As Integer
Clipboard.Clear 清空剪贴板
Clipboard.SetText Command 将命令行复制到剪贴板
去掉 复制到剪贴板 LINK 速度会快些
intCMD = MsgBox(编译命令行如下: vbCrLf Command vbCrLf 点击“是”继续编译,点击“否”编译DLL,点击“取消”中断编译, vbYesNoCancel + vbInformation, 编译)
Select Case intCMD
Case vbYes 选择“是” 继续编译
Shell VBLINK Command, vbHide
Case vbNo 选择“否”
Dim FuncName As String, cmd As String, l As Integer
FuncName = InputBox(请输入 输出的函数名称(对个函数 请用英文半角分号“;”分开), _
文档评论(0)