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);
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);
但在参数相同的情况下,在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;
}
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;
参数值都一样,但结果不一样呀,疯了
不是什么String都能正常转为PChar的
int __stdcall TmcInitialize( int wire, char* adr, int* id ); Delphi:
function TmcInitialize(wire:integer;var adr:pchar;id:pinteger):integer;stdcall;
PINT = ^Integer;function TmcInitialize(wire:integer; adr:pchar; id:PINT):integer;stdcall; 绝对行,不行把调用代码发来看一下
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);
其实二楼的是对的啊
在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 );