51CTO技术论坛_中国领先的IT技术社区's Archiver

感冒不好玩 发表于 2006-8-29 01:59

使用 C++ Builder 创建包含VCL组件的DLL

DLL的一个好处在于用一种开发工具创建的DLL可以用于另一不同的开发工具编写的程序使用。当在调用应用程序中使用了包含了VCL组件(比如窗体)的DLL,则必须提供输出接口路径以用于标准的传统调用来避免C++名称不匹配,并且不需要所调用的应用程序支持VCL库。为了创建能够输出的VCL组件,可使用运行时程序包,有关信息可以参阅第10章。
\?5d,`,k!P PV*x UP     比如,假设要创建一个DLL,显示如下简单的对话框(如图3-1所示)。[img]http://www.lukin.cn/up_files/image/2006-2-20/43020061.gif[/img]I4?:bw/Y/u5O&B
    这个对话框DLL的代码如下:
IS%x.ko-i+j/i{4k%c [img]http://www.lukin.cn/up_files/image/2006-2-20/43020062.gif[/img]
c~@%Y1D5|S [img]http://www.lukin.cn/up_files/image/2006-2-20/43020063.gif[/img];Wx|G3t Q;n od!WL(~
[img]http://www.lukin.cn/up_files/image/2006-2-20/43020064.gif[/img]
c%b*a%J6?d}p'Ky `(M n;}$R^.?}
    这个例子代码显示对话框,并在Yes按钮被按下时在私有数据成员returnValue中存储true值,否则,returnValue值为false。公用的GetReturnValue()函数接收returnValue的当前值。
`p2tTy     为了调用这个对话框,并确定是哪一个按钮被按下,调用的应用程序调用输出函数InvokeYesNoDialog()。这个函数作为C链(以避免C++名称不匹配)和标准的传统C调用的一个输出函数在DLLMAIN.H中声明,在DLLMAIN.CPP中定义。
9z B-U;}"a\'W9|0d     在DLL中使用标准的C函数作为接口,不管是否是用C++Builder创建的,任意调用的应用程序都能使用这个DLL。要求支持这个对话框的VCL功能被链接入DLL本身,而所调用的应用程序不需要了解它的任何东西。
;`7K7`%X6v5V*\U'fVC     要[b]注意[/b]的是,当创建了一个VCL的DLL时,所需的VCL组件被链接入DLL,将导致一定量的越界(overhead),通过将几个组件结合进一个只需要VCL支持组件的一个备份的DLL中可以压缩这种越界,这将使应用程序的大小最小化。

页: [1]

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