摘要:
procedure TFrmMain.btn1Click(Sender: TObject);var MyObj: TbplTest; p: Pointer; d:TClass; s: TFormShow;begin d := GetClass('TTbplTest'); if d <> nil then begin MyObj := d.NewInstance as TbplTest; MyObj.Create; @s:= MyObj.MethodAddress('ShowInfo');s('test'); FreeAndNil(My 阅读全文
摘要:
包的实现、包设计时的注意点和常见问题我们的程序中使用了大量的包,我把我觉得在设计包时需要注意的几点内容列出来,算作小小的提醒: Delphi的bpl与宿主和其他的bpl共享接口部分的声明,共享相同的单元,所以自然能共享内存管理器。因为Delphi在编译bpl时在其Exports段导出了所有的接口声明部分和初始化/终止化节,这样一旦一个bpl需要其他的bpl时Delphi也可以知道其他bpl包含了什么,提供了什么,也就可以在Imports段Import使用到的其他bpl的全局变量,函数,静态对象,初始化/终止化节。因此,使用包时,宿主和所有的包都对每个全局的内容拥有相同的引用,也都使用了同一份内 阅读全文
摘要:
用Dunit测试 BPL方式实现的数据库连接池实战开发 DELPHI实现的三层数据连接池。 声明IConnPoolWrapper 的接口。 IConnPoolWrapper = interface(IInterface) ['{E08BDEB7-BCA3-4F24-AE2D-A8745ACE8708}'] procedure SetConnectionString(connStr: String); procedure SetMaxConnections(maxConns: Integer); function GetMaxConnections: Integer; funct 阅读全文
摘要:
Delphi调用一些EXE,DLL1.调用EXE WINEXEC//调用可执行文件 winexec('command.com /c copy *.* c:\',SW_Normal); winexec('start abc.txt'); ShellExecute或ShellExecuteEx//启动文件关联程序 uses shellapi shellexecute(application.Handle ,'open','www.csdn.net,nil,nil,sw_normal); function executefile(const f 阅读全文
摘要:
从Dll中导出类,想必大家首先想到的是使用bpl包。这种方式有一个不好,那就是使用者必须清楚这个包中含有那些类,也就是说必须知道类的名字——这在一定意义上是个限制,试想一种情况,使用者定义了一个底层的抽象类(abstract class),然后在此基础上定义了许多应用类(concrete class),那么,对于使用者来说,他希望在不知道具体有哪些类的情况下能使用这些类——这么说似乎有些玄,但实际情况确实如此,因为定义抽象类的时候并不能预料到以后会有多少个具体类——那么这样的需求,要靠什么样的技术来实现呢? 其实实现的技术的难度并不大——作者在此将自己实践的经验献给大家,算作抛砖引玉,希望能. 阅读全文
摘要:
为什么要使用包?答案很简单:因为包的功能强大。设计期包(design-time package)简化了自定义组件的发布和安装;而运行期包(run-time package)则更是给传统的程序设计注入了新鲜的力量。一旦把可重用的代码编译为运行期库中,你就可以在多个应用程序中共享它们。所有应用程序都可以通过包访问标准组件,Delphi自己就是这么干的。因为应用程序不必在可执行文件中单独复制一份组件库,这样就大大节省了系统资源和磁盘空间。此外,包还可以减少花费在编译上的时间,因为你只需编译应用程序特有的代码。如果可以动态的使用包,那么我们还可以获得更多的好处。包提供了一种新颖的模块化方法来开发应用程 阅读全文
摘要:
这是转来的一篇文章,我自己在项目中也使用到了类似于根据类名创建类实例并调用相应函数的功能。具体代码我会在今后发布出来。利用GetClass与RegisterClass可以实现根据字符串来实例化具体的子类,这对于某些需要动态配置程序的场合是很有用的。其他的应用如子窗体切换,算法替换等都能得到应用。unitExample1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Button1:TButton;pro 阅读全文