老是不成功,报什么EOleSysError错误,这是怎么回事阿?

解决方案 »

  1.   

    要将application.handle传给dll
    dll文件:
    工程文件:
      uses
      Windows,
      Messages,
      SysUtils,
      Variants,
      Classes,
      Graphics,
      Controls,
      Forms,
      Dialogs,
      StdCtrls,
      formdll in 'formdll.pas' {Form1};
    {$R *.res}exports
        showForm;
    begin
    end;
    窗体文件('formdll.pas' ):
    procedure showForm(Ahandle:Thandle);
    var
      dllform:Tform1;
    begin
       application.Handle:=Ahandle;   dllform:=Tform1.Create(application);   dllform.Show;
     
    end;
    调用文件:
    procedure showform(Ahandle:Thandle);stdcall;external 'Prjformdll.dll';
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      showform(Application.Handle);
    end;
      

  2.   

    我自己搞定了,就是因为这个原因:
    如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil);
      

  3.   

    但是动态调用不行阿
    我用注释掉的静态调用是没有问题的
    但是改成动态就出问题了,说1400错,无效的窗口句柄
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,ActiveX;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  TEPC = function(AHandle : THandle):boolean;
      
      THandle = Integer;
    var
      Form1: TForm1;implementation//function NewBrowser(AHandle: THandle):boolean;stdcall;external 'WebBrowser.dll';
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      AHandle : THandle;
      Browser : TEPC;
    begin
      //NewBrowser( Application.Handle);
      AHandle := LoadLibrary('WebBrowser.dll');
      if Handle <> 0 then
      begin
        @Browser := GetProcAddress(AHandle,'NewBrowser');
        if @Browser <> nil then
        begin
          Browser(Application.Handle);
        end;
        FreeLibrary(AHandle);
      end; 
    end;end.
      

  4.   

    >>我自己搞定了
    那恭喜接分
      

  5.   

    我一个Form生成了一个DLL,但是当调用进来的时候,我一个主Form里面要调用好几个这种类
    型的Form,这样,怎么捕捉他们的active和deactive事件 阿?好像只有一个Form里预先编译好的那种Form,才回接收到active和deactive事件的吧,普通的用DLL生成的Form,焦点转换的时候好像是没有反应的,但是我需要作一些操作,这该怎么办阿?