2009-01-28 21 views
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允许这样的事情。


注:我不能用不同的签名重新声明类,因为这是那么不同类。

+0

哪个PIA错了? – Kev 2009-01-28 22:17:42

+0

我特意试图避免命名PIA,因为人们可能会提出一些不会回答或解决问题的方法。它在Microsoft.mshtml PIA中。 HTMLDocumentClass.write()方法具有错误的签名。 – 2009-01-29 15:07:23

回答

2

克服这一缺陷的一种方法是拆卸PIA,修复问题然后重新构建。

这不是我第一次或者我的好友在过去使用互操作程序集来做这件事。

相关问题