1

次のようなcコードがあります。

extern "C" __declspec(dllexport) inline sfVector2f __cdecl sf_vector_create(
    float x, float y
) {
    std::cout << "x: " << x << " y: " << y << std::endl;
    sfVector2f vec = {x,y};  // just a struct of two floats
    return vec;
}

extern "C" __declspec(dllexport) inline void __cdecl test(
    sfSprite* sprite, sfVector2f wtf
) {
    std::cout << wtf.x << " " << wtf.y << std::endl;
    sfSprite_setPosition(sprite, wtf);
}

次のように reds から呼び出します。

vec: sf-vector-create as float32! float32 として 100.0! 100.0 test mario-sprite vec

これを赤で呼び出すと、文字化けした結果が得られます...なぜですか?

4

1 に答える 1

3

C コードは、構造体ポインターを返す代わりに、スタック上の vec 構造体を返しています。したがって、R/S では、構造体の最初のエントリのみが返されると思います。R/S は、値による構造体の受け渡しをまだサポートしていません。ただし、system/stack/* アクセサーを巧妙に使用して構造体の先頭にポインターを取得することで、残りの値を取得できます。このようなものが動作するはずです:

sf-vector-create as float32! 100.0 as float32! 100.0
p: as byte-ptr! system/stack/top
vec: as vector! p - size? vector!

( @DocKimbelからの回答)

于 2015-09-21T16:51:48.567 に答える