Это не так сложно, как вы думаете ... Что такое wchar_t*
? Какое значение обычно представляет этот тип? Строка. Это эквивалент типа LPWSTR
, определенного в windows.h
.
Итак, вы маршалируете как string
тип. Однако, поскольку это параметр out
(или возвращаемое значение), вам нужно будет использовать StringBuilder
class на стороне C #, а не тип string
.
Синтаксис P / Invoke будет выглядеть примерно так:
[DllImport("MyLib.dll")]
public static extern void MyFunction(StringBuilder str);
И чтобы использовать его, вы сначала объявляете экземпляр класса StringBuiler
с соответствующей емкостью, а затем вызываете функцию:
StringBuilder myString = new StringBuilder(255);
MyFunction(myString);
Помните, что неуправляемый код C ++ должен освобождать строку, чтобы предотвратить утечку памяти. Это единственный доступ к области неуправляемой памяти, где была выделена строка.