我如何将其翻译成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 ++中的作用。但我认为这可能与我的失败有关。
答案 0 :(得分:1)
带有new
的C ++代码行分配blocksize
字节的内存并将指针转换为所需类型。
你的@temp是指向指针的指针。这不是我们想要的
在Delphi中你可以这样做:
GetMem(dir.dirbuf, blocksize);
上面的代码不清楚为什么分配大小是4096而不是SizeOf(Ext2_Dir_Entry)