, что я имею в hidapi.c библиотеке:C# DllImport wchar_t * в StringBuilder
int HID_API_EXPORT HID_API_CALL testwchar(wchar_t * string) {
//...
wcsncpy(string, cur_dev->serial_number, wcslen(cur_dev->serial_number));
return wcslen(cur_dev->serial_number);
}
, что я имею в C#:
[DllImport("hidapi.dll", CharSet = CharSet.Unicode)]
public static extern unsafe int testwchar(StringBuilder stringt);
StringBuilder sb = new StringBuilder(64);
res = testwchar(sb);
я пропустил какую-то часть кода в С функции// ... он перечисляет устройства и ищет vid/pid и возвращает серийный номер, он отлично работает, когда я тестировал его в testapi.cpp, но когда я попытался написать C# gui ... visual studio 2012 вызывает ошибку, говорящую о несбалансированном stack ... как я понимаю, если я использую строку как параметр out, мне нужно использовать stringbuilder вместо строки.
что я делаю неправильно? спасибо за любые советы.
p.s. извините, но форматирование doe не сработало, поэтому код беспорядок ...
Опубликовать определения 'HID_API_EXPORT' и' HID_API_CALL'. Вероятно, проблема связана с неправильным соглашением о вызове. – Dennis
Возможный дубликат [Unbalanced Stack!] (Http://stackoverflow.com/questions/4171790/unbalanced-stack) – shf301
Не пишите такой код. Как может testwchar() угадать, сколько места доступно в StringBuilder? Угадание неправильно разлагает кучу GC, чрезвычайно трудно диагностировать. Добавьте еще один аргумент, указывающий, насколько велик буфер. –