我用delphi调用VC写的DLL,但是VC头文件的声明union不知道在delphi中如何声明,头文件如下:
struct recCConnect
{
int  nSeqId; char sSrcAddr[ 6+1 ];
u_char usAuthSp[ 16 ];
u_char ucVersion;
int  nTimeStamp;
};
typedef struct recCConnect RecCConnect;
typedef struct recCConnect RecCConnRqst;
struct recCConnectRep
{
int  nSeqId; u_char ucStatus;
u_char usAuthIsmg[ 16 ];
u_char ucVersion;
};
typedef struct recCConnectRep RecCConnectRep;
typedef struct recCConnectRep RecCConnRep;
/* 2. Terminate */struct recCTerminate
{
int  nSeqId;
};
typedef struct recCTerminate RecCTerminate;
typedef struct recCTerminate RecCTermRqst;struct recCTerminateRep
{
int  nSeqId;
};
typedef struct recCTerminateRep RecCTerminateRep;
typedef struct recCTerminateRep RecCTermRep;typedef struct {
int     nCmdId;    // command id
union{
            RecCConnect      recConnect;
            RecCConnectRep  recConnectRep;
            RecCTerminate    recTerminate;
            RecCTerminateRep recTerminateRep;
} pkg;
u_char ucaBuff[ MacMaxBufferLen ];
} RecCCMPPPacket;有请高手以教我,谢谢!

解决方案 »

  1.   

    举个例子:
      _LARGE_INTEGER = record
        case Integer of
        0: (
          LowPart: DWORD;
          HighPart: Longint);
        1: (
          QuadPart: LONGLONG);
      end;你的代码翻译之后:
    type 
    recCConnect=packed record
    nSeqId:integer;
    sSrcAddr:array[0..6] of char;
    usAuthSp[0..15]:of char;
    ucVersion:char;
    nTimeStamp:integer;
    end; RecCConnRqst=recCConnect ;
    recCConnectRep=packed record
    nSeqId:integer;
    ucStatus:char;
    usAuthIsmg:array[0..15] of char;
    ucVersion:byte;
    end;
    RecCConnRep=recCConnectRep ;
    (* 2. Terminate *) recCTerminate=packed record
    nSeqId:integer;
    end;

    RecCTermRqst=recCTerminate ; recCTerminateRep=packed record
    nSeqId:integer;
    end;
    RecCTermRep=recCTerminateRep ;
    RecCCMPPPacket=packed record{
    nCmdId:integer;    // command id
    pkg:packed record
    case integer of 
        0:
        (
         recConnect:RecCConnect;      
           );
           1:
        (
         RecCConnectRep:recConnectRep;      
           );
           2:
        (
         RecCTerminate:recTerminate;      
           );
           3:
        (
         RecCTerminateRep:recTerminateRep;      
           );
           end;
    end;
    ucaBuff:array[0..MacMaxBufferLen-1 ] of char;
    end;