vb6调用c语言dll的顺序,VB6毕竟能不能做被其他程序直接调用的标准的DLL动态库...

当前位置:我的异常网» VB » VB6毕竟能不能做被其他程序直接调用的标准的DLL动态

VB6毕竟能不能做被其他程序直接调用的标准的DLL动态库

www.myexceptions.net  网友分享于:2014-02-20  浏览:2次

VB6到底能不能做被其他程序直接调用的标准的DLL动态库

VB6到底能不能做被其他程序直接调用的标准的DLL动态库,看到网上有这么一篇文章,到底有没有用?

VB无所不能之五:建立“标准”DLL动态链接库文件

动态链接库经常被认为是VC或者Dephi的专利,DLL文件可以将你编写的函数动态的发布,并可以被其他程序很方便的调用。

有朋友会问了,在VB里面不是有一个叫做“ActiveX DLL”的项目类型吗,生成的文件最终也是“DLL”文件啊?

没错,最终文件确实是DLL文件,但其实严格意义上VB建立的DLL并不是像VC一样的动态链接库,VB建立的是ActiveX DLL,不能像kernel32.dll”那样通过“Declare Function .....”来调用的。

本文中将详细讲解用VB生成一个DLL动态链接库文件的方法,请注意,本文将详细讲述生成一个像VC的动态链接库文件,并且调用方法也是用“Declare Function .....”来调用。

好,那么我们来建立一个DLL吧。

原理讲述:

VB在编译文件的时候,采取的是两次编译的方法:

编译第一步,首先是调用c2.exe产生OBJ文件

“c2.exe”这个文件在“C:\Program Files\Microsoft Visual Studio\VB98”目录中,大家可以去找找看。“c2.exe”就是VB在编译的时候调用的命令。

编译第二步,调用Link.exe对OBJ文件进行链接

“link.exe”也在那个文件夹中,这个文件和上面的那个文件是一样的,都是一个命令行工具。用过命令行工具的朋友肯定知道,命令行工具一般都可以制定相应参数的,对于“link.exe”也一样,他也可以通过改变参数来调整其编译链接后的结果。

那么,其参数如下:

usage: LINK [options] [files] [@commandfile]

options:

/ALIGN:#

/BASE:{address|@filename,key}

/COMMENT:comment

/DEBUG

/DEBUGTYPE:{CV|COFF}

/DEF:filename

/DEFAULTLIB:library

/DELAY:{NOBIND|UNLOAD}

/DELAYLOAD:dll

/DLL

/DRIVER[:{UPONLY|WDM}]

/ENTRY:symbol

/EXETYPE:DYNAMIC

/EXPORT:symbol

/FIXED[:NO]

/FORCE[:{MULTIPLE|UNRESOLVED}]

/GPSIZE:#

/HEAP:reserve[,commit]

/IMPLIB:filename

/INCLUDE:symbol

/INCREMENTAL:{YES|NO}

/LARGEADDRESSAWARE[:NO]

/LIBPATH:dir

/LINK50COMPAT

/MACHINE:{ALPHA|ARM|IX86|MIPS|MIPS16|MIPSR41XX|PPC|SH3|S

/MAP[:filename]

/MAPINFO:{EXPORTS|FIXUPS|LINES}

/MERGE:from=to

/NODEFAULTLIB[:library]

/NOENTRY

/NOLOGO

/OPT:{ICF[,iterations]|NOICF|NOREF|NOWIN98|REF|WIN98}

/ORDER:@filename

/OUT:filename

/PDB:{filename|NONE}

/PDBTYPE:{CON[SOLIDATE]|SEPT[YPES]}

/PROFILE

/RELEASE

/SECTION:name,[E][R][W][S][D][K][L][P][X]

/STACK:reserve[,commit]

/STUB:filename

/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}[,#[.

/SWAPRUN:{CD|NET}

/VERBOSE[:LIB]

/VERSION:#[.#]

/VXD

/WARN[:warninglevel]

/WINDOWSCE:{CONVERT|EMULATION}

/WS:AGGRESSIVE

显然有点茫然,那么多参数啊?不用茫然,我们只要关心一个参数即可——“/EXPORT”。

加入这个参数,就是让你生成的DLL具有输出函数的功能的选项!!呵呵,明白了吧?

VB在编译后直接链接时,并没有加入这个选项,所以,用VB提供的编译菜单编译时根本就不能输出函数。

那么怎么办??还需要问我吗??当然是手工编译VB工程了!!

呵呵,那就手工编译吧!!哈哈哈,等等吧先,你看好了,每次编译的时候我们都看不到生成的那个OBJ文件,怎么调用Link.exe进行链接啊??!!

是的,那么我们只有两个选择,要么研究一下c2.exe怎么使用,要么就在其删除OBJ文件前将其截获。

研究c2.exe的使用方法我觉得就省了吧,当然有兴趣的朋友可以去研究,我就不想研究了,现在专攻截获这个问题。

如何截获,呵呵,很简单,——把link.exe改一下名,让系统找不到link.exe这样就直接可以得到OBJ文件了。

上面讲到,如何通过特殊方法获取OBJ文件,下面我们继续讲如何进行编译连接。

一、首先我们看看这种特殊方法的操作准备步骤:

步骤一:建立一个假的“Link.exe”;

建立一个新的项目,在那个项目中建立一个“Form”,然后,在“Form”中加入如下代码:

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\”中;

二、建立一个ActiveX DLL

步骤一:建立一个新项目,选择“ActiveX DLL”,然后建立一个“Module”在代码中加入如下代码:

Function fun1(ByVal a As Long, ByVal b As Long) As Long

fun1 = a + b

End Function

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值