标签: bpl

获取给定DLL,EXE或BPL所需的BPL列表

我想知道是否有人知道一种优雅的方法来确定给定(编译)的DLL,EXE或BPL所需的BPL.

我不确定这是否可能只是简单地扫描二进制文件引用.bpl文件名(这可能容易出现误报).

理想情况下,我想返回一个TStringList甚至以逗号分隔的内容,String其中包含所有必需的.bpl文件的名称.

delphi packages bpl runtime-packages

8
推荐指数
1
解决办法
1957
查看次数

Delphi XE:构建软件包时出现"永不构建软件包必须重新编译"/"F2084内部错误:U10346"错误

我正在尝试构建一个包含DWS编译器的包(包A).它工作,但当我有一个第二个包(包B),需要包A,包含任何使用 DWS特定单位的单位,我得到错误:

[DCC致命错误] E2225永不建立包'包A'必须重新编译

如果我将包A更改为按需重新编译,则错误不会消失.我反而得到了

[DCC致命错误] F2084内部错误:U10346

在同一点上.

我在http://code.google.com/p/dwscript/issues/detail?id=419上发布了一个错误报告,看起来问题在作者端无法重现,这意味着我的问题出现了问题.结束.他提出了一些有用的建议:"我有时会因为流浪的DCU而看到这个错误."

即使在重新启动IDE和计算机之后,搜索和删除可能相关的所有DCU也无法解决问题.

在编译过程中使用Process Monitor在BDS上运行跟踪并未显示任何看起来相关的内容.

有没有人对如何追踪这个有任何想法?使用Delphi XE,更新1.

交叉发布到Delphi论坛.让我们先看看谁提出了解决方案.

delphi bpl delphi-xe

8
推荐指数
1
解决办法
8925
查看次数

Delphi项目需要运行时包,即使关闭运行时包

如果路径中没有一些运行时包,我的Delphi7项目将无法在我的客户端计算机上运行.例如rtl70.bpl

我有Build未运行的运行时包,所以它们不应该被编译到exe中吗?

编辑:项目使用Jedi包(TJvPlugin)并运行程序没有安装任何插件工作正常.在我添加插件后,bpl未找到的错误重新出现.好像不得不忍受额外的包裹.

delphi packages bpl

6
推荐指数
2
解决办法
3596
查看次数

当我启动Delphi时,Delphi包没有加载

我正在自己的包装上工作.然后,当我正在处理我错误地点击消息" 不要在下一个Delphi启动时加载此包 " ...

即使我卸载,清理我的包...在我重新编译并成功重新安装后:Delphi向我显示我的组件已成功编译和注册的消息(已识别并添加了一些新组件:TMyComponents).

我"希望"当我再次加载我的测试项目时,我的组件仍然会出现在我的表单上,但是我收到的消息是"找不到类TMyComponent.忽略错误并继续?注意:这可能会删除组件或丢失的属性值"

然后我检查菜单:"组件/安装包",我的包出现在列表中,但它是"未选中".如果我手动检查它并加载我的项目,我的组件就在那里,一切都好.如果我重新启动delphi,程序包将再次取消选中并仍然被禁用.

当我像往常一样启动Delphi时,如何重新激活此包以加载? (DELPHI-2009)

delphi components bpl delphi-2009 package

6
推荐指数
1
解决办法
1863
查看次数

找不到rtl100.bpl吗?

我正在从TMS学习组件。我得到了“ ... rtl100.bpl找不到...”。如果我使用包含“ rtl”的“使用运行时程序包构建”,可能会发生此错误。

rtl100.bpl在哪里(我正在使用D2007)?我该怎么办才能解决此错误?

delphi bpl

5
推荐指数
1
解决办法
7149
查看次数

外部模块实现

为DELPHI应用程序实现外部模块系统的最佳方法是什么?

我真正需要的是非常基本的:

  • 主APP检测模块是否存在并加载(运行时)
  • 模块可以存储表单
  • 模块可以存储DataModule
  • 模块可以存储代码

我需要在其他表单中使用商店表单,并且只能作为standAlone使用

我用的是这样的东西

        if Assigned(pNewClass) then begin
            Application.CreateForm(pNewClass, _lFrm);
            _lFrm.Hide;
            _lFrm.BorderStyle := bsNone;
            _lFrm.Parent := pBasePNL //(TPanel);
            _lFrm.Align := alClient;
        end;
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个TForm,但将它放在TPanel中.

对于DataModules,我通常存储ImageLists,因此ideia是改变应用程序ICO只是改变外部模块.

那么实现这一目标的最佳方法是什么?

看看运行时BPL,但似乎不明白如何做到这一点.谢谢.

更新:.....................................

在阅读了一些相关的问题和答案后,我想我找到了答案和解决方案.

http://edn.embarcadero.com/article/27178

这篇文章是旧的东西,但非常简单.

那么逻辑就在那里我似乎没有得到它来显示表格

我只是测试例子2

它加载BPL,但没有得到表单:

AClass := GetClass('TForm2');
Run Code Online (Sandbox Code Playgroud)

总是检索'nil'

但BPL注册时:

RegisterClass(TForm2);
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助这个.

delphi resources plugins module bpl

5
推荐指数
1
解决办法
1141
查看次数

访问Delphi BPL中的公共方法和属性

我有一个应用程序加载一个简单形式的BPL.

此表单是主应用程序的可选选项.

BPL正确加载,表单显示正确,但我不知道如何访问bpl中表单的公共方法和属性.

有谁可以提供一个简单的例子?

我的代码:

// Load the BPL on aplication Load
LoadPackage( 'About.bpl' );

// CAll for TForm1 inside the About.BPL
var
  AClass: TClass;
  AForm: TForm;
begin

    AClass := GetClass('TForm1');
    if AClass <> nil then
  begin
        Application.CreateForm(TComponentClass(AClass), AForm);
        AForm.Show;
    end;

// The unit TForm1 inside the BPL package
unit Unit1;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

type
    TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
    private
        { Private declarations }
    public …
Run Code Online (Sandbox Code Playgroud)

delphi module bpl

5
推荐指数
1
解决办法
1758
查看次数

获取BPL文件名

从BPL中,是否可以获得自己的文件名?例如C:\ foo\bar.bpl

(动态加载和delphi7,如果重要的话)

delphi bpl

4
推荐指数
1
解决办法
935
查看次数

动态加载BPL的共享代码/传递对象

我正在考虑使用动态加载BPL并将主应用程序中的对象实例传递给BPL中的方法.这造成应用程序和BPL使用的问题单元.

我写了一个小小的原型,它做了这个,并很好奇Delphi如何内部管理应用程序中定义的类与BPL之间的差异.

例如,说一个基本的Widget类,如:

TmyWidget = class
private
  fId:Integer;
  fDescription:String;
public
  procedure DoSomething1();
end;
Run Code Online (Sandbox Code Playgroud)

现在,应用程序和BPL是使用包含TmyWidget类的单元构建的.之后,TMyWidget中的某些内容发生了变化,应用程序被重建,但是BPL不是(反之亦然.)我添加了另一个方法DoSomething2()并在应用程序中创建了一个TmyWidget实例并将其传递给BPL进行处理并在基本的例子,它的工作原理.但它显然充满了潜在的问题.

如果另一个动态加载的BPL也使用TmyWidget,那么事情变得更加有趣.它似乎工作,但它绝对不是理想的.

主要问题是 - 如何通常将对象传递给主应用程序和DLL或BPL?我以前从来没有尝试过,而且可能有充分的理由,但我有这个想法适合这种方法......

我想最好的方法是序列化对象并将这些字节传递并在DLL/BPL中反序列化,此过程注意到主机和动态加载模块之间可能存在的版本差异,但我希望新的SimpleSharedMem选项可能会带来这个新功能而没有序列化的开销,但它似乎不是很有用,除非你严格保持app和dll重建任何共享代码更改......但在这个原型中,应用程序将保持相当稳定并且动态加载的模块将经常更改,并将功能添加到TmyWidget.(服务器应用程序充当基于客户端请求构建TmyWidget的工厂,应用程序将实例传递给各个模块进行处理.)

delphi bpl

4
推荐指数
2
解决办法
3281
查看次数

是否可以单独根据BPL/DCP构建针对BPL/DCP的EXE项目,其中"Build With Runtime Packages"未经检查?

我有一个BPL项目(有一些基础东西)和一个EXE项目,它在其搜索路径中有另一个项目输出的位置(BPL和DCP).当使用"Build With Runtime Packages"构建EXE项目时,它构建正常.但是,它需要我部署EXE和BPL.到现在为止还挺好.

因为我宁愿只部署EXE(无论它变大),我猜我只是取消选中"Build With Runtime Packages"并且就是这样,但事实并非如此.它不会构建,并开始抱怨缺少的类.我可以编译EXE项目的唯一方法是将实际BPL项目的DCU路径添加到EXE项目的搜索路径中.我可以这样做,但为什么我被迫指向DCU?德尔福不能把它们从BPL中拿走吗?这不只是一个品味的问题,如果我走这条路,并链接到DCU,当谈到属于表格的DCU时,它会询问我表格DFM,迫使我也将我的来源文件夹包含在EXE中项目的搜索路径,现在它们似乎正在编译,这是令人望而却步的.每次我想编译我的EXE项目时,我都无法重新编译我的BPL项目代码库.

我希望我已经说清楚了.

如何实现标题中提出的任何帮助表示赞赏.

谢谢.

delphi build bpl dcu delphi-10.1-berlin

4
推荐指数
1
解决办法
1024
查看次数