hk1vさんが投稿したコード一覧

HSP HighDPI実験

#include "hspdsc.as"
#runtime "hsp3HighDPI"
#include "gdi32.as"
#include "user32.as"
#module
#define LOGPIXELSX 88
#define LOGPIXELSY 90
#defcfunc getScale int mode, int size
	// 現在のDPI -> 96dpi
	if 0 == mode : return int((1.0 * size * dpiX) / 96.0)
	if 1 == mode : return int((1.0 * size * dpiY) / 96.0)
	// 96dpi -> 現在のDPI
	if 2 == mode : return int((1.0 * size * 96.0) / dpiX)
	if 3 == mode : return int((1.0 * size * 96.0) / dpiY)
return 0
#defcfunc getFontScale int size
return int(1.0 * size * (1.0 * dpiY / 72.0) * (72.0 / 96.0))
#deffunc getDPI
	GetDC 0
	sHdc = stat
	GetDeviceCaps sHdc, LOGPIXELSX
	dpiX = stat
	GetDeviceCaps sHdc, LOGPIXELSY
	dpiY = stat
	ReleaseDC 0, sHdc
return
#global

	b = 1.4

	getDPI

	screen 0, getScale(0, 300.0*b), getScale(1, 184.0*b)
	title "HSPDSC Video Capture"

	dsc_Init

*main
	cls
	id = 0
	font "Meiryo UI", getFontScale(12.0*b), 16
	objmode 2, 1
	sdim devList, dsc_GetDeviceListSize()
	dsc_GetDeviceList devList

	mes "▼ ビデオデバイスリスト"
	objsize getScale(0, 300.0*b), getScale(1, 100.0*b)
	listbox id, 0, devList
	objid_Listbox = stat

	objsize getScale(0, 300.0*b), getScale(1, 20.0*b)

	button "ビデオデバイスリストの再読み込み", *main
	objid_Button_ReLoadDevice = stat

	button gosub "デバイスを開く", *OpenDevice
	objid_Button_DeviceOpen = stat

	button gosub "デバイスを閉じる", *CloseDevice
	objid_Button_DeviceClose = stat
	objenable objid_Button_DeviceClose, 0

	onexit gosub *Exit
	onexit 0

stop

*OpenDevice
	if ( -1 == id ) {
		dialog "選択してください。"
		return
	}

	gosub *ButtonDisable

	dsc_SetActiveSel 0
	dsc_Open id, 0, 0, 0, 0
	if stat < 0 {
		dialog "デバイスのオープンに失敗しました。\nSTAT = " + stat
		gosub *ButtonEnable
		return
	}
	dsc_Play2

	onexit 1

return
*CloseDevice
	dsc_Stop
	dsc_Close
	onexit 1
	gosub *ButtonEnable
return
*ButtonEnable
	objenable objid_Listbox, 1
	objenable objid_Button_DeviceOpen, 1
	objenable objid_Button_DeviceClose, 0
	objenable objid_Button_ReLoadDevice, 1
return
*ButtonDisable
	objenable objid_Listbox, 0
	objenable objid_Button_DeviceOpen, 0
	objenable objid_Button_DeviceClose, 1
	objenable objid_Button_ReLoadDevice, 0
return

*Exit
	dsc_Stop
	dsc_Close
	dsc_Exit
	end : end
return

HSP 【HSP3】strrep命令を入れ子(ネスト)にすると、意図した動作をしない

#module _Mod_HTML_
// 指定された文字列のHTMLエスケープを行います
#defcfunc escapeHtml str html, \
	local tmp
;
	tmp =  html
	strrep tmp, "&", "&amp;"
	strrep tmp, "<", "&lt;"
	strrep tmp, ">", "&gt;"
	strrep tmp, "'", "&apos;"
	strrep tmp, "\"", "&quot;"
;
	logmes tmp
return tmp
#global
;
	strHtml = "<b>$A$</b>"
	strIns = "こんにちは><"
;
	; 予想: <b>$A$</b>
	; 結果: <b>$A$</b>
	mes "☆1: " + strHtml
;
	; ※ 単体では正常動作します。
	; 予想: こんにちは&gt;&lt;
	; 結果: こんにちは&gt;&lt;
	mes "☆2: " + escapeHtml(strIns)
;
	; ※ strrepを入れ子にすると予想と違う結果に…
	; $A$ という文字列を探して、エスケープ済みの文字列に置き換えます。
	; 予想: <b>こんにちは&gt;&lt;</b>
	; 結果: こんにちは&gt;&lt;
	strrep strHtml, "$A$", escapeHtml(strIns)
	mes "☆3: " + strHtml
;
	; ※ 入れ子にしなければ、予想通りの動きをする。
	; 予想: <b>こんにちは&gt;&lt;</b>
	; 結果: <b>こんにちは&gt;&lt;</b>
	strHtml = "<b>$A$</b>"
	tmp = escapeHtml(strIns)
	strrep strHtml, "$A$", tmp
	mes "☆4: " + strHtml

HSP 【HSP3】DXライブラリのDxDLL.cs(C#)をHSPのasに変換するアレ(手抜き)Ver.3(2015/08/10)

#module
// 指定オフセットから右から検索していき見つけた位置を返す。(1byteのみ)
#defcfunc searchR1 str _in, int ps, int sh
	idx = -1
	in = _in
	max = strlen(in)
	repeat max, ps
		if peek(in, max-cnt) == sh : idx = max-cnt : break
	loop
return idx
// instr 右から検索版
#defcfunc instrl var s1, str s2
ind = 0
repeat
	res = instr(s1, ind, s2)
	if res == -1 : break
	ind += res + 1
loop
return ind-1
#defcfunc GetMacroName str _tmp, var macro, var const
	sdim tmp, 1024
	tmp = _tmp
	sdim macro, 128
	sdim const, 128
	flag = 0
	if instr(tmp, 0, "public const int ") != -1{
		flag = 1
		sdim res, 128
		split tmp, " ", res
		;markpos = -1
		repeat length(res)
			if res(cnt) == "="{
				tmpcnt = cnt
				// スペースの可能性を考慮して検索(マクロ名を取得)
				repeat tmpcnt
					tmpcnt--
					if res(tmpcnt) != ""{
						macro = res(tmpcnt)
						break
					}
				loop
				// スペースの場合があるので連結処理をする(定数値を取得)
				tmpcnt = cnt + 1	// 足しておく
				sdim tmpconst, 128
				repeat length(res)-tmpcnt, tmpcnt
					tmpconst += res(cnt)+" "
				loop
				// セミコロンを除去
				tmpconst = strtrim(tmpconst, 0, ' ')
				const = strtrim(tmpconst, 0, ';')
						//
			}
		loop
	}
return flag
// 戻り値の型を取得します。とれないときは空。
#defcfunc GetFuncReturn str _lineTmp, str _funcName
	sdim lineTmp, 1024
	lineTmp = _lineTmp
	if instr(lineTmp, 0, "extern") != -1{
		_posFuncName = instr(lineTmp, 0, _funcName)
		if _posFuncName != -1{
			_trimedFuncLine = strmid(lineTmp, 0, _posFuncName)
			strrep _trimedFuncLine, "extern unsafe static ", ""
			strrep _trimedFuncLine, "extern static ", ""
			strrep _trimedFuncLine, "\t", ""
			_trimedFuncLine = strtrim(_trimedFuncLine, 0, ' ')
			return _trimedFuncLine
		}
	}
return ""
#defcfunc GetFuncName str _tmp, var _fnc, array _arg, var _retType
	sdim tmp, 1024
	tmp = _tmp
	sdim _arg, 256 : sdim _fnc, 128
	num = -1
	if instr(tmp, 0, "extern") != -1{
		num = 0
		ks = instr(tmp, 0, "(")
		ke = instrl(tmp, ")")
		if ks != -1 | ke != -1{
			args = strmid(tmp, ks+1, ke-ks-1)
			tmp2 = strmid(tmp, 0, ks)
			tmp2 = strtrim(tmp2, 0, ' ')
			ps = searchR1(tmp2, 0, ' ')
			if ps != -1 {
				// 関数名を取得
				tmp3 = strmid(tmp2, ps, strlen(tmp2))
				_fnc = strtrim(tmp3, 0, ' ')

				// 末尾が_x64の場合(対象外として-1を返す)
				if "_x64" == strmid(_fnc, -1, strlen("_x64")){
					return -1
				}

				// 末尾が_x86の場合(取り除きます)
				if "_x86" == strmid(_fnc, -1, strlen("_x86")){
					_fnc = strmid(_fnc, 0, strlen(_fnc) - strlen("_x86"))
				}

				// 戻り値の型を取得
				_retType = GetFuncReturn(tmp, _fnc)

				// 引き続き引数を取得
				// 引数がないケースを取得
				cargs = args
				cargs = strtrim(cargs, 3, ' ')
				cargs = strtrim(cargs, 3, '\t')
				if cargs == "" : num = 0 : return num
				// 引数ありのケース
				sdim tmp2
				split args, ",", tmp2
				num = stat
				repeat num
					tmp3 = tmp2(cnt)
					tmp3 = strtrim(tmp3, 3, '\t')
					tmp3 = strtrim(tmp3, 0, ' ')
					ps = searchR1(tmp3, 0, ' ')
					if ps != -1{
						tmp4 = strmid(tmp3, 0, ps)
						tmp4 = strtrim(tmp4, 0, ' ')
						_arg(cnt) = tmp4
					}
				loop
			}
		}
	}
return num
#global

	dialog "cs",16
	if stat == 0 : end
	fname = refstr

	notesel buf
	noteload fname

	sdim def, 1024*512
	sdim fncs, 1024*512

	repeat notemax
		noteget tmp, cnt
		if GetMacroName(tmp, macro, const){
			def += "#define global "+ macro +" "+ const +"\n"
		}
		num = GetFuncName(tmp, fnc, arg, ret)
		if num != -1{
			sdim outargs
			repeat num
				// 引数で使われているものだけピックアップしているので構造体は全部ではない。
				if arg(cnt) == "int" || arg(cnt) == "ulong" || arg(cnt) == "uint" || arg(cnt) == "char"{
					outargs += "int"
				}else:if arg(cnt) == "System.Text.StringBuilder" || arg(cnt) == "string"{
					outargs += "str"
				}else:if arg(cnt) == "double"{
					outargs += "double"
				}else:if arg(cnt) == "float"{
					outargs += "float"
				}else:if arg(cnt) == "VECTOR"{
					outargs += "float,float,float"
				}else:if arg(cnt) == "VECTOR_D"{
					outargs += "double,double,double"
				}else:if arg(cnt) == "UV"{
					outargs += "float,float"
				}else:if arg(cnt) == "COLOR_F" || arg(cnt) == "FLOAT4"{
					outargs += "float,float,float,float"
				}else:if arg(cnt) == "COLOR_U8"{
					outargs += "int"
				}else:if arg(cnt) == "IPDATA" || arg(cnt) == "IPDATA_IPv6"{
					outargs += "int"
				}else:if arg(cnt) == "RECT" || arg(cnt) == "INT4"{	// ポインタとかは "RECT *" といった感じに来ます。
					outargs += "int,int,int,int"
				}else:if arg(cnt) == "MATRIX"{
					outargs += "float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float"
				}else:if arg(cnt) == "MATRIX_D"{
					outargs += "double,double,double,double,double,double,double,double,double,double,double,double,double,double,double,double"
				}else:if arg(cnt) == "MV1_COLL_RESULT_POLY"{
					outargs += "int,float,float,float,int,int,int,float,float,float,float,float,float,float,float,float,float,float,float"
				}else:if arg(cnt) == "MV1_REF_POLYGON"{
					outargs += "int,int,int,int,int,float,float,float,float,float,float"
				}else:if arg(cnt) == "MV1_REF_VERTEX"{
					outargs += "float,float,float,float,float,float"
				}else:if arg(cnt) == "MATERIALPARAM"{
					outargs += "float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float,float"
				}else:if arg(cnt) == "HITRESULT_LINE"{
					outargs += "int,float,float,float"
				}else:if arg(cnt) == "MV1_COLL_RESULT_POLY_DIM"{
					outargs += "int,int"
				}else:if arg(cnt) == "System.IntPtr"{
					outargs += "sptr"
				}else:if arg(cnt) == "void"{
					outargs += ""
				}else{
					// out~、*は気にしない
					// logmes arg(cnt)
					outargs += "sptr"
				}
				// 最後以外は , をつける
				if cnt != num - 1 : outargs += ","
			loop

			// 戻り値の型をチェックします(構造体のもの)
			retTypeStruct = 0
			if ((ret == "COLOR_F") || (ret == "COLOR_U8") || (ret == "DISPLAYMODEDATA") || (ret == "DOUBLE4") || (ret == "FLOAT4") || (ret == "HITRESULT_LINE") || (ret == "MATRIX") || (ret == "MATRIX_D") || 	(ret == "MV1_COLL_RESULT_POLY") ||(ret == "MV1_COLL_RESULT_POLY_DIM") || (ret == "VECTOR") ||(ret == "VECTOR_D")){
				retTypeStruct = 1
		 	}

		 	if retTypeStruct == 1{
				fncs += "// 戻り値が構造体です(" + ret +")\n// 第一引数に戻り値を返却します。パラメタは第二引数以降にずれます。\n"
				outargs = "var," + outargs
			}

			// 接頭辞の dx_ を外す(手抜き)
			split fnc, "dx_", fnc2
			fncs += "#func global "+ fnc2(1) +" \""+ fnc +"\" "+outargs+"\n"
		}
	loop

	def2 = {"// VECTOR => float, float, float
#define global ctype VGet(%1,%2,%3) %1, %2, %3
#define global ctype VAdd(%1,%2,%3,%4,%5,%6) %1+%4, %2+%5, %3+%6
#define global ctype VSub(%1,%2,%3,%4,%5,%6) %1-%4, %2-%5, %3-%6
#define global ctype VDot(%1,%2,%3,%4,%5,%6) %1*%4+%2*%5+%3*%6
#define global ctype VCross(%1,%2,%3,%4,%5,%6) %2*%6-%3*%5, %3*%4-%1*%6, %1*%5-%2*%4
#define global ctype VScale(%1,%2,%3,%4) %1*%4, %2*%4, %3*%4
#define global ctype VSquareSize(%1,%2,%3) %1*%1+%2*%2+%3*%3
// 行列だからdimの方が良いのか…(MATRIX 4x4)
#define global ctype VTransform(%1,%2,%3, %4,%5,%6,%7, %8,%9,%10,%11, %12,%13,%14,%15, %16,%17,%18,%19) %1*%4 + %2*%8 + %3*%12 + %16, %1*%5 + %2*%9 + %3*%13 + %17, %1*%6 + %2*%10 + %3*%14 + %18
#define global ctype VTransformSR(%1,%2,%3, %4,%5,%6,%7, %8,%9,%10,%11, %12,%13,%14,%15, %16,%17,%18,%19) %1*%4 + %2*%8 + %3*%12, %1*%5 + %2*%9 + %3*%13, %1*%6 + %2*%10 + %3*%14
// VConvFtoD, VConvDtoF未実装
#define global VGetD VGet
#define global VAddD VAdd
#define global VSubD VSub
#define global VDotD VDot
#define global VCrossD VCross
#define global VScaleD VScale
#define global VSquareSizeD VSquareSize
#define global VTransformD VTransform
#define global VTransformSRD VTransformSR
"}

	sdim outbuf, 1024*5120
	notesel outbuf
	noteadd "// "
	noteadd "// DxLib for HSP " + strf("(%04d/%02d/%02d)", gettime(0), gettime(1), gettime(3))
	noteadd "// http://hsp.moe/"
	noteadd "// https://twitter.com/hk1v"
	noteadd "// by inovia."
	noteadd "// "
	noteadd "// 【本モジュールを利用するにはC#版に付属しているDxLib.dllが必要です】"
	noteadd "// http://homepage2.nifty.com/natupaji/DxLib/dxdload.html"
	noteadd "// "
	noteadd "// ※本モジュールをスムーズに使用するには、構造体に対する理解が必要です。"
	noteadd "// また、C言語で書いてあるソースがそれとなく分かるぐらいの知識が必要です。"
	noteadd "// (世の中にあるDxLibのサンプルコードのほとんどがC/C++/C#なので)"
	noteadd "// HSPの知識だけですと、かなりきついと思います。"
	noteadd "// 推奨レベル:★★★★☆(Lv.4) 当社比...?"
	noteadd "// "
	noteadd "// 【旧バージョンのDxLib.as】"
	noteadd "// http://hsp.moe/download/DxLib_old.as"
	noteadd "// 【TIPS】"
	noteadd "// 構造体が戻り値の場合、HSPがクラッシュする問題(解決方法)"
	noteadd "// http://codetter.com/?p=1192"
	noteadd "// DxLib関連のサンプル(HSP用)"
	noteadd "// http://codetter.com/?extag=dxlib"
	noteadd "// HSPとDxLibで2D描画の基礎ら辺とか(えくー氏)"
	noteadd "// http://fe0km.blog.fc2.com/blog-entry-53.html"
	noteadd "// hspからDXlibの利用方法について"
	noteadd "// http://hsp.tv/play/pforum.php?mode=all&num=70321"
	noteadd "#ifndef __DXLIB__"
	noteadd "#define __DXLIB__"
	noteadd "// 定義ファイルのバージョン(=作成時のDxLibのバージョン+連番4桁数字)"
	noteadd "#define DEFINE_DXLIB_VERSION \"3.14f0000\""
	noteadd "#uselib \"DxLib.dll\""
	noteadd fncs
	noteadd def
	noteadd def2
	noteadd "#endif"
	notesave "DxLib.as"

	end

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

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

CSS SyntaxHighlighterとBootstrapとの競合回避

/* SyntaxHighlighterとBootstrapとの競合(containerクラス)の無効化処理 */
.syntaxhighlighter .container:before, .syntaxhighlighter .container:after {
    display: block;
    content: "";
}

HSP シンタックスハイライトテスト2

mes "	T	E	S	T    !    "

HSP シンタックスハイライトテスト

#define TEST			$1
	#define TEST2 		$2
;
; ハイライトテスト
;
; Test!!!
;

	goto *a

*a	// test
	b = 2
	c = 3
	mes b*c

	goto *d

	*d

	mes __hspver__

	if (b<c){mes "OK"}
	if (b < c){mes "OK"}

HSP 【HSP3】HNBridgeを使用して、PDFLibNetでPDFからJPEG形式で画像を切り出すテスト

/**
	HNBridge入手先(つやぴん氏)	http://tuyapin.net/hsp/hnbridge

https://github.com/tuyapin/HNBridge

	HNBridgeEx.as入手先		http://codetter.com/?p=1127

	PDFLibNet入手先			https://github.com/cube-soft/PDFLibNet
	※ 自前でビルドする必要があります。
*/
#include "HNBridge.as"
#include "HNBridgeEx.as"
;
	title "HNBridgeを使用して、PDFLibNetでPDFからJPEG形式で画像を切り出すテスト"
;
	LoadAssembly "PDFLibNet.dll"
;
	CreateObjectFromClassName "PDFLibNet.PDFWrapper"
	CreateInstance
;
	dialog "pdf", 16
	if stat == 0 : end
	fname = refstr
	mes "ファイル名: \t"+fname
;
	InvokeMethod "LoadPDF", fname
	;SetProperty "CurrentPage", "int://1"
	mes "SupportsMuPDF: \t"+GetProperty("SupportsMuPDF")
	mes "UseMuPDF: \t"+GetProperty("UseMuPDF")
	SetProperty "UseMuPDF", "bool://True"
	mes "ページ数: \t"+GetProperty("PageCount")
	mes "RenderDPI: \t"+GetProperty("RenderDPI")
;
	// 出力ファイル名, 開始ページ番号, 終了ページ番号, DPI, JPEG品質度
	InvokeMethod "ExportJpg", "Test.jpg", "Int32://1", "Int32://1", "Double://300", "Int32://90"
;
	UnloadAssembly

HSP 【HSP3】HNBridgeEx.as

#module HNBridgeEx
#define global CreateInstance(%1=a@HNBridgeEx,%2=a@HNBridgeEx,%3=a@HNBridgeEx, \
	%4=a@HNBridgeEx,%5=a@HNBridgeEx,%6=a@HNBridgeEx,%7=a@HNBridgeEx,%8=a@HNBridgeEx, \
	%9=a@HNBridgeEx,%10=a@HNBridgeEx,%11=a@HNBridgeEx,%12=a@HNBridgeEx, \
	%13=a@HNBridgeEx,%14=a@HNBridgeEx,%15=a@HNBridgeEx,%16=a@HNBridgeEx) \
	p1@HNBridgeEx=%1:p2@HNBridgeEx=%2:p3@HNBridgeEx=%3:p4@HNBridgeEx=%4: \
	p5@HNBridgeEx=%5:p6@HNBridgeEx=%6:p7@HNBridgeEx=%7:p8@HNBridgeEx=%8: \
	p9@HNBridgeEx=%9:p10@HNBridgeEx=%10:p11@HNBridgeEx=%11: \
	p12@HNBridgeEx=%12:p13@HNBridgeEx=%13:p14@HNBridgeEx=%14: \
	p15@HNBridgeEx=%15:p16@HNBridgeEx=%16: \
	_CreateInstance p1@HNBridgeEx,p2@HNBridgeEx,p3@HNBridgeEx,p4@HNBridgeEx, \
	p5@HNBridgeEx,p6@HNBridgeEx,p7@HNBridgeEx,p8@HNBridgeEx,p9@HNBridgeEx, \
	p10@HNBridgeEx,p11@HNBridgeEx,p12@HNBridgeEx,p13@HNBridgeEx,p14@HNBridgeEx, \
	p15@HNBridgeEx,p16@HNBridgeEx
#deffunc _CreateInstance var p1, var p2, var p3, var p4, \
	var p5, var p6, var p7, var p8, var p9, var p10, var p11, \
	var p12, var p13, var p14, var p15, var p16
	if vartype(p1) = 1{
		CreateInstanceWithZeroArgs
	}else : if vartype(p2) = 1{
		CreateInstanceWithOneArg p1
	}else : if vartype(p3) = 1{
		CreateInstanceWithTwoArgs p1, p2
	}else : if vartype(p4) = 1{
		CreateInstanceWithThreeArgs p1, p2, p3
	}else : if vartype(p5) = 1{
		CreateInstanceWithFourArgs p1, p2, p3, p4
	}else : if vartype(p6) = 1{
		CreateInstanceWithFiveArgs p1, p2, p3, p4, p5
	}else : if vartype(p7) = 1{
		CreateInstanceWithSixArgs p1, p2, p3, p4, p5, p6
	}else : if vartype(p8) = 1{
		CreateInstanceWithSevenArgs p1, p2, p3, p4, p5, p6, p7
	}else : if vartype(p9) = 1{
		CreateInstanceWithEightArgs p1, p2, p3, p4, p5, p6, p7, p8
	}else : if vartype(p10) = 1{
		CreateInstanceWithNineArgs p1, p2, p3, p4, p5, p6, p7, p8, p9
	}else : if vartype(p11) = 1{
		CreateInstanceWithTenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10
	}else : if vartype(p12) = 1{
		CreateInstanceWithElevenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11
	}else : if vartype(p13) = 1{
		CreateInstanceWithTwelveArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12
	}else : if vartype(p14) = 1{
		CreateInstanceWithThirteenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13
	}else : if vartype(p15) = 1{
		CreateInstanceWithFourteenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14
	}else : if vartype(p16) = 1{
		CreateInstanceWith15Args p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15
	}else{
		CreateInstanceWith16Args p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16
	}
return stat
#define global InvokeMethod(%1="",%2=a@HNBridgeEx,%3=a@HNBridgeEx,%4=a@HNBridgeEx, \
	%5=a@HNBridgeEx,%6=a@HNBridgeEx,%7=a@HNBridgeEx,%8=a@HNBridgeEx,%9=a@HNBridgeEx, \
	%10=a@HNBridgeEx,%11=a@HNBridgeEx,%12=a@HNBridgeEx,%13=a@HNBridgeEx, \
	%14=a@HNBridgeEx,%15=a@HNBridgeEx,%16=a@HNBridgeEx,%17=a@HNBridgeEx) \
	p1@HNBridgeEx=%2:p2@HNBridgeEx=%3:p3@HNBridgeEx=%4:p4@HNBridgeEx=%5: \
	p5@HNBridgeEx=%6:p6@HNBridgeEx=%7:p7@HNBridgeEx=%8:p8@HNBridgeEx=%9: \
	p9@HNBridgeEx=%10:p10@HNBridgeEx=%11:p11@HNBridgeEx=%12: \
	p12@HNBridgeEx=%13:p13@HNBridgeEx=%14:p14@HNBridgeEx=%15: \
	p15@HNBridgeEx=%16:p16@HNBridgeEx=%17: \
	_InvokeMethod %1,p1@HNBridgeEx,p2@HNBridgeEx,p3@HNBridgeEx,p4@HNBridgeEx, \
	p5@HNBridgeEx,p6@HNBridgeEx,p7@HNBridgeEx,p8@HNBridgeEx,p9@HNBridgeEx, \
	p10@HNBridgeEx,p11@HNBridgeEx,p12@HNBridgeEx,p13@HNBridgeEx,p14@HNBridgeEx, \
	p15@HNBridgeEx,p16@HNBridgeEx
#deffunc _InvokeMethod str name, var p1, var p2, var p3, var p4, \
	var p5, var p6, var p7, var p8, var p9, var p10, var p11, \
	var p12, var p13, var p14, var p15, var p16
	if vartype(p1) = 1{
		InvokeMethodWithZeroArgs name
	}else : if vartype(p2) = 1{
		InvokeMethodWithOneArg name, p1
	}else : if vartype(p3) = 1{
		InvokeMethodWithTwoArgs name, p1, p2
	}else : if vartype(p4) = 1{
		InvokeMethodWithThreeArgs name, p1, p2, p3
	}else : if vartype(p5) = 1{
		InvokeMethodWithFourArgs name, p1, p2, p3, p4
	}else : if vartype(p6) = 1{
		InvokeMethodWithFiveArgs name, p1, p2, p3, p4, p5
	}else : if vartype(p7) = 1{
		InvokeMethodWithSixArgs name, p1, p2, p3, p4, p5, p6
	}else : if vartype(p8) = 1{
		InvokeMethodWithSevenArgs name, p1, p2, p3, p4, p5, p6, p7
	}else : if vartype(p9) = 1{
		InvokeMethodWithEightArgs name, p1, p2, p3, p4, p5, p6, p7, p8
	}else : if vartype(p10) = 1{
		InvokeMethodWithNineArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9
	}else : if vartype(p11) = 1{
		InvokeMethodWithTenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10
	}else : if vartype(p12) = 1{
		InvokeMethodWithElevenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11
	}else : if vartype(p13) = 1{
		InvokeMethodWithTwelveArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12
	}else : if vartype(p14) = 1{
		InvokeMethodWithThirteenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13
	}else : if vartype(p15) = 1{
		InvokeMethodWithFourteenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14
	}else : if vartype(p16) = 1{
		InvokeMethodWith15Args name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15
	}else{
		InvokeMethodWith16Args name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16
	}
return stat
#deffunc local init
	dimtype a, vartype("label"), 1
return
#global
init@HNBridgeEx

HSP 【HSP3】HNBridgeのInvokeMethod*命令とCreateInstance*命令のなんちゃって可変長引数サポートモジュール

#include "HNBridge.as"
#module HNBridgeEx
#define global CreateInstance(%1=a@HNBridgeEx,%2=a@HNBridgeEx,%3=a@HNBridgeEx, \
	%4=a@HNBridgeEx,%5=a@HNBridgeEx,%6=a@HNBridgeEx,%7=a@HNBridgeEx,%8=a@HNBridgeEx, \
	%9=a@HNBridgeEx,%10=a@HNBridgeEx,%11=a@HNBridgeEx,%12=a@HNBridgeEx, \
	%13=a@HNBridgeEx,%14=a@HNBridgeEx,%15=a@HNBridgeEx,%16=a@HNBridgeEx) \
	p1@HNBridgeEx=%1:p2@HNBridgeEx=%2:p3@HNBridgeEx=%3:p4@HNBridgeEx=%4: \
	p5@HNBridgeEx=%5:p6@HNBridgeEx=%6:p7@HNBridgeEx=%7:p8@HNBridgeEx=%8: \
	p9@HNBridgeEx=%9:p10@HNBridgeEx=%10:p11@HNBridgeEx=%11: \
	p12@HNBridgeEx=%12:p13@HNBridgeEx=%13:p14@HNBridgeEx=%14: \
	p15@HNBridgeEx=%15:p16@HNBridgeEx=%16: \
	_CreateInstance p1@HNBridgeEx,p2@HNBridgeEx,p3@HNBridgeEx,p4@HNBridgeEx, \
	p5@HNBridgeEx,p6@HNBridgeEx,p7@HNBridgeEx,p8@HNBridgeEx,p9@HNBridgeEx, \
	p10@HNBridgeEx,p11@HNBridgeEx,p12@HNBridgeEx,p13@HNBridgeEx,p14@HNBridgeEx, \
	p15@HNBridgeEx,p16@HNBridgeEx
#deffunc _CreateInstance var p1, var p2, var p3, var p4, \
	var p5, var p6, var p7, var p8, var p9, var p10, var p11, \
	var p12, var p13, var p14, var p15, var p16
	if vartype(p1) = 1{
		CreateInstanceWithZeroArgs
	}else : if vartype(p2) = 1{
		CreateInstanceWithOneArg p1
	}else : if vartype(p3) = 1{
		CreateInstanceWithTwoArgs p1, p2
	}else : if vartype(p4) = 1{
		CreateInstanceWithThreeArgs p1, p2, p3
	}else : if vartype(p5) = 1{
		CreateInstanceWithFourArgs p1, p2, p3, p4
	}else : if vartype(p6) = 1{
		CreateInstanceWithFiveArgs p1, p2, p3, p4, p5
	}else : if vartype(p7) = 1{
		CreateInstanceWithSixArgs p1, p2, p3, p4, p5, p6
	}else : if vartype(p8) = 1{
		CreateInstanceWithSevenArgs p1, p2, p3, p4, p5, p6, p7
	}else : if vartype(p9) = 1{
		CreateInstanceWithEightArgs p1, p2, p3, p4, p5, p6, p7, p8
	}else : if vartype(p10) = 1{
		CreateInstanceWithNineArgs p1, p2, p3, p4, p5, p6, p7, p8, p9
	}else : if vartype(p11) = 1{
		CreateInstanceWithTenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10
	}else : if vartype(p12) = 1{
		CreateInstanceWithElevenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11
	}else : if vartype(p13) = 1{
		CreateInstanceWithTwelveArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12
	}else : if vartype(p14) = 1{
		CreateInstanceWithThirteenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13
	}else : if vartype(p15) = 1{
		CreateInstanceWithFourteenArgs p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14
	}else : if vartype(p16) = 1{
		CreateInstanceWith15Args p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15
	}else{
		CreateInstanceWith16Args p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16
	}
return stat
#define global InvokeMethod(%1="",%2=a@HNBridgeEx,%3=a@HNBridgeEx,%4=a@HNBridgeEx, \
	%5=a@HNBridgeEx,%6=a@HNBridgeEx,%7=a@HNBridgeEx,%8=a@HNBridgeEx,%9=a@HNBridgeEx, \
	%10=a@HNBridgeEx,%11=a@HNBridgeEx,%12=a@HNBridgeEx,%13=a@HNBridgeEx, \
	%14=a@HNBridgeEx,%15=a@HNBridgeEx,%16=a@HNBridgeEx,%17=a@HNBridgeEx) \
	p1@HNBridgeEx=%2:p2@HNBridgeEx=%3:p3@HNBridgeEx=%4:p4@HNBridgeEx=%5: \
	p5@HNBridgeEx=%6:p6@HNBridgeEx=%7:p7@HNBridgeEx=%8:p8@HNBridgeEx=%9: \
	p9@HNBridgeEx=%10:p10@HNBridgeEx=%11:p11@HNBridgeEx=%12: \
	p12@HNBridgeEx=%13:p13@HNBridgeEx=%14:p14@HNBridgeEx=%15: \
	p15@HNBridgeEx=%16:p16@HNBridgeEx=%17: \
	_InvokeMethod %1,p1@HNBridgeEx,p2@HNBridgeEx,p3@HNBridgeEx,p4@HNBridgeEx, \
	p5@HNBridgeEx,p6@HNBridgeEx,p7@HNBridgeEx,p8@HNBridgeEx,p9@HNBridgeEx, \
	p10@HNBridgeEx,p11@HNBridgeEx,p12@HNBridgeEx,p13@HNBridgeEx,p14@HNBridgeEx, \
	p15@HNBridgeEx,p16@HNBridgeEx
#deffunc _InvokeMethod str name, var p1, var p2, var p3, var p4, \
	var p5, var p6, var p7, var p8, var p9, var p10, var p11, \
	var p12, var p13, var p14, var p15, var p16
	if vartype(p1) = 1{
		InvokeMethodWithZeroArgs name
	}else : if vartype(p2) = 1{
		InvokeMethodWithOneArg name, p1
	}else : if vartype(p3) = 1{
		InvokeMethodWithTwoArgs name, p1, p2
	}else : if vartype(p4) = 1{
		InvokeMethodWithThreeArgs name, p1, p2, p3
	}else : if vartype(p5) = 1{
		InvokeMethodWithFourArgs name, p1, p2, p3, p4
	}else : if vartype(p6) = 1{
		InvokeMethodWithFiveArgs name, p1, p2, p3, p4, p5
	}else : if vartype(p7) = 1{
		InvokeMethodWithSixArgs name, p1, p2, p3, p4, p5, p6
	}else : if vartype(p8) = 1{
		InvokeMethodWithSevenArgs name, p1, p2, p3, p4, p5, p6, p7
	}else : if vartype(p9) = 1{
		InvokeMethodWithEightArgs name, p1, p2, p3, p4, p5, p6, p7, p8
	}else : if vartype(p10) = 1{
		InvokeMethodWithNineArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9
	}else : if vartype(p11) = 1{
		InvokeMethodWithTenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10
	}else : if vartype(p12) = 1{
		InvokeMethodWithElevenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11
	}else : if vartype(p13) = 1{
		InvokeMethodWithTwelveArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12
	}else : if vartype(p14) = 1{
		InvokeMethodWithThirteenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13
	}else : if vartype(p15) = 1{
		InvokeMethodWithFourteenArgs name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14
	}else : if vartype(p16) = 1{
		InvokeMethodWith15Args name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15
	}else{
		InvokeMethodWith16Args name, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16
	}
return stat
#deffunc local init
	dimtype a, vartype("label"), 1
return
#global
init@HNBridgeEx

// 以下サンプル

/**

	つやぴん氏作「HNBridge」を使用して、iTextSharpでPDFの情報を読み出すテスト

	【このプログラムを実行するには!】

	※	2014/08/13現在、

http://tuyapin.net/hsp/hnbridge

	で入手可能なバージョン(1.0.0_45)は、IDictionaryの操作をサポートしていない為、

https://github.com/tuyapin/HNBridge

	で入手可能なソースコードをVisualStudioでビルドして出力されたHNBridge.dllを使用する必要があります。
	また、HNBridge.asファイルに、

	#func global _GetDProperty "GetDProperty" sptr, sptr, var

	#defcfunc GetDProperty str p1, str p2
		hoge = "";
		_GetDProperty p1, p2, hoge
	return hoge;

	を追加する必要があります。

	将来のバージョンでは修正されている可能性があります。

*/

#module
#defcfunc safeNull str p1
	if p1 == "hdn://NULL" : return ""
return p1
#global

	title "HNBridgeを使用して、iTextSharpでPDFの情報を読み出すテスト"

	LoadAssembly "itextsharp.dll"

	CreateObjectFromClassName "iTextSharp.text.pdf.PdfReader"

	dialog "pdf", 16
	if stat == 0 : end
	fname = refstr
	mes "ファイル名: \t\t"+fname

	CreateInstance fname

	mes "PDF変換: \t\t"+safeNull(GetDProperty("Info", "Producer"))
	mes "作成日時: \t\t"+safeNull(GetDProperty("Info", "CreationDate"))
	mes "題名: \t\t\t"+safeNull(GetDProperty("Info", "Subject"))
	mes "アプリケーション: \t"+safeNull(GetDProperty("Info", "Creator"))
	mes "キーワード: \t\t"+safeNull(GetDProperty("Info", "Keywords"))
	mes "編集日時: \t\t"+safeNull(GetDProperty("Info", "ModDate"))
	mes "タイトル: \t\t"+safeNull(GetDProperty("Info", "Title"))

	mes "PDFページ数: \t\t"+GetProperty("NumberOfPages")
	mes "PDFバージョン: \t\t1."+GetProperty("PdfVersion")

	InvokeMethod "Close"
	UnloadAssembly
Total Pages: 1 / 512345

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

タグ

最近投稿されたコード