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中调用