1

emscripten の構造体を割り当て、ccall を使用して関数に渡したい。c 構造体は次のようになります。

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

だから私はJavascriptで2つのfloatを割り当て、それを引数として渡します

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

ここで何か不足していますか?

4

1 に答える 1

0

まず第一に、 allocate() は内部関数です。ドキュメントにあるように (関数定義のすぐ上にあるコメントを参照)、使用するのが難しく、お勧めできません。代わりに、_malloc を使用してスペースを割り当て、setValue を使用してそれに書き込む方がよいでしょう。

次に、C 関数が構造体を参照ではなくポインターとして受け取るようにします (これは C++ で可能です)。ここに関数 (元の C およびコンパイル済みの JS) を貼り付けて、問題を解決できるようにするか、内部にデバッグ ステートメントを追加して、何が起こっているかを確認してください。

于 2012-09-29T17:29:16.507 に答える