VC中如下定义
int __stdcall TmcInitialize( int wire, char* adr, int* id );请问在delphi中该如何定义呀我这样做,但不对
Function TmInitialize(wire:Integer; adr:PChar; id:Integer):Integer;stdcall; external 'tmctl.dll';  sts := TmInitialize( wire, PChar(address), Dev);

解决方案 »

  1.   

    Function TmInitialize(wire:Integer; adr:PChar; id:PInteger):Integer;stdcall; external 'tmctl.dll'; 
      

  2.   

    sts := TmInitialize( wire, PChar(address), PInteger(@Dev));
      

  3.   

    多谢楼上的。虽然是可以正常使用编译了。
    但在参数相同的情况下,在VC中调用该函数和delphi中调用该函数,得到的结果不一样呀。跪求高手指点。Function TmInitialize(wire:Integer; adr:PChar; id:PInteger):Integer;stdcall; external 'tmctl.dll';sts := TmInitialize( wire, PChar(address), Pinteger(@Dev)); // Initialize
    if CTL_OK <> sts then
    begin
       DisplayError(Dev);
       InitDevice:= sts;
    Exit;
    end;
    在VC中是这样写的extern int __stdcall TmcInitialize( int wire, char* adr, int* id );
    sts = TmcInitialize( wire, address, &Dev ); // Initialize
    if( CTL_OK != sts ){
    DisplayError( Dev );
    return sts;
    }
      

  4.   


    int InitDevice( int wire, char* address )
    {
    int eos; // EOS
    int eot; // EOI
    int timeout; // Timeout
    int sts;
            int             Dev;
     
            Dev=0;
    eos = TERM_LF; // Terminator = LF
    eot = SET_TRUE; // EOI = Enable
    timeout = 100; // Timeout = 10s sts = TmcInitialize( wire, address, &Dev ); // Initialize
    if( CTL_OK != sts ){
    DisplayError( Dev );
    return sts;
    }
    Function TForm1.InitDevice(wire:Integer;address:string):Integer;
    var
    eos:Integer; // EOS
    eot:Integer; // EOI
    timeout:Integer; // Timeout
    sts:Integer;
            Dev:Integer;
    begin
            Dev:=0;
    eos := TERM_LF; // Terminator = LF
    eot := SET_TRUE; // EOI = Enable
    timeout := 100; // Timeout = 10s sts := TmInitialize( wire, PChar(address), Pinteger(@Dev)); // Initialize
    if CTL_OK <> sts then
      begin
    DisplayError(Dev);
    InitDevice:= sts;
        Exit;
    end;
    参数值都一样,但结果不一样呀,疯了
      

  5.   

    自己用CPU ASM调试发现问题吧
    不是什么String都能正常转为PChar的
      

  6.   

    Function TmInitialize(wire:Integer; adr:PChar; var id:Integer):Integer;stdcall; external 'tmctl.dll';这样就OK了!
      

  7.   

    可以把你这个dll文件给一份让我试试不?
      

  8.   

    C++:
    int __stdcall TmcInitialize( int wire, char* adr, int* id ); Delphi:
    function TmcInitialize(wire:integer;var adr:pchar;id:pinteger):integer;stdcall;
      

  9.   

    type
    PINT = ^Integer;function TmcInitialize(wire:integer; adr:pchar; id:PINT):integer;stdcall; 绝对行,不行把调用代码发来看一下
      

  10.   

    原因可能是7樓所描述的,你可以傳入一些比較簡單的字串進去,比如'abc',看是否能與預期結果一致?
      

  11.   

    C++: 
    int __stdcall TmcInitialize( int wire, char* adr, int* id ); Delphi: 
    function TmcInitialize(wire:integer; adr:pchar; var id:pinteger):integer;stdcall;
    sts := TmInitialize( wire, PChar(address), Dev);
    或者
    Function TmInitialize(wire:Integer; adr:PChar; id:PInteger):Integer;stdcall;
    sts := TmInitialize( wire, PChar(address), @Dev);
    其实二楼的是对的啊
      

  12.   

    谢谢大家,这个问题解决了。
    在delphi中这样写的
    function  iTmcInitialize(wire:integer;adr:pchar;var id : integer ):integer; stdcall;external 'iTMCTL.dll';var
      status:integer;
      ret,TM_CTL_USB:integer;
    begin
      status:=0;
      TM_CTL_USB := 3;
      ret:= iTmcInitialize( TM_CTL_USB, '1', m_deviceId );