关于DLL中显示模式窗体的小问题。(50分)

  • 主题发起人 主题发起人 大花鸡
  • 开始时间 开始时间

大花鸡

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在学DLL中显示模式窗体时有个问题,下面是DLL的代码。
library ShowFormLib;
uses
ShareMem,
SysUtils,
Classes,
EditForm in 'EditForm.pas' {Form1};
{$R *.res}
exports
ShowEditForms;
begin
end.

下面是DLL中的窗体:
unit EditForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type

TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function ShowEditForms(AHandle:THandle;ACaption:String):String;StdCall;
implementation
{$R *.dfm}
function ShowEditForms(AHandle:THandle;ACaption:String):String;StdCall;
var
Form1: TForm1;
begin
Application.Handle:=AHandle;
Form1:=TForm1.Create(application);
try
Form1.Caption:=ACaption;
Form1.ShowModal;
Result:=Form1.Edit1.Text;
finally
Form1.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

end.
最后是主程序:
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TShowEditForms=function (AHandle:THandle;ACaption:String):String;StdCall;
EDLLLoadError = class(Exception);
TMform = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Mform: TMform;
implementation
{$R *.dfm}
procedure TMform.Button1Click(Sender: TObject);
var
LibHandle:THandle;
ShowEditForms:TShowEditForms;
begin
LibHandle:=LoadLibrary('ShowFormLib.dll');
try
if LibHandle=0 then
raise EDLLLoadError.Create('Unabled to Find the DLL file');
@ShowEditForms:=GetProcAddress(LibHandle,'ShowEditForms');
if not (@ShowEditForms=nil) then
label1.Caption:=ShowEditForms(Application.Handle,caption)
else
RaiseLastWin32Error;
finally
FreeLibrary(Libhandle);
end;
end;

end.
总是出现错误说找不到程序,为什么?代码是:
System Error.Code:127.
找不到指定程序。
 
ShowFormLib.dll 要放在和exe同一个目录下,或者path指定的目录下,比如windows/system
 
程序没有什么问题啊。
你跟踪一下是不是load时找不到dll。如果是就像Pipi.说的做。
 
能找到DLL文件,可是好像是在主程序中的 if not(@ShowEditForms=nil) then
...中的问题。
而且它们是在同一目录下呀。
 
面是DLL中的窗体
Form1.ShowModal;-----》Form1.Show;
改了试试
关注!
 
那句话应该没有问题!
你把调用函数那句参数直接给值试一试
s := ShowEditForms(Application.Handle,'aaa');
也不知自己在说什么,因为我找不到哪有问题, :-(
 
找到了,是在EditForm单元中少了WinProcs单元。现在没什么事了。谢谢大家了。分分吧。
 
原来如此~ [:)][:)][:)]
 
后退
顶部