我怎麼會轉化爲德爾福呢?從C++的類型轉換德爾福
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'問題意味着更可能是「字節」,而不是「AnsiChar」。如果你正在引用Delphi的** **動態陣列的堆塊,則必須把它寫爲'@temp [低(TEMP)]'(索引expr取值爲0,OFC)。 – 2015-02-07 13:49:35
有趣,感謝您的意見。我修改了你的評論中的代碼,但我仍然沒有得到期望的結果。 – 2015-02-07 14:15:28