我想在主程序中非阻塞地调用多个Dll,各个Dll一被调用即开始运行。
目前想到的一个方法是对一个DLL起一个线程,然后在线程内调用dll。
但对线程不太熟悉而且容易出错,有没其它更好的实现方式?

解决方案 »

  1.   

    隐式调用的话,因为程序一运行就已经加载了所有的DLL
    在主程序中应该也不会很慢,也不需要多线程
    ////////////////////////////////////
    DLL源代码:
    library Project2;uses
    SysUtils,
    Classes,{$R *.RES}
    var
    ccc: Pchar;
    procedure InputCCC(Text: Pchar);stdcall;
    begin
    ccc := Text;
    end;exportsInputCCC,begin
    end.调用方源代码:
    unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls;type
    TForm1 = class(TForm)
    Button1: TButton;Edit1: TEdit;
    procedure Button1Click(Sender: TObject);private
    { Private declarations }
    public
    { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.DFM}
    procedure InputCCC(Text: Pchar);stdcall;External'project2.dll';procedure TForm1.Button1Click(Sender: TObject);
    var
    Text: Pchar;
    begin
    Text := Pchar(Edit1.Text);InputCCC(Text);//为了实验DLL中的全局变量是否在各个应用程序间共享
    end;
      

  2.   

    to linzhengqun(风):
    感觉这种方法也不适合,因为程序中各个dll是同时运行的,所以比如我在Button1Click调用dll1那dll2就停在那儿了。
      

  3.   

    当所有DLL被隐式调进来后,你就可以如果调主程序里面的函数一样调Dll的函数的
    那么你想同时调用里面的Dll,则可以用线程了,在不同纯程中调用不同的DLL
    这样就可以达到同时调用Dll了。
    //定义一个线程
      TAccountThread=class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;