首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

C 代码转delphi,该如何解决

2012-09-29 
C 代码转delphiC的接收结构体typedef struct _IO_CONTEXT{BYTE bTagBYTEbDataLen/*data length */BYTEpb

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

热点排行