2012-09-29 72 views
0

我想爲emscripten分配一個結構體並將它傳遞給使用ccall的函數。 的C結構是這樣的:Emscripten:傳遞結構指針作爲參數

typedef float HPDF_REAL; 
typedef struct _HPDF_Point { 
    HPDF_REAL x; 
    HPDF_REAL y; 
} HPDF_Point; 

所以我在Javascript分配兩個浮標和它作爲一個參數傳遞

struct_ptr = Module['allocate']([123,321], 'float', ALLOC_NORMAL) 
res = Module['ccall']('HPDF_Page_GetCurrentTextPos', 'number', ['number', 'number'], [page_ptr, struct_ptr]) 

但是當我得到的結構數據

FLOAT_SIZE = 4 
point = { 
    x: getValue(struct_ptr, 'float') 
    y: getValue(struct_ptr+FLOAT_SIZE, 'float') 
} 

我的分配內存未被觸及,仍然爲point.x==123point.y==321

我在這裏錯過了什麼嗎?

+0

我只是使用值'123'和'321'作爲虛擬初始化來檢查內存是否被「觸摸」。使用零也不起作用。 – manuels

回答

0

首先,allocate()是一個內部函數 - 正如文檔所說(請參閱函數定義上方的註釋),使用它並非推薦使用。相反,最好只使用_malloc來分配一些空間,並使用setValue來寫入它。

其次,確保您的C函數將結構作爲指針而不是引用(C++可以執行)。在這裏粘貼這個函數(原始的C和編譯的JS),這樣我們可以幫助你,或者在其中添加調試語句來查看發生了什麼。