У меня есть обертка неуправляемого метода:C# Мусорные данные в строке из неуправляемого метода
[DllImport(DLL_LOCATION, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern Boolean voGetFirmwareVersion(StringBuilder s, ref uint d);
Это работает отлично, StringBuilder заполняются с китайскими иероглифами. Fortuantely Я знаю, что текст следует читать:
"Камера 0057, FPGA 0009"
Что я получаю:
慃 敭 慲 〠 㔰 㬷 䘠 䝐 ⁁〰 㤰 猀 ""譗 珉 譞 珉 쬂 ☐"" 造 琞 \ u085cʩ "
Я попытался изменить CharSet ко всем комбинациям в своем флажке DLLImport и попытался изменить кодировку возвращаемых строк безрезультатно. Помогите мне в интернете!
EDIT: DLL, к которому я звоню, принадлежит устройству, которое я сейчас программирую. Все остальные функции работают, но упомянутый выше даст мне только китайские символы.
EDIT СНОВА: Ниже приведен код, я использую для вызова метода подписи выше:
private string getFirmware()
{
uint r = 31;
StringBuilder sb = new StringBuilder(31);
bool result = voGetFirmwareVersion(sb, ref r);
if(!result)
{
MessageBox.Show("Error Getting Firmware");
}
return sb.ToString();
}
, с которой вы пытаетесь позвонить? –
вопрос, отредактированный с помощью DLL-информации –
, пожалуйста, предоставьте обновленный код [mcve] –