Я новичок в мире взаимодействия с неуправляемыми библиотеками. У меня есть неуправляемая функция C, которая изменяет строку по ссылке внутри функции. У меня проблемы с передачей строки из C # и ее изменением с помощью функции C.
Вот функция C:
__declspec(dllexport) void __stdcall Test(char* name)
{
*name = "Bar";
}
Это код импорта библиотеки C # DLL:
[DllImport(@"C:/blah/mylibrary.dll")]
public extern static string Test(string name);
Это код, который я использую для вызовите функцию:
string s = "foo";
Test(s);
//I want s to be "Bar" after the above line
Я пробовал использовать "ref" и "out" в строковом параметре, а также пробовал маршалинг как LPStr. В зависимости от того, что я пытаюсь сделать, я получаю сообщение об ошибке типа
«Указатель, переданный как строка, не должен находиться в нижних 64 КБ адресного пространства процесса».
или
«Попытка прочитать или записать защищенную память. Это часто указывает на то, что другая память повреждена».
Я уверен, что делаю глупости со своими указателями. Может ли кто-нибудь помочь мне определить соответствующий код C #, чтобы «s» было равно «bar»?
Спасибо