У меня есть консольное приложение C# .Net, которое вызывает библиотеку классов C++ .Net. Однако, когда выполняется следующее приложение, список становится пустым !!!Управляемый C++: строки в списке не передаются обратно вызывающему абоненту
Если я удаляю строку, указанную в комментарии рядом с ней, код работает. Я не понимаю причину этого.
Если я хочу перераспределить память для списка в библиотеке классов C++, как то, что я пытаюсь сделать ниже, каков правильный способ сделать это?
C# консольного приложения 2005
class Caller
{
static void Main(string[] args)
{
Callee callee = new Callee();
List<String> s = new List<String>();
callee.DoSomething(s);
Console.WriteLine(s.Count); // Prints out 0
}
}
C++ 2005 Библиотека классов
public ref class Callee
{
public:
void DoSomething(List<String^>^ list);
};
void Callee::DoSomething(List<String^>^ list)
{
list = gcnew List<String^>(); // Remove this line and it works
list->Add(gcnew String("Test String 1"));
list->Add(gcnew String("Test String 2"));
}
@Smirnov: Он работает сейчас. Большое спасибо! :) –
@Smirnov: C# также может использовать ключевое слово «out». Есть ли эквивалент в C++/CLI? –
Если вы установите для него атрибут [Out], он будет идентичен ключевому слову «out», например. void Callee :: DoSomething ([Out] List ^% list) –
Smirnov