HNBridgeのInvokeMethod*命令とCreateInstance*命令のなんちゃって可変長引数サポートモジュールです。
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