#c -cli #ref #out
#c -cli #ссылка #out
Вопрос:
У меня есть оболочка взаимодействия для некоторых неуправляемых вызовов DLL, которые возвращают детали через out paremeters. Функции выглядят следующим образом:
_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. Что
out UInt32 value
означает в контексте неуправляемого кода? Т.Е. Что естьout
в C / C ?
Ответ №1:
В 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);