在 Microsoft 的 Primary Interop 程序集中声明的方法是错误的。
它被声明为:
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);
但我必须知道如何覆盖InvokeMethod以使用UnmanagedType.SafeArray编组。
注意:我说“喜欢”,因为我不知道使用反射调用方法是否甚至可以完成我需要的。关键是我不反对长期调用方法,或者加载寄存器和发出汇编 JMP 指令,只要 .NET 允许这种事情。
注意:我不能用不同的签名重新声明这个类,因为那是一个不同的类。