Возвращение строки из C # в C ++ с использованием неуправляемого экспорта возвращает числа

У меня есть функция в C #, которую я вызываю из C ++, используя Неуправляемый экспорт. Переданная строка принята правильно в C #, но возвращенная строка в C ++ показана в виде чисел, подобных 5073480. Что может быть здесь неправильным? Мне нужно вернуть строку обратно в C ++. Ниже приведен код

Код C ++:

using Testing = wchar_t*(__stdcall *) (wchar_t* name);
int _tmain(int argc, _TCHAR* argv[])
{
HMODULE mod = LoadLibraryA("CSharp.dll");
Testing performTest = reinterpret_cast<Testing>(GetProcAddress(mod, "testing"));
wchar_t* d_str = L"JS";
wchar_t* result = performTest(d_str);
std::printf("Result from c#: %d\n", result);
getchar();
return 0;
}

Код C #:

[DllExport(ExportName = "testing", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.LPWStr)]
public static string PassStringInOut([MarshalAs(UnmanagedType.LPWStr)]string name)
{
Console.WriteLine("Received string is: "+name);
return string.Format("Hello from .NET assembly, {0}!", name);
}

0

Решение

Пара проблем здесь.

Строка формата неверна. Чтобы напечатать строку Unicode, используя ASCII-версию printf, указанный формат %S (обратите внимание на столицу S).

Во-вторых, вы представили здесь утечку памяти. После того как вы закончили использовать строку в C ++, вы должны освободить память, вызвав CoTaskMemFree (при условии, что вы пишете код для Windows).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]