2012-09-29 6 views
0

emscripten에 대한 구조체를 할당하고 ccall을 사용하여 함수에 전달하려고합니다. 는 C의 구조체는 다음과 같습니다 Emscripten : 인수로 struct 포인터 전달

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

그래서 내가 자바 스크립트에서 두 개의 수레를 할당하고 인수로 전달

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' 값을 사용하여 메모리가'터치 된 '것인지 확인합니다. 0을 사용하면 작동하지 않습니다. – manuels

답변

0

우선 allocate()는 내부 함수입니다. 즉, 함수 정의 바로 위의 주석을 보면 알 수 있듯이 사용하기가 까다로 우며 권장되지 않습니다. 대신 _malloc을 사용하여 공간을 할당하고 setValue를 사용하여 쓰기 작업을 수행하는 것이 좋습니다.

둘째, C 함수가 참조가 아닌 포인터로 구조를 사용하는지 확인하십시오 (C++이 수행 할 수 있음). 여기에 함수 (원래 C와 컴파일 된 JS)를 붙여 넣으면 도움이 될 것입니다. 디버그 문을 추가하면 그 상황을 확인할 수 있습니다.