关于多Dll运行的问题 我想在主程序中非阻塞地调用多个Dll,各个Dll一被调用即开始运行。目前想到的一个方法是对一个DLL起一个线程,然后在线程内调用dll。但对线程不太熟悉而且容易出错,有没其它更好的实现方式? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 隐式调用的话,因为程序一运行就已经加载了所有的DLL在主程序中应该也不会很慢,也不需要多线程////////////////////////////////////DLL源代码:library Project2;usesSysUtils,Classes,{$R *.RES}varccc: Pchar;procedure InputCCC(Text: Pchar);stdcall;beginccc := Text;end;exportsInputCCC,beginend.调用方源代码:unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Edit1: TEdit;procedure Button1Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}procedure InputCCC(Text: Pchar);stdcall;External'project2.dll';procedure TForm1.Button1Click(Sender: TObject);varText: Pchar;beginText := Pchar(Edit1.Text);InputCCC(Text);//为了实验DLL中的全局变量是否在各个应用程序间共享end; to linzhengqun(风):感觉这种方法也不适合,因为程序中各个dll是同时运行的,所以比如我在Button1Click调用dll1那dll2就停在那儿了。 当所有DLL被隐式调进来后,你就可以如果调主程序里面的函数一样调Dll的函数的那么你想同时调用里面的Dll,则可以用线程了,在不同纯程中调用不同的DLL这样就可以达到同时调用Dll了。//定义一个线程 TAccountThread=class(TThread) private { Private declarations } protected procedure Execute; override; end; 急求: 如何调试 delphi编写的后台服务程序 奇怪错误 :a component named *** already exists devexpress的orgchart在生成组织结构图后,如何打印或导出? 怎样注册FLATSTYLE组件? 键盘码???? Delphi工程的路径是在哪里指定? 应用程序错误:应用程序发生异常未知的软件异常(0x0eedfade),位置为0x77e69601. :( 怎么改 鼠标CLICK了哪个对象? 如何在桌面上创建按钮? 帮我看看这段代码 软件开发QQ群:5053624 欢迎高手们加入 求思路,DELPHI倉位圖的創建,根據不同的值顯示不同顏色
在主程序中应该也不会很慢,也不需要多线程
////////////////////////////////////
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;
感觉这种方法也不适合,因为程序中各个dll是同时运行的,所以比如我在Button1Click调用dll1那dll2就停在那儿了。
那么你想同时调用里面的Dll,则可以用线程了,在不同纯程中调用不同的DLL
这样就可以达到同时调用Dll了。
//定义一个线程
TAccountThread=class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;