用Delphi通过GPIB读取仪表参数时,调用了VISA.dll库,但是如何通过下面函数取得params双指针的返回值,请高手指教?赠送10分。Function viScanf(vi:integer;readFmt:pchar;var params:ppchar):integer;Cdecl;external 'VISA32.DLL';
详细代码如下:
implementation{$R *.dfm}
Function viOpenDefaultRM(var sesn:integer):integer;stdcall;external 'VISA32.DLL';
Function viOpen(sesn:integer; viDesc:pchar; mode:integer;timeout:integer; var vi:integer):integer;stdcall;external 'VISA32.DLL';
Function viClose(vi:integer):integer;stdcall;external 'VISA32.DLL';
 
Function viPrintf(vi:integer;writeFmt:pchar):integer;Cdecl;external 'VISA32.DLL';
Function viScanf(vi:integer;readFmt:pchar;var params:ppchar):integer;Cdecl;external 'VISA32.DLL';
 params:ppchar):integer;Cdecl;external 'VISA32.DLL';
Function viClear(vi:integer):integer;stdcall;external 'VISA32.DLL';
procedure TForm1.Button3Click(Sender: TObject);
var buf:ppchar;
begin
   viScanf(vi,'%t',buf);
   memo1.Text:=buf;
//  此处该如何写,才能调用双指针params的值,然后将取得的值显示出来。end;

解决方案 »

  1.   

    你不知道DLL里面数据结构的定义,怎么去读
      

  2.   

    按照你的代码,如果PPChar=^^Char; 那么直接写成Buf^就可以了。
      

  3.   

    procedure TForm1.Button3Click(Sender: TObject);
    var buf:ppchar;
        buf1:pchar;
    begin
       getmem(buf,255);
       getmem(buf1,255);
       viScanf(vi,'%d',buf);
       buf1:=@buf^;
       memo1.Text:=pchar(buf1);
       freemem(buf);
       freemem(buf1);
    end;
    这样写运行后,提示指针操作无效。