Как бы перевести это в Delphi?Typecasting от C++ до 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++. Но я думаю, что это может быть связано с моей неудачей.
Как примечание стороны: 'char' в вашей линии в вопросе означает, скорее, 'Byte', а не' AnsiChar'. И если вы ссылаетесь на блок кучи динамического ** массива Delphi **, вы должны записать его как '@temp [Low (temp)]' (индекс expr вычисляет 0, ofc). –
Интересно, спасибо за ваш вклад. Я изменил свой код, сделанный в вашем комментарии, но я до сих пор не получаю желаемых результатов. –