因为需要调用visa dll里面的viscanf,viprintf函数,所以必须传递可变参数。c++代码如下:
声明:
UINT viScanf         (ViSession vi, char* readFmt, ...);使用: 
    char buf[255];
    viPrintf(vi,("measure:voltage:dc?\n ");
    viScanf(vi,"%#t",buf);
delphi代码我是这样写的:
声明:
  function viPrintf(vi:ViSession;writFmt:ViString):ViStatus;cdecl varargs;external 'visa32.dll';
  function viScanf(vi:ViSession;readFmt:PChar):ViStatus;cdecl varargs;external 'visa32.dll';使用:
viPrintf(vi,PChar('measure:voltage:dc? '#10''));
viScanf(vi,'%#t',buf);已试出viPrintf可以把内容发出去,但 viScanf无法取回数据。
有请各位高手指教!

解决方案 »

  1.   

    viScanf(vi,'%#t',buf);
    难道不应该是
    viScanf(vi,Pchar('%#t'),buf); 吗?
      

  2.   

    多谢 Hexpate,
    '%#t'是格式化字符串,在delphi种常量字符串和PChar应该是可以互用的。
    我想应该是PCHAR和字符串数组的区别的问题。
    我用字符数组还是可以的。但用PCHAR不知道为什么不行?
    难道使用之前要申请内存吗?
    我本来是用c++的,但听说delphi如何优秀,就学习一下,把之前的一个工程由c++改写为delphi。
    个人感觉,如果用的delphi写程序,首先必须对它的数据结构要熟悉,因为其它很多程序是用c++写的,
    里面的#define,#ifndef, typedef等就有几百上千行。
    转换起来实在不容易呀,在网上下了个转换工具,十行有八行转出来无法使用。希望那个高手能开发出来一个优秀的转换工具,那就会有很多人用delphi了。
      

  3.   

    C++中的可变参,在Delphi中使用时,可以参考Format函数的方式。
    const Args: array of const
      

  4.   

    暂时还是只能用array
    传递参数,不过问题已经可以解决了。多谢各位。
      

  5.   

    dongfa_dg
    你是怎么解决的,能告诉我么,我现在也遇到这个问题!