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 p1 temp = 0.0 lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000) lpoke temp, 0, p1 << 29 return 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.0f py = 0.0f pz = 100.0f ; ; 戻り値を格納するVECTOR構造体(12bytes) dim VECTOR, 3 _ConvWorldPosToScreenPos VECTOR, VGet(px, py, pz) ; ; ポインタ(同じ値を指します) mes "ptr:" + stat mes "ptr:" + varptr(VECTOR) ; ; 結果 mes todouble(vector.0) mes todouble(vector.1) mes todouble(vector.2) ;