Извинения за повторную публикацию.Маршаллинг связанного списка
Привет
У меня возникли проблемы с сортировочной связанным списком из DLL.
------ C++ структуры и функции --------
struct localeInfo {
WCHAR countryName[BUFFER_SIZE];
WCHAR localeName[BUFFER_SIZE];
localeInfo *next;
}
int GetSystemLocales(localeInfo **ppList);
----------- C# -------- Объявления ---
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
private struct LocaleInfo {
public string countryName;
public string localeName;
public IntPtr next;
};
[DllImport("systemLocales.dll")]
private static extern int GetSystemLocales(ref IntPtr ppList);
int main()
{
var pListHead = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));
try
{
GetSystemLocales(ref pListHead);
var deref1(IntPtr)Marshal.PtrToStructure(pListHead, typeof(IntPtr));
var deref2 = (LocaleInfo)Marshal.PtrToStructure(deref1, typeof(LocaleInfo));
}
finally
{
Marshal.FreeHGlobal(pListHead);
}
}
Я получаю исключение FatalExecutionEngine в объявлении deref2. Я не могу понять, как вернуть связанный список и получить доступ к его содержимому.
Вот код C++, который я написал для получения связанного списка. Я хочу что-то похожее на работу в C#.
localeInfo *pHead = NULL;
localeInfo *pTemp;
GetSystemLocales(&pHead);
for(pTemp = pHead; pTemp!=NULL; pTemp = pTemp->next)
{
wprintf(L"Display Name : %s (%s) \n", pTemp->countryName, pTemp->localeName);
}
Спасибо за ответ. Это сработало! Невозможно закрыть или удалить вопросы на этом веб-сайте ... по крайней мере, я не смог его найти. – Ashish
Это действительно хороший ответ! – 3vts