在C中定义方法
int WINAPI iTmcReceive( int id, char* buff, int blen, int* rlen ); 实现代码
char recieveBuffer[D_RECIEVE_BUFFER_SIZE];
status = iTmcReceive( m_deviceId, recieveBuffer, D_RECIEVE_BUFFER_SIZE, &recieveLength ); 我转换成delphi,这样定义的
function iTmcReceive(id:Integer; buff:PChar;blen:Integer;var rlen:Integer):Integer;stdcall;external 'iTMCTL.dll'; 调用代码
const D_RECIEVE_BUFFER_SIZE = 1000;
var
status :Integer;
messages :PChar;
recieveLength:Integer; // recieveBuffer:string;
// aaaaa :PChar;
// recieveBuffer:string;
recieveBuffer: array [0..D_RECIEVE_BUFFER_SIZE] of Char;
status:= iTmcReceive(m_deviceId,recieveBuffer,D_RECIEVE_BUFFER_SIZE,recieveLength);
无论怎么,recieveBuffer都返回不了结果值呀。 后面的 rlen 写法是正确的,因为我在其它调用函数的地方都是这样写的,都可以用。
int WINAPI iTmcReceive( int id, char* buff, int blen, int* rlen ); 实现代码
char recieveBuffer[D_RECIEVE_BUFFER_SIZE];
status = iTmcReceive( m_deviceId, recieveBuffer, D_RECIEVE_BUFFER_SIZE, &recieveLength ); 我转换成delphi,这样定义的
function iTmcReceive(id:Integer; buff:PChar;blen:Integer;var rlen:Integer):Integer;stdcall;external 'iTMCTL.dll'; 调用代码
const D_RECIEVE_BUFFER_SIZE = 1000;
var
status :Integer;
messages :PChar;
recieveLength:Integer; // recieveBuffer:string;
// aaaaa :PChar;
// recieveBuffer:string;
recieveBuffer: array [0..D_RECIEVE_BUFFER_SIZE] of Char;
status:= iTmcReceive(m_deviceId,recieveBuffer,D_RECIEVE_BUFFER_SIZE,recieveLength);
无论怎么,recieveBuffer都返回不了结果值呀。 后面的 rlen 写法是正确的,因为我在其它调用函数的地方都是这样写的,都可以用。
>>
var
recieveBuffer: array [0..999] of Char;
int recieveLength = 0;
const int D_RECIEVE_BUFFER_SIZE = 1000;
char recieveBuffer[D_RECIEVE_BUFFER_SIZE];
status = iTmcReceive( m_deviceId, recieveBuffer, D_RECIEVE_BUFFER_SIZE, &recieveLength );
if ( status != D_TMCTLDLL_RESULT_OK ) {
displayError( status, message );
return false;
}
recieveLength:=0;
SetLength(str1,1000);
//D_RECIEVE_BUFFER_SIZE:=1000;
status:= iTmcReceive(m_deviceId,@recieveBuffer,1000,recieveLength);
SetLength(str1,Length(str1));
if status <> D_TMCTLDLL_RESULT_OK then
begin
displayError(status,messages);
Result:=False;
Exit;
end;
rlen:Integer->rlen:pinteger
定义成 pinteger ,也还是不行
buff:PChar->var buff:PChar
不是问你VC中返回多少,上面你调用的代码返回,recieveLength是多少?正确么?
unsigned long -》 DWORD ,或者 longword
unsigned long * -》 PDWord
unsigned char * -》 PByte
BOOL -》 Boolean
unsinged short * -》 PByte
unsinged short -》 byte
char * -》 pchar
char -》 char
unsinged short * -》 /*PByte*/ PWORD
unsinged short -》 /*byte*/ WORD