2013-12-23 24 views
0

C/Invoke庫包含的C函數動態呼叫和在堆上動態創建C結構的這反過來又可以被傳遞到動態創建表示動態函數調用堆棧幀的功能。雖然該庫的後者功能正是我所需要的,但由於它旨在滿足的用例,因此我無法使用此庫。我認爲使用這個庫會導致難看的代碼。我需要的是像下面動態創建C結構的存儲器內容以合適的對準

struct dyn_struct { 
    int size; 
    int members; 
    char *bit_field; 
}; 

int add_member_uint(struct dyn_struct *struct, unsigned int value); 
int add_member_int(struct dyn_struct *struct, int value); 
int add_member_float(struct dyn_struct *struct, float value); 
[...] 
int add_member_pvoid(DynStruct *struct; void *value); 

一組功能要我使用圖書館libffi動態調用使用結構作爲參數,動態加載的C庫函數更具體。我正在寫一個小編程語言的解釋器(Lua和C的組合,這可能不是很有創意......)

+0

而你的問題是?請明確點! – Jens

+0

就對齊而言,您應該使用'#pragma pack(n)'來添加/刪除填充。 –

+0

對不起,不具體。我的問題是:你知道一個庫,它可以動態地在堆內存中構建結構,就像我勾畫它的方式。 – forflo

回答

0

不確定我完全理解你在找什麼,但是使用libffi,如果你填充描述你的類型的ffi_type結構,那麼當你第一次調用ffi_prep_cif時,ffi_type的大小和對齊字段將被填充。靜態的initialize_aggregate()函數負責這個。這對我們公開給用戶可能是一個有用的功能。