[ 新規に投稿する ]

hm.NET.dllの不具合?No.00614
fzok4234 さん 20/09/25 01:37 [ コメントを投稿する ]
  こみやんま氏のhm.NET v1.701で、同一クラス内で名前が同じで引数が異なるメソッドを呼び出すことができません。

呼び出されるC#のDLLは次のようになります。
//----------------Overload.dll----------------
public static class Overload {
    public static System.IntPtr Method( System.IntPtr a ) {
        return a;
    }
    public static System.IntPtr Method( System.IntPtr a, System.IntPtr b ) {
        return a;
    }
}
//--------------------------------------------

呼び出す側の秀丸マクロは次のようになります。
//----------------Overload.mac----------------
debuginfo 1;
#hmDotNet = loaddll( currentmacrodirectory + @"\hm.NET.dll" );
$dllPath = currentmacrodirectory + @"\Overload.dll";
$className = @"Overload";
debuginfo str( dllfuncw( #hmDotNet, @"CallMethod", $dllPath, $className, @"Method", 1 ) ) + "\U0000000A";
debuginfo str( dllfuncw( #hmDotNet, @"CallMethod", $dllPath, $className, @"Method", 2, 3 ) ) + "\U0000000A";
endmacro;
//--------------------------------------------

これを実行すると、デバッガーに以下のように表示されてしまいます(フォルダー名は伏せています)。

指定のアセンブリやメソッドを特定する前に、例外が発生しました。
アセンブリパス   :c:\********\Overload.dll
名前空間.クラス名:Overload
メソッド名       :Method
System.Reflection.AmbiguousMatchException
あいまいな一致が見つかりました。
   場所 System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
   場所 System.Type.GetMethod(String name)
   場所 SubCallMethod(String assm_path, String class_name, String method_name, List`1 args, Boolean isDetathFuncMode)
0
指定のアセンブリやメソッドを特定する前に、例外が発生しました。
アセンブリパス   :c:\********\Overload.dll
名前空間.クラス名:Overload
メソッド名       :Method
System.Reflection.AmbiguousMatchException
あいまいな一致が見つかりました。
   場所 System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
   場所 System.Type.GetMethod(String name)
   場所 SubCallMethod(String assm_path, String class_name, String method_name, List`1 args, Boolean isDetathFuncMode)
0

[ ]

[ 新規に投稿する ]