HSP 【HSP3】構造体を戻り値とするDXライブラリの関数をHSPで呼び出すテスト

このエントリーをはてなブックマークに追加このエントリのはてなブックマーク数このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをつぶやく

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)
;

Posted by at 2015/8/10 15:45

よく投稿されているコード

タグ

最近投稿されたコード