C 代码转delphi,该如何解决
C 代码转delphi
C的接收结构体
typedef struct _IO_CONTEXT
{
BYTE bTag;
BYTE bDataLen ; /* data length */
BYTE pbData[MAX_DATA_LEN] ; /* data */
} IO_CONTEXT;
//fun原型
DWORD WINAPI ETExecute(
IN CONST ET_CONTEXT *pETCtx,
IN LPCSTR lpszFileID,
IN CONST VOID *pInBuffer,
IN DWORD dwInbufferSize,
OUT VOID *pOutBuffer,
IN DWORD dwOutBufferSize,
OUT DWORD *pdwBytesReturned
);
dwResult =ETExecute( pCtx , ET_EXE_FILE_ID, &ioContext, wIOSize , &ioContext , wIOSize , &dwBytesReturned); 可以得到正确的结果
delphi 代码
/// 原型
function ETExecute(pCtx :PET_CONTEXT; lpszFileID:PChar; pInBuffer:PByte; dwInbufferSize:Longword; pOutBuffer:PByte; dwOutBufferSize:Longword; pdwBytesReturned:PLongword ):integer;stdcall;
type
tagSendPack = packed record
bTag :Byte ;
bDataLen: Byte;
pbData: array[0..MAX_DATA_LEN] of Byte;
end;
PsendPack = ^tagSendPack;
stemp:= '1';
wIOSize := SizeOf(tagSendPack);
buffer := GetMemory(wIOSize);
ZeroMemory(buffer,wIOSize);
cPsendPack := PsendPack(buffer);
cPsendPack.bDataLen := length(PChar(stemp));
cPsendPack.bTag := NIT ;
CopyMemory(@cPsendPack.pbData[0],pchar(stemp),length(PChar(stemp)));
dwBytesReturned =0;
dwResult := ETExecute( pCtx , ET_EXE_FILE_ID, @cPsendPack , SizeOf (tagSendPack) , @cPsendPack , sizeof(cPsendPack) , @dwBytesReturned);
为什么每次执行ETExecute @cPsendPack 都无法返回正确的值
是不是我在delphi定义结构体有问题?传参不对。还是什么。。。
本人对C不了解但是C代码执正确 !谢谢
------解决方案--------------------
建议用VC写个DLL,修改下参数返回方式,不要使用结构体
再重新在DELPHI中调用
C的接收结构体
typedef struct _IO_CONTEXT
{
BYTE bTag;
BYTE bDataLen ; /* data length */
BYTE pbData[MAX_DATA_LEN] ; /* data */
} IO_CONTEXT;
//fun原型
DWORD WINAPI ETExecute(
IN CONST ET_CONTEXT *pETCtx,
IN LPCSTR lpszFileID,
IN CONST VOID *pInBuffer,
IN DWORD dwInbufferSize,
OUT VOID *pOutBuffer,
IN DWORD dwOutBufferSize,
OUT DWORD *pdwBytesReturned
);
dwResult =ETExecute( pCtx , ET_EXE_FILE_ID, &ioContext, wIOSize , &ioContext , wIOSize , &dwBytesReturned); 可以得到正确的结果
delphi 代码
/// 原型
function ETExecute(pCtx :PET_CONTEXT; lpszFileID:PChar; pInBuffer:PByte; dwInbufferSize:Longword; pOutBuffer:PByte; dwOutBufferSize:Longword; pdwBytesReturned:PLongword ):integer;stdcall;
type
tagSendPack = packed record
bTag :Byte ;
bDataLen: Byte;
pbData: array[0..MAX_DATA_LEN] of Byte;
end;
PsendPack = ^tagSendPack;
stemp:= '1';
wIOSize := SizeOf(tagSendPack);
buffer := GetMemory(wIOSize);
ZeroMemory(buffer,wIOSize);
cPsendPack := PsendPack(buffer);
cPsendPack.bDataLen := length(PChar(stemp));
cPsendPack.bTag := NIT ;
CopyMemory(@cPsendPack.pbData[0],pchar(stemp),length(PChar(stemp)));
dwBytesReturned =0;
dwResult := ETExecute( pCtx , ET_EXE_FILE_ID, @cPsendPack , SizeOf (tagSendPack) , @cPsendPack , sizeof(cPsendPack) , @dwBytesReturned);
为什么每次执行ETExecute @cPsendPack 都无法返回正确的值
是不是我在delphi定义结构体有问题?传参不对。还是什么。。。
本人对C不了解但是C代码执正确 !谢谢
------解决方案--------------------
建议用VC写个DLL,修改下参数返回方式,不要使用结构体
再重新在DELPHI中调用