在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 写法是正确的,因为我在其它调用函数的地方都是这样写的,都可以用。
delphi 中可以用 sdr:PChar 来替换。但这个数组的,弄了N久,都没有弄好
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[0],D_RECIEVE_BUFFER_SIZE,recieveLength);