Как отправить строку по ссылке в неуправляемую библиотеку C, которая изменяет эту строку?

Я новичок в мире взаимодействия с неуправляемыми библиотеками. У меня есть неуправляемая функция 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»?

Спасибо

10
задан Donnie 29 June 2011 в 00:11
поделиться