有朋友会问了,在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文件了。 好,今天先写到这,明天再写后半部分。 续篇已经写完: http://blog.csdn.net/useway/archive/2010/04/15/5489951.aspx 。 。 。
《Java程序员,上班那点事儿》:
前言, 目录
卓越网销售链接
China-pub销售链接
当当网销售链接 《Java程序员,上班那点事》纪念帖 关于下载《Java程序员,上班那点事而》的电子版
原文链接: http://www.jb51.cc/article/p-wkgxyirt-qm.html 总结
以上是内存溢出为你收集整理的VB无所不能之五:建立“标准”DLL动态链接库文件(1)全部内容,希望文章能够帮你解决VB无所不能之五:建立“标准”DLL动态链接库文件(1)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)