我的程序是这样的:
//dll form
library Calendar;uses
SysUtils,
Classes,
DllForm1 in 'DllForm1.pas' {DllForm};exports
ShowCalendar;{$R *.res}begin
end.//Unit DllForm1
unit DllForm1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, DB, ADODB ,ActiveX, StdCtrls;type
TDllForm = class(TForm)
MonthCalendar1: TMonthCalendar;
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;var
DllForm: TDllForm;
function ShowCalendar(AHandle: THandle; ACaption: pchar): pchar;
implementation{$R *.dfm}function ShowCalendar(AHandle: THandle; ACaption: pchar): pchar;
var
DF : TDllForm;
begin
Application.Handle := AHandle ;
DF := TDllForm.Create(Application);
showmessage(Acaption);
try
DF.ShowModal;
Result := 'result';
finally
DF.Free;
end;
end;
end.//调用dll的模块
program CALLPRJ;uses
Forms,
CALLER in 'CALLER.pas' {Form1};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.//Unit caller
unit CALLER;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, StrUtils;type
TForm1 = class(TForm)
Label1: TLabel;
Button3: TButton;
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1; type
ShowCalendar = function(AHandle: THandle; Acaption : pchar ): pchar;stdcall;
implementation{$R *.dfm}procedure TForm1.Button3Click(Sender: TObject);
var
OH : THandle;
sc: ShowCalendar;
begin
OH := LoadLibrary('Calendar.dll');
try
if OH<>0 then
@sc := GetProcAddress(OH,'ShowCalendar');
if not (@sc=nil) then
label1.Caption := sc(Application.Handle,pchar('hhh'))
else
RaiseLastWin32Error;
finally
FreeLibrary(Oh);
END;
end;end.我的问题是,在Unit DllForm1的showmessage(Acaption)中,无法将‘hhh’显示出来,请各位高人指点,谢谢!
//dll form
library Calendar;uses
SysUtils,
Classes,
DllForm1 in 'DllForm1.pas' {DllForm};exports
ShowCalendar;{$R *.res}begin
end.//Unit DllForm1
unit DllForm1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, DB, ADODB ,ActiveX, StdCtrls;type
TDllForm = class(TForm)
MonthCalendar1: TMonthCalendar;
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;var
DllForm: TDllForm;
function ShowCalendar(AHandle: THandle; ACaption: pchar): pchar;
implementation{$R *.dfm}function ShowCalendar(AHandle: THandle; ACaption: pchar): pchar;
var
DF : TDllForm;
begin
Application.Handle := AHandle ;
DF := TDllForm.Create(Application);
showmessage(Acaption);
try
DF.ShowModal;
Result := 'result';
finally
DF.Free;
end;
end;
end.//调用dll的模块
program CALLPRJ;uses
Forms,
CALLER in 'CALLER.pas' {Form1};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.//Unit caller
unit CALLER;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, StrUtils;type
TForm1 = class(TForm)
Label1: TLabel;
Button3: TButton;
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1; type
ShowCalendar = function(AHandle: THandle; Acaption : pchar ): pchar;stdcall;
implementation{$R *.dfm}procedure TForm1.Button3Click(Sender: TObject);
var
OH : THandle;
sc: ShowCalendar;
begin
OH := LoadLibrary('Calendar.dll');
try
if OH<>0 then
@sc := GetProcAddress(OH,'ShowCalendar');
if not (@sc=nil) then
label1.Caption := sc(Application.Handle,pchar('hhh'))
else
RaiseLastWin32Error;
finally
FreeLibrary(Oh);
END;
end;end.我的问题是,在Unit DllForm1的showmessage(Acaption)中,无法将‘hhh’显示出来,请各位高人指点,谢谢!
function ShowCalendar(AHandle: THandle; ACaption: pchar): pchar;后面是没有Stdcall的,而你的程序里面是有的,不一致,就不会出来了
function ShowCalendar(AHandle: THandle; ACaption: pchar): pchar;export;stdcall;