从C++到Delphi的类型转换

Typecasting from C++ to Delphi

本文关键字:类型转换 Delphi C++      更新时间:2023-10-16

如何将其转换为Delphi?

typedef struct ext2dirent {
    EXT2_DIR_ENTRY *next;
    EXT2_DIR_ENTRY *dirbuf;
    Ext2File *parent;
    lloff_t read_bytes;     // Bytes already read
    lloff_t next_block;
} EXT2DIRENT;
typedef struct tagEXT2_DIR_ENTRY {
    uint32_t    inode;          /* Inode number */
    uint16_t    rec_len;        /* Directory entry length */
    uint8_t     name_len;       /* Name length */
    uint8_t filetype;       /* File type */
    char    name[EXT2_NAME_LEN];    /* File name */
} __attribute__ ((__packed__)) EXT2_DIR_ENTRY;

EXT2DIRENT *dirent;
int blocksize = 4096;
dirent->dirbuf = (EXT2_DIR_ENTRY *) new char[blocksize]; //<-- This line

我想过做这样的事;

Type
  PExt2_Dir_Entry = ^Ext2_Dir_Entry;
  Ext2_Dir_Entry = packed Record
    inode: Cardinal;
    rec_len : Word;
    name_len : Byte;
    filetype : Byte;
    name : Array[0..EXT2_NAME_LEN-1] of AnsiChar;
  End;
    var
      temp : array of AnsiChar;
      if dir = NIL then
        Result := nil;
        SetLength(temp,self.block_size-1);
        dir.dirbuf := PExt2_Dir_Entry(@temp);

然而,我在dir.dirbuf中没有得到我所期望的结果。我不明白new char特性在C++中的作用。但我认为这可能与我的失败有关。

带有new的C++代码行分配blocksize字节的内存,并将指针强制转换为所需类型
您的@temp是指针对指针。这不是我们想要的
在德尔福你可以做:

GetMem(dir.dirbuf, blocksize);

从上面的代码中不清楚为什么分配大小是4096而不是SizeOf(Ext2_Dir_Entry)