Grid++Report报表,传统的发送方式,除了发布程序以外外,还要为客户注册DLL。由于,多数客户已经使用Win10,Win10在注册Dll时,对权限要求比较严,客户自己注册比较困难,使得软件发布,还要上门为客户注册Grid++Report报表的DLL,很不方便。
自Grid++Report报表6.2.2.2版本开始,支持C/S报表免注册DLL报表开发,很方便。同时,也可避免不同版本之间,不兼容的错误,以及不同版本之间的差异。
一、传统的Dll注册
需要在安装过程中对 Grid++Report 的两个发布 DLL 进行注册,必须用 regsvr32.exe 程序进行注册操作,在命令行窗口中,执行 regsvr32 命令。
语法如下:
regsvr32 "%FilePath%\gregn6.dll"
regsvr32 "%FilePath%\grdes6.dll"
二、6.2.2.2版本后续,免注册DLL 报表开发
1、机制就是通过建立一个与执行EXE文件同名的清单文件(后缀名.manifest),实现Grid++Report发布DLL文件的COM免注册。其原理是,在清单文件中包含有COM组件相关的信息,由它来代替注册表的角色,来指定COM文件路径、COM版本等信息。从而实现直接复制文件发布用Grid++Report开发的软件。
2、免DLL注册发布的优点
(1)发布软件时不需写入系统注册表,安装时不需要管理员权限。
(2)如果一台电脑用了不同版本的Grid++Report,不会发生版本冲突,即避免DLL Hell问题。
(3)实现绿色发布软件,无需制作安装程序(或用 regsvr32 命令注册dll),通过简单的文件复制即可发布软件。
三、有关程序的目录的概念
1、Project directory:例如,D:\MyPro\A1 (项目源文件目录)
2、Output directory:例如,D:\Program (EXE输出目录)
注意:通常二个目录相同。
3、Project Name项目名:例如,HLserver,生成的EXE文件名:例如,HLserver.exe
四、建立清单文件XXXX.exe.manifest文件
1、将清单文件“C:\Grid++Report 6\manifest\YourX86.exe.manifest”复制到程序输出的目录Output directory目录中,例如:D:\Program
2、将YourX86.exe.manifest,改名:HLserver.exe.manifest
3、使用纯文本编辑器,打开HLserver.exe.manifest文件:
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="YourX86.exe" version="1.0.0.0" type="win32" />
<file name="grdes6.dll">
<typelib tlbid="{c5a16330-a084-48c9-bc0f-0d0b37a14123}" version="6.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{6edd80cb-9f08-4c71-b406-479e5cb80fce}" threadingModel="Apartment" tlbid="{c5a16330-a084-48c9-bc0f-0d0b37a14123}" progid="grdes.GRDesigner.6" description="Grid++Report Designer 6" />
</file>
<file name="gregn6.dll">
<typelib tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" version="6.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{f9364159-6aed-4f9c-8baf-d7c7ed6160a8}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GridppReport.6" description="GridppReport Class" />
<comClass clsid="{1b5ea181-a38d-4f42-88b2-6af74cf6d6c0}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRDisplayViewer.6" description="Grid++Report DisplayViewer 6" />
<comClass clsid="{7fd5dc62-ded0-4138-9c48-55f0a0fe7b66}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRDisplayViewerProps.6" description="GRDisplayViewerProps Class" />
<comClass clsid="{44cbb5de-5afb-4c3d-8f3f-0f70ca5372ad}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRPrintViewer.6" description="Grid++Report PrintViewer 6" />
<comClass clsid="{6ca58cb2-2ad1-4ad0-b3cc-5f5c000bbdee}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRPrintViewerProps.6" description="GRPrintViewerProps Class" />
</file>
</assembly>
将文本第三行:“YourX86.exe”,改为你的项目EXE文件名“HLserver.exe”:
<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="HLServer.exe" version="1.0.0.0" type="win32" />
<file name="grdes6.dll">
<typelib tlbid="{c5a16330-a084-48c9-bc0f-0d0b37a14123}" version="6.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{6edd80cb-9f08-4c71-b406-479e5cb80fce}" threadingModel="Apartment" tlbid="{c5a16330-a084-48c9-bc0f-0d0b37a14123}" progid="grdes.GRDesigner.6" description="Grid++Report Designer 6" />
</file>
<file name="gregn6.dll">
<typelib tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" version="6.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
<comClass clsid="{f9364159-6aed-4f9c-8baf-d7c7ed6160a8}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GridppReport.6" description="GridppReport Class" />
<comClass clsid="{1b5ea181-a38d-4f42-88b2-6af74cf6d6c0}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRDisplayViewer.6" description="Grid++Report DisplayViewer 6" />
<comClass clsid="{7fd5dc62-ded0-4138-9c48-55f0a0fe7b66}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRDisplayViewerProps.6" description="GRDisplayViewerProps Class" />
<comClass clsid="{44cbb5de-5afb-4c3d-8f3f-0f70ca5372ad}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRPrintViewer.6" description="Grid++Report PrintViewer 6" />
<comClass clsid="{6ca58cb2-2ad1-4ad0-b3cc-5f5c000bbdee}" threadingModel="Apartment" tlbid="{4018f953-1bfe-441e-8a04-dc8ba1ff060e}" progid="gregn.GRPrintViewerProps.6" description="GRPrintViewerProps Class" />
</file>
</assembly>
修改后,保存文件。
4、将Grid++Report 6新版本的二个DLL文件,复制进Output directory:D:\Program目录中
5、打开Delphi对项目进行编译,在此项环境下的编程后,程序将读取通过将读取HLserver.exe.manifest文件中,标明的Grid++Report 6注册信息。
6、验证程序,可以使用
(1)取消注册,建立一个DelReg.bat文件,内容如下
regsvr32 /u "C:\Grid++Report 6\gregn6.dll"
regsvr32 /u "C:\Grid++Report 6\grdes6.dll"
以管理员身份执行。
7、执行你的项目程序,测试打印成功。
你可以发布程序了。通过向服务器远程上传、客户动态下载后,正常使用,特方便。
说明:发布时,一定要将清单文件HLserver.exe.manifest,同版本的gregn6.dll、grdes6.dl文件和项目EXE文件,四个文件一并发布。