3

在 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 允许这种事情。


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

4

1 回答 1

2

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

这不是我或我的一个伙伴过去第一次不得不使用互操作程序集来执行此操作。

于 2009-01-28T22:24:47.720 回答