一种vb与vc程序混合编译链接的方法

文档序号:6462636阅读:189来源:国知局
专利名称:一种vb与vc程序混合编译链接的方法
技术领域
本发明属于Windows平台下软件开发技术领域,涉及使用VB与VC两语 言开发平台进行联合编程,实现混合编译链接的一种方法。
背景技术
混合编程是指源程序使用两种或两种以上计算机编程语言来生成应用程序的开发过程。混合编程的特点是可以充分利用现有的其他语言编制的软件代 码,提高软件代码资源的可复用性,縮短软件的开发周期;开发出无法用单一 语言实现的功能模块,提高软件的集成度和可操作性;提高软件的执行速度和 可维护性;多个单位协同开发集成系统时,各协作单位通过约定数据接口,使 用不同的开发平台独立开发各自独立的功能模块,实现对技术秘密和数据秘密 的保护。VB是一种模块化的编程语言,作为一种简单易用的Windows软件开发工 具,VB中高度的封装和模块化减轻了编程者的负担,它使程序员不必直接面对 纷繁复杂的Windows消息,将精力主要集中在程序功能的实现上,大大提高了 编程效率。但有一些数据结构在VB中的表达比较困难;VB也使开发人员失去 了许多访问底层能力和直接与Windows交互的机会。VC是一种功能强大的编程语言,目标代码简洁高效,运行速度快。但VC 难度较大,学习与开发周期长,使用起来不方便,在很大程度上掩盖了其本身 的优点。利用VB与VC混合编程来编制程序可以充分发挥两者的优点,用VB快速 开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,如内存的 操作、1/0端口的操作、多线程处理及数据处理等,VC中还可以嵌入汇编语言 进行更底层的操作。这样可大大提高程序的执行效率和程序编制的灵活性。目前VB和VC联合编程有4种方式1)外部命令法利用VC编写一个可以完成具体功能的可执行文件,然后利用VB中的Shell 函数去执行这个程序。这是最简单也是最容易实现的方法,但这种方法灵活性 以及可交互性很差。VB程序只能简单地启动外部的可执行程序,不能很好的控 制它的运行,并且在这两个进程间交换数据也是非常困难的, 一般是通过读写 临时文件的方法进行数据交换,运行效率较低。因此,这种方法在实际中运用较少。2) 动态链接库法动态链接库(DLL)是可执行的模块,但它没有自己的堆栈,必须在调用 动态链接库函数的程序环境下运行。动态链接库扩展了应用程序的特性。由于 动态链接库能够动态地装入进程的地址空间,因此应用程序能够在运行时确定 需要执行什么操作,然后装入相应的代码,以便根据需要执行这些操作。动态 链接库有助于节省内存。如果两个或多个应用程序使用同一个动态链接库,那 么该动态链接库的页面只要放入RAM —次,所有的应用程序都可以共享它的各 个页面。动态链接库有助于资源的共享。动态链接库可以包含对话框模板、字 符串、图标和位图等资源,多个应用程序能够使用动态链接库来共享这些资源。 通常使用VC编写动态链接库,在VB程序中调用动态链接库,实现联合编程。3) ActiveX控件法ActiveX控件是可执行组件,它们是建立在Microsoft的COM技术和OLE 技术基础上的。对于用户来说,它们与VB中使用的普通控件十分相像。使用 ActiveX控件也可以使得VB和VC两种语言之间进行交流。ActiveX控件和它 的客户应用程序之间通过三种方式进行通信方法、属性和事件。通常使用VC 编写ActiveX控件,在VB程序中调用ActiveX控件,实现联合编程。4) 自动化服务器法自动化服务器是向其他应用程序(称为自动化客户端)公开可编程对象(称 为自动化对象)的应用程序。自动化服务器有时称为自动化组件。自动化使应 用程序能够对另一个应用程序中实现的对象进行操作,或者将对象公开以便可 以对其进行操作。通常使用VC创建自动化服务器接口,在VB程序中调用自动 化服务器接口,实现联合编程。以上四种混合编程模式中,外部命令法实现最为简单,其技术层次为最低 级,需要应用API提供的进程操作函数来解决程序异步执行和黑屏问题,同时 这种调用模式的执行效率也比较低。ActiveX控件法比外部命令法前进了一步, 其缺点是用其他语言编制的被调用模块一旦被修改,则整个软件必须重新进行 编译连接,软件的可维护性较差。动态链接库法是目前普遍采用的一种方式, DLL可以包含可执行代码、数据和各种资源,扩大了库文件的使用范围,实现 了代码的封装,程序简捷明晰,执行效率高,软件的可维护性、可移植性和可 复用性好。自动化服务器由于釆用统一的接口,应用程序在执行和使用服务器 时有着完全的自由,实现也比较简单。以上这些方式都是通过形成某种文件资 源的形式,实现两种开发语言的联合编程,没有实现代码的完全融合。发明内容为了克服现有技术中的不足之处,本发明提供了一种VB与VC两种软件开 发平台实现混合编译链接的方法。为了实现上述目的,本发明采用以下技术方案1) 制作伪VB编译器;2) 编写VB源程序,编译VB源程序,使用伪VB编译器截获OBJ文件和 链接参数;3) 编写VC源程序,编译VC源程序,获取OBJ文件;4) 对两种开发平台生成的多个OBJ文件进行混合和替换;5) 使用链接器进行统一链接,生成统一的可执行文件。 由于采用了上述技术方案,本发明具有以下的有益效果本发明使用VB和VC编写的源程序,分别进行编译生成各自的目标文件,再 将多个目标文件进行整理,集中进行链接,生成统一的可执行文件。发挥了两种软 件开发的各自优势,实现了目标代码高度融合,是一种新的软件联合编程的开发方 法。

图1是本发明的逻辑流程图;图2是本发明的伪链接程序的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式
作进一步的说明和阐述 VB和VC是微软公司推出的两种软件开发平台,VB使用Basic语言,VC 使用0++语言。但VB和VC —样采取了编译链接的方法将源程序编译成本地码。 VB系统首先是调用编译程序C2.exe将源程序中的每个frm、 bas、 cls、 vbp文件 分别编译为OBJ文件,然后再调用链接程序Link.exe将它们链接成EXE文件, 这个过程是自动的,链接完成后VB系统会自动将OBJ文件删除。实际上VB 的编译器C2.exe和VC的C2.DLL基本上是相同的,而VB的链接器Link.exe 和VC的链接器就是同一个程序。要实现混合链接的目的,就需要在链接程序链 接输出EXE之前对OBJ文件进行处理,将VC编译的OBJ文件和VB编译的 OBJ文件链接到同一个EXE文件中。 1)伪VB编译器的制作首先需要编制一个伪链接程序,当然这个程序不是要实现链接的功能,而是截获OBJ文件,获取VB传递给链接程序的参数,然后调用原链接程序完成 链接工作。用VB先创建一个EXE工程,在Form—Load事件里面写下面的语句Private Sub Form—Load()Shell "VBLink.exe " & Command$IfMsgBox("编译完成,请备份OBJ文件! ", vbOKCancel) = vbOK Then Shell "VBlink.exe " & Command$ '调用原链接程序 Text 1= Command$ '获取链接参数 End If End Sub然后编译为Linktemp.exe文件,接下来将VB系统目录下的Link.EXE改名 为VBLink.exe,将Linktemp.exe改名为Link.exe,再拷贝到VB系统目录下。这 样在VB调用Link.exe时处理就会中断。这时就可以将OBJ文件拷贝出来了 。2)VB源程序的编译在VB中新建名为VBWithVC的EXE工程,给工程添加一个名称为ModVC 的模块。给窗体添加一个名为cmdTest的按钮,在ModVC模块中添加一个空的 Test函数Public Function Test() As LongEnd Function在cmdTest的Click事件中添加代码Msgbox Test。编译VBW池VC,在中断提示时,将Forml.OBJ和ModVB.OBJ拷贝出来, 再将KERNEL32丄IB、 LIBCD丄IB 、 MSPDB60.DLL、 OLDNAMES丄IB和 VBAEXE6.LIB链接需要的库文件拷贝出来,放在同一个文件夹中。3) VC源程序的编译启动VC新建一个名为vcobj的空的Win32 Console Application工程。在工 程中添加一个Generic Class,类的名为ModVC。在类ModVC中添加成员函数 Test()private:void _stdcall Test();在Windows中函数返回值一般都是存放在eax寄存器中的,我们用嵌入汇 编语言的方法编写简单的MySum函数体void 一stdcall ModVC:: Test ()_asm mov eax, 54321;最后编译vcobj ,将vcobj.obj 、 ModVC.obj和StdAfe.obj目标文件拷贝到VB 生成的OBJ文件夹中。其中ModVC.obj是是用来替换VB生成的ModVC.obj文件的。4)目标文件的混合链接在伪链接程序运行时已获取了链接参数,再将VC的OBJ文件添加进去, 现在使用真正的链接程序将所有的OBJ文件和库文件进行链接,生成EXE文件。在CMD窗口中键入命令Link "Forml.OBJ" "ModVC.OBJ" "vcobj.OBJ" "StdAfx.obj" "ModVB.OBJ" "LIBCD.lib" "VBAEXE6丄IB" /ENTRY:—vbaS /OUT: "ModVB.exe" /BASE:0x400000 /SUBSYSTEM:WINDOWS,4.0/VERSION: 1.0 /INCREMENTAL :NO /OPT:REF /MERGE: .rdata=.text/IGNORE:4078通过上面的链接命令,生成ModVB.EXE文件,运行ModVB.EXE,点击按 钮,消息窗口上显示54321,说明在VB程序中调用的Test函数是VC中定义的 Test函数。与现有技术相比,本发明具有以下优点本发明使用VB和VC编写的源程序,分别进行编译生成各自的目标文件, 再将多个目标文件进行整理,集中进行链接,生成统一的可执行文件。发挥了两 种软件开发的各自优势,实现了目标代码高度融合,是一种新的软件联合编程的 开发方法。显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并 非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述 说明的基础上还可以做出其它不同形式的变化或变动。这里无法对所有的实施 方式予以穷举。凡是属于本发明的技术方案所引伸出的显而易见的变化或变动 仍处于本发明的保护范围之列。
权利要求
1、一种VB与VC程序混合编译链接的方法,包括以下步骤1)制作伪VB编译器;2)编写VB源程序,编译VB源程序,使用伪VB编译器获取OBJ文件和链接参数;3)编写VC源程序,编译VC源程序,获取OBJ文件;4)对两种开发平台生成的多个OBJ文件进行混合和替换;5)使用链接器进行统一链接,生成统一的可执行文件。
2、 根据权利要求1所述的VB与VC程序混合编译链接的方法,其特征在 于在所述步骤l)中,所述伪编译器为控制VB开发平台系统的编译过程,截 获OBJ目标文件和链接参数。
3、 根据权利要求1所述的VB与VC程序混合编译链接的方法,其特征在 于在所述步骤2)中,包含使用伪编译器截获的OBJ文件。
4、 根据权利要求1所述的VB与VC程序混合编译链接的方法,其特征在 于在所述步骤4)中,所述OBJ的相互混合和替换根据程序模块的逻辑关系 进行。
5、 根据权利要求1所述的VB与VC程序混合编译链接的方法,其特征在 于在所述步骤5)中,使用链接器对步骤4)产生的OBJ文件进行链接。
6、 根据权利要求1所述的VB与VC程序混合编译链接的方法,其特征在 于在所述步骤5)中,链接器的链接参数使用步骤2)获取的链接参数。
全文摘要
本发明公开了一种VB与VC程序混合编译链接的方法,包括以下步骤1)制作VB的伪编译器;2)编写VB源程序,编译VB源程序,使用伪VB编译器获取OBJ文件和链接参数;3)编写VC源程序,编译VC源程序,获取OBJ文件;4)对两种开发平台生成的多个OBJ文件进行混合和替换;5)使用链接器进行统一链接,生成统一的可执行文件。本发明发挥了两种软件开发的各自优势,实现了目标代码高度融合,是一种新的软件联合编程的开发方法。
文档编号G06F9/45GK101315606SQ200810097518
公开日2008年12月3日 申请日期2008年5月8日 优先权日2008年5月8日
发明者李湘江 申请人:李湘江
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1