问题,为何同样的代码,在d6下不会报错,在d7下却会报错(运行下报错).os 环境是一样的。代码如下(关于动态调用DLL 中的窗体的代码):
-----调用代码-------
unit uMainFrm;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB;type
  InvokeDLLForm = function(App: TApplication; Scr: TScreen): TForm;
  TfrmMain = class(TForm)
    Button1: TButton;
    ADOCon1: TADOConnection;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  frmMain: TfrmMain;
  DLLForm: TForm;
implementation{$R *.dfm}procedure TfrmMain.Button1Click(Sender: TObject);
var
  DLLHandle: THandle;
  DLLSub: InvokeDLLForm;
begin
  DLLHandle := LoadLibrary('BOMI01C.dll');
  if DLLHandle <> 0 then
  begin
    @DLLSub := GetProcAddress(DLLHandle, 'CreateForm');
    if Assigned(DLLSub) then
    begin
      DLLForm := DLLSub(Application, Screen);
    end;
  end;
end;
end.-----DLL 代码-----------------uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,adodb;type
  TfrmBOM = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
   { Public declarations }
  end;  procedure CreateForm(MainForm: TForm);var
  frmBOM: TfrmBOM;implementation{$R *.dfm}procedure CreateForm(MainForm: TForm);
var
  p: ^LongInt;
  DllForm: TfrmBom;
begin
  p := @(Application.MainForm);
  P^ := LongInt(MainForm);
  DllForm := TfrmBom.Create(MainForm);
  DllForm.Show;
end;procedure TfrmBOM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := cafree;
end;end.library BOMI01C;uses
  SysUtils,
  forms,
  windows,
  Classes,
  uBOMI01 in 'uBOMI01.pas' {frmBOM};
{$R *.res}
exports
  CreateForm;begin
end.