为什么包bpl定义的类无法使用???

mill888 2005-12-07 09:35:32
我作了一个项目组projectgroup1,里面有一个program.exe可执行程序和一个package1.bpl包,然后一块编译。

因为程序的开放性要求,主程序program.exe和package1.bpl在发布后就不再修改和扩展,二次开发人员只能通过package2.bpl进行扩展,所以在package1.bpl定义了一些类和函数,封装在package1.bpl里面供二次开发人员使用。


在这个package1.bpl包里面定义了一个类Twin=class(Tform),然后在这个包里面定义一个函数crewin,这个函数就是根据Twin生成一个实例的函数,就是Twin.create()这个样子。
编译通过。
然后再另外建一个包package2.bpl,这个包是在另外一个项目里的,不是跟projectgroup1一块的。在package2.bpl里面的requires 里面增加package1.bpl,在package2.bpl的里面一个单元unit1里面调用函数crewin,然后编译成功。
在程序program.exe里面loadpackage package2.bpl,这个已经测试多次是成功的。
运行程序program.exe,当运行到调用crewin的时候,出现错误:Resource Twin not found。怎么好像是找不到类Twin。

如果我在Twin定义的包package1的相应单元里面增加(根据网络上的资料说的):
initialization
RegisterClass(Twin);
finalization
UnRegisterClass(Twin);
再编译再运行,还是一样的问题啊。

请问到底要怎么个用法?
...全文
122 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
HjmaAsC 2005-12-28
  • 打赏
  • 举报
回复
需要RegisterClass一下
这是一个功能超强的表达式处理系统,提供16种常规运算符,7种基本数据型,支持数据型自动识别与智能转换,支持变量定义,支持变量式变量名,含宏处理功能,支持数据库访问,提供三百多个各种常规函数,允许运行期自定义函数,开放式函数开发机制允许开发人员自由且容易地扩充自己的函数。系统不仅实现了一般意义上的表达式运算,同时也实现了基本的程序控制逻辑:顺序、分枝和循环,这意味着应用程序可以将许多不稳定的业务需求从源程序内部实现改为表达式系统的外部实现,从而极大程度地提高系统的可维护性。 该系统使用DELPHI开发,提供运行和设计含低级的系,也括高级的非可视化控件,允许开发人员以多种方式来使用本系统。使用该系统可与应用程序完美无缝融合,甚至可以在表达式中直接操纵应用程序的界面元素,如点击按钮等。 此软件的产生最早可追朔到 TURBO Pascal 3.0 的时代,在 TURBO Pascal 6.0 发布后全部按 OO 方式重写,以后从DELPHI 1.0开始,伴随着DELPHI版本的每次升级,本系统也在进行相应的更新和升级,因此,本软件可适用于DELPHI的所有版本。但因为本软件一直是作为《佐尔企业应用辅助开发平台》的一个子系统开发的,独立发行版目前只有D6,D7和D9的,若有需要其它版本的,可与本公司联系。 软件组成━━━━ 本独立发行版核心部分主要由两个组成,ZRExpDx.bpl和ZRExpDBDx.bpl,(x是DELPHI版本号,如ZRExpD7表示DELPHI7.0适用的)。 发布的文件还括开发指南、联机求助文档、示范程序以及使用到的第三方控件等。 安装指南━━━━ 发布文件是一个WinRAR压缩,ZRExpDx.rar,尺寸约3.3M,展开尺寸约13M,其中括以下文件夹: Lib //本系统的所有dcp,dcu文件 Bin //bpl和exe文件(示范程序) Doc //开发指南 Help //联机求助文档 Demo //示范程序源程序文件 OtherDCUs 示范程序用到的第三方控件的dcu文件 OtherBPLs 示范程序用到的第三方控件的bpl文件 Data //示范程序用到的数据文件 Expressions //各种表达式示例文件 Formal //正式版编译的示范程序 安装过程: (1) 将压缩解压到任一文件夹 (2) 启动DELPHI (3) 在DELPHI中安装设计 ZRExpDx.bpl
安装时请按照以下序列: Component->Install Packges-> 选择Discovery.bpl Options->Library->Search Path 中加入搜索路径。 EasyGrid 使用说明: 一、单元格属性; // ************************************************** // EasyGrid 的 Cells[i,j] 属性不同于 StringGrid。 // StringGrid 的 Cells 仅仅是一个字符串,而 EasyGrid // 的 Cells 可以存储丰富的数据型。 // // 使用范例: // EasyGrid1.Cells[1,2].Color := clRed; // 将第一列第二行的一个单元格背景置为红色。 // // !!! 需要注意的是: // 上述语法不会导致网格自动刷新(即结果不会马上反映),因为上述语法 // 实际上是对内存地址直接写入,这样做的好处在于,如果大批量写入数据,这 // 是最快的方法,不会出现慢镜头式的现象。 // 用 EasyGrid1.Colors[1,2] := clRed; 可以实现同样效果并实时刷新, // 但大批量写入数据时速度较慢。 // 对大批量写入数据的处理一般需要使用 AutoUpdate 属性: // EasyGrid1.AutoUpdate := False; // ... 大批量写入数据 // EasyGrid1.AutoUpdate := True; // AutoUpdate 属性的使用似于一个与 DbGrid 关联的 DataSource 控件, // 当 DataSource 内容改变时,需要把 DataSource 的 Enabled 属性置为 False。 // 以防止 DbGrid 出现慢镜头式的现象。 // ************************************************** // ************************************************** // 单元格属性说明如下: TCellInfo = record DataStyle : TDataStyle; // 数据格式 // 可用数据格式为: // TDataStyle = (dsText,dsNumber,dsDate,dsTime,dsFormula); AlignMode : TAlignMode; // 对齐方式 // 可用对齐方式为: // TAlignMode = (taTopLeft, taTop, taTopRight, // taLeft, taCenter, taRight, // taBottomLeft, taBottom, taBottomRight); ReadOnly : Boolean; // 单元格是否可编辑 AutoWordBreak : Boolean; // 文字自动折行 ShowForeText : Boolean; // 显示控制(Default True) // 说明:每个单元格允许存放两个字符串: // ForeText 与 BackText // ShowForeText 属性用于指定该网格显示哪一个字符串 DrawTop : Boolean; // 画顶线 DrawLeft : Boolean; // 画左线 DrawBottom : Boolean; // 画底线 DrawRight : Boolean; // 画右线 // 下面七个属性对于 DataStyle 为 dsNumber (数值型)的网格有效 AllowNegative : Boolean; // 是否允许输入负数 TrailingZero : Boolean; // 是否在小数后面补 0 ZeroNull : Boolean; // 输入数值 0 时是否当作空串处理 ThousandSep : Boolean; // 是否有千分号 MaxLength : Integer; // 最大编辑长度 IntLength : Integer; // 整数部分最大长度 DecLength : Integer; // 小数部分最大长度 LineWidth : Integer; // 边框线宽 PenStyle : TPenStyle; // 线形(TPenStyle 为Delphi定义型) // Number 用于存储额外的数据,甚至可以用 Pointer() // 强制成32位结构指针,使得网格理论上可以挂接任意型的数据 Number : Integer; // 存储数值 Color : TColor; // 网格背景颜色
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。   Bootcfg   bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。   含有下列参数的 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 bootcfg 命令。   用法:   bootcfg /default  设置默认引导项。   bootcfg /add    向引导列表中添加 Windows 安装。   bootcfg /rebuild  重复全部 Windows 安装过程并允许用户选择要添加的内容。   注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。   bootcfg /scan    扫描用于 Windows 安装的所有磁盘并显示结果。   注意:这些结果被静态存储,并用于本次会话。如果在本次会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再次扫描磁盘。   bootcfg /list   列出引导列表中已有的条目。   bootcfg /disableredirect 在启动引导程序中禁用重定向。   bootcfg /redirect [ PortBaudRrate] |[ useBiosSettings]   在启动引导程序中通过指定配置启用重定向。   范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings   hkdsk   创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。   含有下列参数的 chkdsk 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 chkdsk 命令。   vol [drive:] [ chkdsk [drive:] [/p] [/r]   参数  无   如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p   即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r   找到坏扇区并恢复可读取的信息。隐含着 /p 参数。   注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在含 Windows 的驱动器上使用该命令。 Diskpart   创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。   diskpart [ /add |/delete] [device_name |drive_name |partition_name] [size]   参数 无   如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。   /add   创建新的分区。   /delete   删除现有分区。   device_name   要创建或删除分区的设备。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   drive_name   以驱动器号表示的待删除分区。仅与 /delete 同时使用。以下是驱动器名称的范例:   D:   partition_name   以分区名称表示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例:   DeviceHardDisk0Partition1    大小   要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。   范例   下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:   下例将在硬盘上添加一个 20 MB 的分区:   diskpart /add Device HardDisk0 20   Fixboot
VB控件 RMReport7 转:RMReport的使用方法及详解 1、不打印特定的MemoView,套打常用 a.页面设置-->其它-->不打印背景图 b.设置MemoView属性printable=False 2、 如何打印wwDBGrid? 修改rm.inc,如果想支持RX,GIF,JPEG,DimandAccess,Halcyon,DBISAM, EHLib,也需要修改rm.inc //{$DEFINE InfoPower} //修改这行,去掉"//" //{$Ehlib} 3.试用版安装方法(以下假设将文件释放到c:/rm目录中) (1)Tools->Environments Option->Libary->Libary Path中增加: c:/rm/souce c:/rm/bpl $(DELPHI)/Lib $(DELPHI)/Bin $(DELPHI)/Imports $(DELPHI)/Projects/Bpl (2)Component->Install Packages->Add,选bpl/rm_d70.bpl 4.在Delphi IDE中卸载以前的Report Machine版本,然后打开rm_r50.dpk,选"compile", 在打开rm_d50.dpk,选"Install". 分成了Runtime package和Designer package,所以要安装顺序安装 5、单元格的变量格式用代码设置 t = TRMGridReportPage(RMGridReport1.Pages[0]).Grid.Cells[1, 1].View t = TRMMemoView(RMReport1.FindObject('memo1')); t.DisplayFormat := 'N0.001' //数字型 t.DisplayFormat := 'Dyyyy/mm/dd' //日期型 6、两遍报表如何用代码设置 GridReport1.DoublePass := True 7、用代码写数据字典: RMReport1.Dictionary.FieldAliases.Clear; RMReport1.Dictionary.FieldAliases['RMDBDataSet1'] := '动物'; RMReport1.Dictionary.FieldAliases['RMDBDataSet1."Name"'] := '姓名'; 这样在RM的设计器显示为自定义名称,为最终用户提供友好的显示 8、在报表中如何使用变量(或者如何给某个memoview赋值) a.RMVariables在RM_Class.pas中定义,是全局变量,这样定义后就可以在报表中使用变量"var1",例如: RMVariables['变量名称'] := Edit1.Text; b.用报表中数据字典,TRMReport.Dictionary.Variables,需要注意的是,如果变量是字符型的需要用AsString赋值,其他型的用RMReport.Dictionary.Variables['var1'] := 1234,例如: RMReport1.LoadFromFile('1.rls'); RMReport1.Dictionary.Variables.AsString['变量名称'] := Edit1.Text; c. 直接对某个单元格赋值,例如: RMGridReport1.LoadFromFile('1.rls'); TRMGridReportPage(RMGridReport1.Pages[0]).Grid.Cells[1,1].Text := '值'; 如果是RMReport: RMReport1.LoadFromFile('1.rmf'); t := RMReport1.FindObject('Memo1'); if t nil then // var t: TRMView t.Memo.Text := 'dsdsdsds'; d.脚本中直接引用Form的值 procedure Main; begin Memo1.Memo.Text := Form1.Edit1.Text; end; 9、自动换行 主项数据栏Stretched = true 文本框 Stretched = true WordWrap = true 10、RM内置变量(Script),增加中.... a.属性PrintAtAppendBlank=True CurReport.AppendBlanking=True时代表增加空行 在RM中,打印设置只能保存页面边距及打印份数、是否两遍打印以及

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧