dll的菜鸟问题!!!
Dll部分
library Demos;
uses
SysUtils,
Classes;
{$R *.res}
function ReturnWord(Str1,Str2: PChar): String;stdcall;
var
temp1,temp2: String;
begin
temp1 := StrPas(Str1);
temp2 := StrPas(Str2);
if temp1>=temp2 then
Result := temp1
else
Result := temp2;
end;
exports
ReturnWord;
begin
end.
调用部分
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
function ReturnWord(Str1,Str2: PChar): String;stdcall; external 'Demos.dll';
{$R *.dfm}
////以下为动态调用dll
procedure TForm1.Button1Click(Sender: TObject);
var
Func : function (Str1,Str2: PChar): String;stdcall;
HD : HWND;
begin
HD := LoadLibrary(PChar('Demos.dll'));
if HD<>0 then
begin
Func := GetprocAddress(HD,PChar('ReturnWord'));
if Assigned(Func) then
edit1.Text := Func(PChar('abcd'),PChar('aedt'));
end;
FreeLibrary(HD);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text := ReturnWord(PChar('abcd'),PChar('asdw'));
end;
end.
结果我不管是静态调用还是动态都出错,各位高手帮我看看吧!!!
问题点数:40、回复次数:8Top
1 楼ybli(不懂)回复于 2002-01-11 10:29:55 得分 0
什么提示?Top
2 楼amiao(新湖居士)回复于 2002-01-11 10:30:20 得分 0
报错为'Invalid pointer operation'Top
3 楼jackystar(我)回复于 2002-01-11 10:38:29 得分 20
返回值不能用STRING ,改为PCHAR吧
要用就要引用单元DELPHIMM
DLL和调用单元中都要。Top
4 楼amiao(新湖居士)回复于 2002-01-11 10:44:58 得分 0
to 我: 谢谢,我看看,等会儿给分Top
5 楼amiao(新湖居士)回复于 2002-01-11 10:50:46 得分 0
to 我:对了,谢谢你Top
6 楼amiao(新湖居士)回复于 2002-01-11 10:53:08 得分 0
不行呀,delphi不认DELPHIMM单元Top
7 楼fei1995(三板斧)回复于 2002-01-11 11:03:50 得分 20
function ReturnWord(Str1,Str2: PChar): String;stdcall;
换成
function ReturnWord(Str1,Str2: PChar): PChar;stdcall;
DLL中不支持STRING传输
Top
8 楼amiao(新湖居士)回复于 2002-01-27 17:05:36 得分 0
现在才给分,不好意思Top




