读书人

C 代码转delphi,该如何解决

发布时间: 2012-09-29 10:30:01 作者: rapoo

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 LPCSTRlpszFileID,
IN CONST VOID*pInBuffer,
IN DWORDdwInbufferSize,
OUT VOID*pOutBuffer,
IN DWORDdwOutBufferSize,
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中调用

读书人网 >.NET

热点推荐