Метод, объявленный в одной из основных сборок Microsoft, является неправильным.
Объявлен как:
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 допускает подобные вещи.
Примечание: Я не могу повторно объявить класс с другой подписью, поскольку тогда это будет другой класс.