Почему ByRef выдает исключение при передаче в неуправляемый код?

0

Это мой C++ неуправляемый код DLL.

void Only(char *a)
{
    *a++ = 'p';
    *a++ = 'r';
    *a++ = 'a';
    *a++ = 'n';
    *a++ = 'i';
    *a++ = 0;
}

Файл.def используется для экспорта символов.

Я использовал только функцию в приложении VB.Net следующим образом:

Declare Sub Only Lib "dllproj2.dll" Alias "Only" (b As StringBuilder)
....
Dim s As StringBuilder = New StringBuilder()
Only(s)

Он работает нормально. Но когда я пытаюсь использовать b как ByRef следующим образом,

Declare Sub Only Lib "dllproj2.dll" Alias "Only" (ByRef b As StringBuilder)

Это дает исключение, показанное на изображении.

Изображение 174551

Я не понимаю, почему. Не подходит ли ByRef здесь?

Благодарю.

Теги:
interop
unmanaged

1 ответ

2
Лучший ответ

Это должно быть ByVal. Функция не будет перезаписывать ссылку на StringBuilder. Он скорее обновит содержимое StringBuilder. (См. Здесь аналогичный вопрос.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню