主程序中参数传到bpl里面。
帮忙帮忙。
我先谢谢了。主程序unit Sys_main;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ActnPopup, ToolWin, ActnMan, ActnCtrls,
  ActnList, XPStyleActnCtrls, StdStyleActnCtrls, ExtCtrls, jpeg, ImgList,
  StdActns, ComCtrls;type
  TSysMain = class(TForm)
    Image1: TImage;
    Image2: TImage;
    ToolBar2: TToolBar;
    ToolButton9: TToolButton;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    OpenDialog: TOpenDialog;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    FileNewItem: TMenuItem;
    FileOpenItem: TMenuItem;
    FileCloseItem: TMenuItem;
    FileSaveItem: TMenuItem;
    FileSaveAsItem: TMenuItem;
    N1: TMenuItem;
    FileExitItem: TMenuItem;
    Edit1: TMenuItem;
    CutItem: TMenuItem;
    CopyItem: TMenuItem;
    PasteItem: TMenuItem;
    Window1: TMenuItem;
    WindowCascadeItem: TMenuItem;
    WindowTileItem: TMenuItem;
    WindowTileItem2: TMenuItem;
    WindowMinimizeItem: TMenuItem;
    WindowArrangeItem: TMenuItem;
    Help1: TMenuItem;
    HelpAboutItem: TMenuItem;
    ActionList1: TActionList;
    FileNew1: TAction;
    FileOpen1: TAction;
    FileClose1: TWindowClose;
    FileSave1: TAction;
    FileSaveAs1: TAction;
    FileExit1: TAction;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    WindowCascade1: TWindowCascade;
    WindowTileHorizontal1: TWindowTileHorizontal;
    WindowTileVertical1: TWindowTileVertical;
    WindowMinimizeAll1: TWindowMinimizeAll;
    WindowArrangeAll1: TWindowArrange;
    HelpAbout1: TAction;
    ImageList1: TImageList;
    Button1: TButton;
    procedure ToolButton9Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
     aform: TForm;
    { Private declarations }
  public
    FPackageHandle: Integer;
    stest:string;
    { Public declarations }
  end;var
  SysMain: TSysMain;implementation
uses uPkgTls;
{$R *.dfm}procedure TSysMain.Button1Click(Sender: TObject);
begin
  showmessage(upkgtls.ddd);
end;procedure TSysMain.FormCreate(Sender: TObject);
begin
//  Application.CreateForm(TGlbData, GlbData);
end;procedure TSysMain.ToolButton1Click(Sender: TObject);
begin 
   UnloadAddins;
end;
        
procedure TSysMain.ToolButton9Click(Sender: TObject);
var  AClass: TClass;
begin
  LoadAddinPackage('xs1000i_getdata', '.\bin\xs_1000i.bpl');
  CreateFormByClassName('TfrxsGetdata');
  upkgtls.ddd:='sss';
  stest:='asdf';
end;
end.
bpl 程序
我想在下面的bpl程序中接到主程序的参数不知道怎样做呢?unit xs1000i_GetData;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TfrxsGetdata = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    ss: string;
    { Public declarations }
  end;var
  frxsGetdata: TfrxsGetdata;implementation
uses upkgtls,sys_main;
{$R *.dfm}procedure TfrxsGetdata.Button1Click(Sender: TObject);
begin
  edit1.Text:=sysmain.stest;
end;procedure TfrxsGetdata.Button2Click(Sender: TObject);
begin
  edit1.Text:=upkgtls.ddd;
end;procedure TfrxsGetdata.Button3Click(Sender: TObject);
begin
  edit1.Text:=ss;
end;procedure TfrxsGetdata.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//   upkgtls.UnloadAddins;
end;initialization
  registerclass(TfrxsGetdata);finalization
  UnRegisterClass(TfrxsGetdata);end.
bpl程序
unit uPkgTls;interfaceuses
  Windows, SysUtils, Classes, Forms, Controls, Db, DBTables;type
  TCAR_Field = record
    STKNO: String;
    CARPH: String;      // 匡拒ó贺虏絏
    CARNAME: String;    // 匡拒ó贺(いゅ)嘿
    CARNAME_E: String;  // 匡拒ó贺(璣ゅ)嘿
    CARYEAR: String;    // 
    CC: String;         // CC 计
  end;{ Package }
  function GetAddinPackages: TStrings;
  function LoadAddinPackage(const PackageID, FileName: string): HMODULE;
  procedure UnloadAddinPackage(ModuleInstance: HMODULE); overload;
  procedure UnloadAddinPackage(const PackageID: string); overload;
  procedure UnloadAddins;{ Form }
  function FindTable(const TableName: string): TTable;
  procedure CreateDataModule(dm: TComponentClass; var dmVar);
  function CreateDataModuleByClassName(const ClassName: string): TDataModule;
  function CreateFormByClassName(const ClassName: string): TCustomForm;
  function ShowModalFormByClassName(const ClassName: string): integer;var
  COMPANY_NO: String;
  AddinPackages: TStrings;
  ddd:string;
  const tests:string='test';
implementationresourcestring
  sErrorCreateForm = 'Error Message';function FindTable(const TableName: string): TTable;
var i, j: Integer;
    A: TDataModule;
begin
  Result := nil;
  for i := 0 to Application.ComponentCount -1 do
  begin
    if Application.Components[i] is TDataModule then
    begin
      A := Application.Components[i] as TDataModule;
      for j := 0 to A.ComponentCount -1 do
      begin
        if A.Components[j].Name = TableName then
        begin
          Result := A.Components[j] as TTable;
          Break;
        end;
      end;
      Break;
    end;
  end;
end;procedure CreateDataModule(dm: TComponentClass; var dmVar);
begin
  Application.CreateForm(dm, dmVar);
end;function CreateDataModuleByClassName(const ClassName: string): TDataModule;
var dmTemp: TDataModule;
    AClass: TPersistentClass;
begin
  Result := nil;
  AClass := GetClass(ClassName);
  if (AClass <> nil) then
  begin
    dmTemp := TComponentClass(AClass).Create(Application) as TDataModule;
//    dmTemp.Name := 'DataModule1';
    Result := dmTemp;
  end;
end;function GetAddinPackages: TStrings;
begin
  Result:= AddinPackages;
end;function LoadAddinPackage(const PackageID, FileName: string): HMODULE;
var
  ModuleInstance: HMODULE;
begin
  ModuleInstance := GetModuleHandle(PChar(ExtractFileName(FileName)));
  if ModuleInstance = 0 then
  begin
    ModuleInstance := LoadPackage(FileName);
 
    if AddinPackages.IndexOfObject(Pointer(ModuleInstance)) < 0 then
      AddinPackages.AddObject(UpperCase(PackageID), Pointer(ModuleInstance));
  end;
  Result := ModuleInstance;
end;procedure UnloadAddInPackage(ModuleInstance: HMODULE);
var
  i: Integer;
  M: TMemoryBasicInformation;
begin
  { Make sure there aren't any instances of any of the classes from Module
    instantiated, if so then free them.  (this assumes that the classes are
    owned by the application) }
  for i := Application.ComponentCount - 1 downto 0 do
  begin
    VirtualQuery(GetClass(Application.Components[i].ClassName), M, SizeOf(M));
    if (ModuleInstance = 0) or (HMODULE(M.AllocationBase) = ModuleInstance) then
      Application.Components[i].Free;
  end;
  UnRegisterModuleClasses(ModuleInstance);
  UnloadPackage(ModuleInstance);
end;procedure UnloadAddinPackage(const PackageID: string);
var
  i: integer;
begin
  i := AddinPackages.IndexOf(UpperCase(PackageID));
  if i < 0 then
    Exit;  UnloadAddinPackage(HMODULE(AddinPackages.Objects[i]));  { Maintain loaded package list }
   AddinPackages.Delete(i);
end;procedure UnloadAddins;
var
  i: integer;
begin
  for i := 0 to AddinPackages.Count-1 do
    UnloadAddinPackage(HMODULE(AddinPackages.Objects[i]));
  AddinPackages.Clear;
end;function CreateFormByClassName(const ClassName: string): TCustomForm;
var
  AClass: TPersistentClass;
begin
  { Note that TApplication "owns" this form and thus it must be freed prior
    to unloading the package }
  AClass := GetClass(ClassName);
  if AClass <> nil then
    Result := TComponentClass(AClass).Create(Application) as TCustomForm
  else
    raise Exception.CreateFmt(sErrorCreateForm, [ClassName]);
end;function ShowModalFormByClassName(const ClassName: string): integer;
var
  frm: TCustomForm;
begin
  frm := CreateFormByClassName(ClassName);
  try
    Result := frm.ShowModal;
  finally
    frm.Release;
  end;
end;initialization
  AddinPackages := TStringList.Create;finalization
  AddinPackages.Free;end.

解决方案 »

  1.   

    主程序中把参数传递给bpl里面。
    能行的话bpl中也把参数传递给主程序里面。我做的这个程序打开bpl窗体后把值传过去,但是在bpl子窗体中点击查看时候是空的,没有值。
    不知道在那里写错。请大虾指点。
      

  2.   

    可以先导入BPL,然后在BPL中的窗体创建的时候,传入参数值~
      

  3.   

    BPL窗体创建的时候怎么传入参数值?
      

  4.   

    做个共享BPL包 数据
    exe 加载 这个 共享BPL包 数据
    BPL 也加载这个 共享包数据 就可以 DELPHI 也是通过这样实现BPL之间的共享的
      

  5.   

    EXE  --- OPTIONS  ----   BUILE WITH RUNTIME  PACKAGES   加载共享包进去
    BPL  --- OPTIONS  ----   BUILE WITH RUNTIME  PACKAGES   加载共享包进去