Microsoftのプライマリ相互運用機能アセンブリの1つで宣言されたメソッドが間違っています。
それは次のように宣言されています:
void Write(object[] psarray);
これは正しくないため、実際には次のように宣言する必要があります。
void Write([In, MarshalAs(UnmanagedType.SafeArray)] object[] psarray);
[In, MarshalAs(UnmanagedType.SafeArray)]
元のメソッドを呼び出すときに、コンパイラにを使用させる必要があります。
私は次のようなことをすることに反対していません:
object[] parameters = new Object[1];
parameters[0] = theStringIWantedToPass;
thing.GetType().InvokeMethod(
"write",
BindingFlags.InvokeMethod,
null,
thing,
parameters);
ただし、 UnmanagedType.SafeArrayマーシャリングを使用するには、 InvokeMethodをオーバーライドする方法を知っている必要があります。
注:リフレクションを使用してメソッドを呼び出すことが必要なことを達成できるかどうかわからないため、「いいね」と言います。重要なのは、.NETがそのようなことを許可している限り、メソッドを長い道のりで呼び出したり、レジスタをロードしてアセンブリJMP命令を発行したりすることに反対していないということです。
注:別のクラスであるため、別の署名でクラスを再宣言することはできません。