У меня есть код на C++, как это просто, чтобы попробовать, чтобы получить строку в C# приложение из dll C++.Передача строки из C++ в C# с использованием указателя void
int GetValue(void *pBuffer)
{
int x = 0;
String^ temp;
temp = "TestStringtest1test2";
memcpy(pBuffer, &temp,sizeof(temp));
Console::WriteLine(temp);
return x;
}
на C# стороне все, что я делаю это
[DllImport("Cplusplusapp.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern int GetValue(StringBuilder pBuffer);
StringBuilder Buffer = new StringBuilder(100);
int x = GetValue(Buffer);
Console.WriteLine(Buffer);
Я попытался сортировочных и различные другие предложения, но я не могу понять, почему я получаю мусор values.Its довольно простой, но что что я пропал без вести.
адрес "temp" НЕ является строкой, а memcpy не будет работать должным образом. –
Зачем вам это делать? Зачем передавать указатель между двумя языками, которые могут обрабатывать типы .NET? Если ваш C++ на самом деле является C++/CLI, как следует из использования String ^, почему бы не указать параметр String ^? Или еще лучше как возвращаемое значение? Почему он даже используется как неуправляемый импорт? – nvoigt