|
传说中的add_in出现了!
楼上通不过去是因为bcb是c语法,而不是pascal语法,delphi add_in所以无法在bcb中编译通过。
说句题外话,据我所知delphi的add_in 通过文件映射的方式实现,和现在网络上流传的delphi_in完全不同,这是通过两种不同的方式实现的!
这里分别代表两种识别控件的方式:
1.你上传的add_in是实现delphi和winrunner之间的桥梁。实现原理是文件映射,那么文件映射是什么呢?
内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而且在对该文件进行操作之前必须首先对文件进行映射,就如同将整个文件从磁盘加载到内存。
系统往往需要在多个进程之间共享数据,如果数据量小,处理方法是灵活多变的,如果共享数据容量巨大,那么就需要借助于内存映射文件来进行。
下面给出使用内存映射文件的一般方法:
首先要通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径,映像的长度还没有指定。为了指定文件映射对象需要多大的物理存储空间还需要通过CreateFileMapping()函数来创建一个文件映射内核对象以告诉系统文件的尺寸以及访问文件的方式。在创建了文件映射对象后,还必须为文件数据保留一个地址空间区域,并把文件数据作为映射到该区域的物理存储器进行提交。由MapViewOfFile()函数负责通过系统的管理而将文件映射对象的全部或部分映射到进程地址空间
我们看testsrvr.pas单元中的几段代码
procedure TFormTstSrvr2.OpenMappedFile();
begin
in_out_file := OpenFileMapping(FILE_MAP_WRITE,FALSE,'DLPH2WR_IO_PARAM') ;
if (in_out_file = 0 ) then exit ;
pInOut := MapViewOfFile(in_out_file, FILE_MAP_WRITE, 0, 0, 0);
if (pInOut = nil) then
CloseHandle(in_out_file);
end;
procedure TFormTstSrvr2.CloseMappedFile();
begin
if (pInOut <> nil) then UnmapViewOfFile(pInOut);
if (in_out_file <> 0 ) then
CloseHandle(in_out_file);
in_out_file:=0;
end;
这里就用到了两个函数 |
|