动态库调用
请把VC的代码改为Delphi
BOOL _stdcall GetCenterNumber(char* strCenterNumber);
BOOL _stdcall SetCenterNumber(const char* strCenterNumber);我的写法是
function SetCenterNumber(strCenterNumber:PChar):bool;stdcall;external 'smspdu.dll' name 'SetCenterNumber';
function GetCenterNumber(strCenterNumber:PChar):bool;stdcall;external 'smspdu.dll' name 'GetCenterNumber';procedure TForm1.Button1Click(Sender: TObject);
var
S:PChar;
i:bool;
ss:String;
begin
new(S);
i:=GetCenterNumber(S);
if i then//以上通过,跟踪时看到S为正确的值
begin
SS:=PChar(S);//此处报错,出现CPU调试窗体。
Memo1.Lines.Add(ss);
end; i:=SetCenterNumber('123456');//此处报错,但i为真
if i then
Memo1.Lines.Add('Center OK')
else
Memo1.Lines.Add('Center Error');
dispose(S);
end;请赐教!
请把VC的代码改为Delphi
BOOL _stdcall GetCenterNumber(char* strCenterNumber);
BOOL _stdcall SetCenterNumber(const char* strCenterNumber);我的写法是
function SetCenterNumber(strCenterNumber:PChar):bool;stdcall;external 'smspdu.dll' name 'SetCenterNumber';
function GetCenterNumber(strCenterNumber:PChar):bool;stdcall;external 'smspdu.dll' name 'GetCenterNumber';procedure TForm1.Button1Click(Sender: TObject);
var
S:PChar;
i:bool;
ss:String;
begin
new(S);
i:=GetCenterNumber(S);
if i then//以上通过,跟踪时看到S为正确的值
begin
SS:=PChar(S);//此处报错,出现CPU调试窗体。
Memo1.Lines.Add(ss);
end; i:=SetCenterNumber('123456');//此处报错,但i为真
if i then
Memo1.Lines.Add('Center OK')
else
Memo1.Lines.Add('Center Error');
dispose(S);
end;请赐教!
要用GETMEM, FREEMEM
根據你的需要來申請分配內存
procedure TForm1.Button3Click(Sender: TObject);
var
s:pchar;
ss:string;
begin
new(s);
s:='abcde';
ss:=pchar(s);
listbox1.Items.Add(ss);
end;
运行就正常
i:=GetCenterNumber(S);
if i then
begin
SS:=PChar(S);
Memo1.Lines.Add(ss);
end;
FreeMem(s);//以上通过
i:=SetCenterNumber('123456');//此处还报错
//请问是调用的写法错了吗?
vc是这样写的
BOOL _stdcall SetCenterNumber(const char* strCenterNumber);