Я пытаюсь использовать P / Invoke для извлечения строки (среди прочего) из неуправляемой DLL, но строка получается искаженной, независимо от того, что я пытаюсь.
Я не являюсь нативным кодировщиком Windows, поэтому не уверен насчет битов кодировки символов. DLL настроена на использование «Многобайтового набора символов», который я не могу изменить (потому что это сломало бы другие проекты). Я пытаюсь добавить функцию-оболочку для извлечения некоторых данных из некоторых существующих классов. Рассматриваемая строка в настоящее время существует как CString, и я пытаюсь скопировать ее в LPTSTR, надеясь поместить ее в управляемый StringBuilder.
Это то, что я сделал, и считаю, что это наиболее близко к правильности (очевидно, я удалил ненужные биты):
// unmanaged function
DLLEXPORT void Test(LPTSTR result)
{
// eval->result is a CString
_tcscpy(result, (LPCTSTR)eval->result);
}
// in managed code
[DllImport("Test.dll", CharSet = CharSet.Auto)]
static extern void Test([Out] StringBuilder result);
// using it in managed code
StringBuilder result = new StringBuilder();
Test(result);
// contents in result garbled at this point
// just for comparison, this unmanaged consumer of the same function works
LPTSTR result = new TCHAR[100];
Test(result);
Очень ценю любые советы! Спасибо !!!