C ++ / CLI вызывает методы-оболочки Interop без параметров - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть оболочка Interop для некоторых неуправляемых вызовов DLL, которые возвращают подробности через наши параметры. Функции выглядят так:

_myWrapper->My_Method( ... out UInt32 value ... );

Итак, если метод объявлен так:

void My_Method(out UInt32 value);

Как мне затем вызвать этот метод из моего кода C ++ / CLI? Я знаю, как вызывать ссылочные методы, такие как этот, достаточно просто:

void Another_Method(ref UInt32 value);

UInt32 _value;
_myWrapper->Another_Method(%_value);

Я немного читаю и читаю, что это невозможно? Я не верю в это ... Вероятно, это не невозможно преодолеть или обойти, но ты, должно быть, шутишь? Это правда?

Спасибо ...

1 Ответ

4 голосов
/ 29 сентября 2011

В C ++ нет специального синтаксиса вызова для вызова функции со ссылочным параметром, вы просто записываете вызов, как будто он был передан по значению.Конечно, вам нужно предоставить lvalue для перезаписи, нельзя использовать rvalue (временный) результат арифметического выражения.

Кстати, ваш код для вызова функции ref также неверен,это может быть источником ваших проблем.

Пример:

Определение C #:

 void MySharpRef(ref int i)  { i = 4; }
 void MySharpOut(out int i)  { i = 5; }

Определение C ++ / CLI:

 void MyPlusRef(System::Int32% i) { i = 14; }
 void MyPlusOut([System::Runtime::InteropServices::OutAttribute] System::Int32% i) { i = 15; }

C #вызов:

 int j;
 o.MyPlusOut(out j);
 o.MyPlusRef(ref j);

C ++ / вызов CLI:

 System::Int32 k;
 p->MySharpOut(k);
 p->MySharpRef(k);
...