by イグトランス » 2006年2月26日(日) 00:44
AB4.21で次のコードをコンパイルしようとすると,
デバッグ・リリース共にコンパイル途中でBasicCompiler.exeが強制終了されてしまいます。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
#strict
TypeDef HRESULT = Long
Type VARIANT
End Type
Class Test
Public
Virtual Function f(
Macro_1 As QWord, Macro_2 As QWord,
Arg1_1 As QWord, Arg1_2 As QWord,
Arg2_1 As QWord, Arg2_2 As QWord,
Arg3_1 As QWord, Arg3_2 As QWord,
Arg4_1 As QWord, Arg4_2 As QWord,
Arg5_1 As QWord, Arg5_2 As QWord,
Arg6_1 As QWord, Arg6_2 As QWord,
Arg7_1 As QWord, Arg7_2 As QWord,
Arg8_1 As QWord, Arg8_2 As QWord,
Arg9_1 As QWord, Arg9_2 As QWord,
Arg10_1 As QWord, Arg10_2 As QWord,
Arg11_1 As QWord, Arg11_2 As QWord,
Arg12_1 As QWord, Arg12_2 As QWord,
Arg13_1 As QWord, Arg13_2 As QWord,
Arg14_1 As QWord, Arg14_2 As QWord,
Arg15_1 As QWord, Arg15_2 As QWord,
Arg16_1 As QWord, Arg16_2 As QWord,
Arg17_1 As QWord, Arg17_2 As QWord,
Arg18_1 As QWord, Arg18_2 As QWord,
Arg19_1 As QWord, Arg19_2 As QWord,
Arg20_1 As QWord, Arg20_2 As QWord,
Arg21_1 As QWord, Arg21_2 As QWord,
Arg22_1 As QWord, Arg22_2 As QWord,
Arg23_1 As QWord, Arg23_2 As QWord,
Arg24_1 As QWord, Arg24_2 As QWord,
Arg25_1 As QWord, Arg25_2 As QWord,
Arg26_1 As QWord, Arg26_2 As QWord,
Arg27_1 As QWord, Arg27_2 As QWord,
Arg28_1 As QWord, Arg28_2 As QWord,
Arg29_1 As QWord, Arg29_2 As QWord,
Arg30_1 As QWord, Arg30_2 As QWord,
/*[out,retval]*/ RHS As *VARIANT) As HRESULT
End Class
なんでこんなに大量の引数が必要かというと,
ExcelのApplicationインターフェイスのRunメソッドがそうなっているからです。
本当はVARIANTを値渡ししているのですが,ABでは構造体の値渡しができないため,
苦肉の策としてQWord型の引数2つに分割した結果,こんなことになってしまったのです。
(ようするに,元からArg1~Arg30までという具合で十分引数は多かったのですけどね)
AB4.21で次のコードをコンパイルしようとすると,
デバッグ・リリース共にコンパイル途中でBasicCompiler.exeが強制終了されてしまいます。
[hide][code]#strict
TypeDef HRESULT = Long
Type VARIANT
End Type
Class Test
Public
Virtual Function f(
Macro_1 As QWord, Macro_2 As QWord,
Arg1_1 As QWord, Arg1_2 As QWord,
Arg2_1 As QWord, Arg2_2 As QWord,
Arg3_1 As QWord, Arg3_2 As QWord,
Arg4_1 As QWord, Arg4_2 As QWord,
Arg5_1 As QWord, Arg5_2 As QWord,
Arg6_1 As QWord, Arg6_2 As QWord,
Arg7_1 As QWord, Arg7_2 As QWord,
Arg8_1 As QWord, Arg8_2 As QWord,
Arg9_1 As QWord, Arg9_2 As QWord,
Arg10_1 As QWord, Arg10_2 As QWord,
Arg11_1 As QWord, Arg11_2 As QWord,
Arg12_1 As QWord, Arg12_2 As QWord,
Arg13_1 As QWord, Arg13_2 As QWord,
Arg14_1 As QWord, Arg14_2 As QWord,
Arg15_1 As QWord, Arg15_2 As QWord,
Arg16_1 As QWord, Arg16_2 As QWord,
Arg17_1 As QWord, Arg17_2 As QWord,
Arg18_1 As QWord, Arg18_2 As QWord,
Arg19_1 As QWord, Arg19_2 As QWord,
Arg20_1 As QWord, Arg20_2 As QWord,
Arg21_1 As QWord, Arg21_2 As QWord,
Arg22_1 As QWord, Arg22_2 As QWord,
Arg23_1 As QWord, Arg23_2 As QWord,
Arg24_1 As QWord, Arg24_2 As QWord,
Arg25_1 As QWord, Arg25_2 As QWord,
Arg26_1 As QWord, Arg26_2 As QWord,
Arg27_1 As QWord, Arg27_2 As QWord,
Arg28_1 As QWord, Arg28_2 As QWord,
Arg29_1 As QWord, Arg29_2 As QWord,
Arg30_1 As QWord, Arg30_2 As QWord,
/*[out,retval]*/ RHS As *VARIANT) As HRESULT
End Class[/code][/hide]
なんでこんなに大量の引数が必要かというと,
ExcelのApplicationインターフェイスのRunメソッドがそうなっているからです。
本当はVARIANTを値渡ししているのですが,ABでは構造体の値渡しができないため,
苦肉の策としてQWord型の引数2つに分割した結果,こんなことになってしまったのです。
(ようするに,元からArg1~Arg30までという具合で十分引数は多かったのですけどね)