ConvWorldPosToScreenPos()のような、そのまま構造体で返る関数をHSPで普通に実行するとクラッシュしてしまいます。
元の引数が
prm1, prm2, prm3
だった場合は、
ret, prm1, prm2, prm3
と第一引数に追加することで、呼び出せるようになります。
retは戻り値を格納するポインタです。あらかじめ領域を確保しておいてください。
ConvWorldPosToScreenPos()のような、そのまま構造体で返る関数をHSPで普通に実行するとクラッシュしてしまいます。
元の引数が
prm1, prm2, prm3
だった場合は、
ret, prm1, prm2, prm3
と第一引数に追加することで、呼び出せるようになります。
retは戻り値を格納するポインタです。あらかじめ領域を確保しておいてください。
// http://sprocket.babyblue.jp/html/hsp_koneta3.htm#module#defcfunc todouble int p1temp = 0.0lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000)lpoke temp, 0, p1 << 29return temp#global;#runtime "hsp3cl"#include "DxLib.as";// 【参考】元の形式; #func global ConvWorldPosToScreenPos "dx_ConvWorldPosToScreenPos" float,float,float;// 第一引数に戻り値を格納するポインタを指定する(そのため、引数が1つずれます)#func global _ConvWorldPosToScreenPos "dx_ConvWorldPosToScreenPos" var,float,float,float;ChangeWindowMode TRUE // ウィンドウモードになるSetDoubleStartValidFlag TRUE // 多重起動を許可;DxLib_Init;px = 0.0fpy = 0.0fpz = 100.0f;; 戻り値を格納するVECTOR構造体(12bytes)dim VECTOR, 3_ConvWorldPosToScreenPos VECTOR, VGet(px, py, pz);; ポインタ(同じ値を指します)mes "ptr:" + statmes "ptr:" + varptr(VECTOR);; 結果mes todouble(vector.0)mes todouble(vector.1)mes todouble(vector.2);