用dll做非模式form的时候报错 老是不成功,报什么EOleSysError错误,这是怎么回事阿? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要将application.handle传给dlldll文件:工程文件: uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, formdll in 'formdll.pas' {Form1};{$R *.res}exports showForm;beginend;窗体文件('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; 我自己搞定了,就是因为这个原因:如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil); 但是动态调用不行阿我用注释掉的静态调用是没有问题的但是改成动态就出问题了,说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. >>我自己搞定了那恭喜接分 我一个Form生成了一个DLL,但是当调用进来的时候,我一个主Form里面要调用好几个这种类型的Form,这样,怎么捕捉他们的active和deactive事件 阿?好像只有一个Form里预先编译好的那种Form,才回接收到active和deactive事件的吧,普通的用DLL生成的Form,焦点转换的时候好像是没有反应的,但是我需要作一些操作,这该怎么办阿? 帮帮忙啊``本人对DEPHI知之甚少``哪位好心人帮帮我啦``具体如下 如何备份和恢复ACCESS数据库(不是直接复制哦) 请问哪里有Delphi6组件大全下载?将另以100分相送,在线等…… delphi中有没有this指针啊? 请问个简单问题,想要分的进!!!!!!!!!!!!!! 初次使用ado的小问题。 Delphi .net出来了吗? 存储过程的参数怎么设 请教几个基础问题?先谢谢了 150分求解STRINGGRID问题 高手请帮忙,窗体调用问题!谢了~ 一女生裸泳遭偷窥全过程[图]
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;
如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil);
我用注释掉的静态调用是没有问题的
但是改成动态就出问题了,说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.
那恭喜接分
型的Form,这样,怎么捕捉他们的active和deactive事件 阿?好像只有一个Form里预先编译好的那种Form,才回接收到active和deactive事件的吧,普通的用DLL生成的Form,焦点转换的时候好像是没有反应的,但是我需要作一些操作,这该怎么办阿?