3
在Microsoft的主互操作程序集之一中声明的方法是错误的。C#:如何强制不同的编组时调用一个方法?
它被声明为:
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编组。
注意:我说“like”,因为我不知道如果使用反射来调用一个方法甚至可以完成我所需要的。关键是,我不反对长时间调用方法,或者加载寄存器和发布汇编JMP指令,只要.NET允许这样的事情。
注:我不能用不同的签名重新声明类,因为这是那么不同类。
哪个PIA错了? – Kev 2009-01-28 22:17:42
我特意试图避免命名PIA,因为人们可能会提出一些不会回答或解决问题的方法。它在Microsoft.mshtml PIA中。 HTMLDocumentClass.write()方法具有错误的签名。 – 2009-01-29 15:07:23