function MenuApp(strIn: PChar; var strOut: PChar): integer; stdcall;external 'xxx.dll';
谢谢 lynmison 。但是如何调用呢? 我这样 var ss1,ss2:pchar ; begin ss2:=stralloc(1024); ss1:=1111111111111111111'; MenuApp(pchar(ss1),pchar(ss2)) 会提示 access violation at address 7C921010 in moudle 'ntdll.dll' 错误。这是怎么回事呢。
入口参数用字符串数组试试看 var ss1: array[0..1023] of char; ss2: pchar; begin ss1:='1111111111111111111'; ss2:=stralloc(1024); MenuApp(pchar(ss1),pchar(ss2)); ... StrDispose(ss2); ...
var ss1: array[0..1023] of char; ss2: pchar; begin ss1:='1111111111111111111'; ss2:=stralloc(1024); MenuApp(ss1,pchar(ss2)); // ... StrDispose(ss2); // ...还是提示 access violation at address 7C921010 in moudle 'ntdll.dll' 错误 。怎么回事呢? MenuApp应该没有问题。示例程序vc++的例子,是可以调用的。并能弹出窗口。
MenuApp 完整的定义是什么?有没有可能跟调用方式有关?stdcall/cdecl?
这个问题我来解决:首先声明成这样 function MenuApp(strIn: PChar; strOut: Pchar): integer; stdcall;external 'xxx.dll'; 然后调用 var ss1:pchar ; ss2:string; begin ss1:='1111111111111111111'; setlength(ss2,1024); MenuApp(ss1,pchar(ss2)); ss2 := strpas(ss2); showmessage(ss2); //................... setlength(ss2,0); end;
定义: function MenuApp(strIn: string; strOut: PChar): integer; stdcall; external 'trans.DLL';procedure TForm1.Button1Click(Sender: TObject); var strIn: array[0..45] of char; strOut: array[0..41] of char; begin strIn := '050000000010001234 02028 0109 '; if MenuApp(strIn,strOut)=1 then ShowMessage('ok') else ShowMessage('device not ready'); end;
请使用 cdecl 声明
function MenuApp(In : Pchar;Out : PChar) : Integer;cdecl;
我这样
var ss1,ss2:pchar ;
begin
ss2:=stralloc(1024);
ss1:=1111111111111111111';
MenuApp(pchar(ss1),pchar(ss2)) 会提示
access violation at address 7C921010 in moudle 'ntdll.dll' 错误。这是怎么回事呢。
var
ss1: array[0..1023] of char;
ss2: pchar;
begin
ss1:='1111111111111111111';
ss2:=stralloc(1024);
MenuApp(pchar(ss1),pchar(ss2));
...
StrDispose(ss2);
...
ss1: array[0..1023] of char;
ss2: pchar;
begin
ss1:='1111111111111111111';
ss2:=stralloc(1024);
MenuApp(ss1,pchar(ss2));
// ...
StrDispose(ss2);
// ...还是提示 access violation at address 7C921010 in moudle 'ntdll.dll' 错误 。怎么回事呢?
MenuApp应该没有问题。示例程序vc++的例子,是可以调用的。并能弹出窗口。
function MenuApp(strIn: PChar; strOut: Pchar): integer; stdcall;external 'xxx.dll';
然后调用
var
ss1:pchar ;
ss2:string;
begin
ss1:='1111111111111111111';
setlength(ss2,1024);
MenuApp(ss1,pchar(ss2));
ss2 := strpas(ss2);
showmessage(ss2);
//...................
setlength(ss2,0);
end;
function MenuApp(strIn: string; strOut: PChar): integer; stdcall; external 'trans.DLL';procedure TForm1.Button1Click(Sender: TObject);
var
strIn: array[0..45] of char;
strOut: array[0..41] of char;
begin
strIn := '050000000010001234 02028 0109 ';
if MenuApp(strIn,strOut)=1 then ShowMessage('ok')
else ShowMessage('device not ready');
end;