중복 게시에 대해 사과드립니다.링크드 마샬링
안녕
나는 데 문제가 DLL에서 연결리스트를 정렬 화를있다.
------ C++ 구조와 기능 --------
struct localeInfo {
WCHAR countryName[BUFFER_SIZE];
WCHAR localeName[BUFFER_SIZE];
localeInfo *next;
}
int GetSystemLocales(localeInfo **ppList);
----------- C# 1 선언 -------- ---
[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);
}
}
나는 deref2 선언에서 FatalExecutionEngine 예외를 얻을. 연결된 목록을 다시 가져 와서 해당 내용에 액세스하는 방법을 알 수 없습니다.
다음은 연결된 목록을 가져 오기 위해 작성한 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