C #: Как вызвать метод, в то же время заставляя различные маршаллинг? - PullRequest
3 голосов
/ 29 января 2009

Метод, объявленный в одной из основных сборок 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 допускает подобные вещи.


Примечание: Я не могу повторно объявить класс с другой подписью, поскольку тогда это будет другой класс.

1 Ответ

2 голосов
/ 29 января 2009

Один из способов преодоления этого недостатка - разобрать PIA, исправить проблему и затем восстановить.

Это не первый раз, когда мне или моему приятелю приходилось делать это в прошлом с помощью сборок взаимодействия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...