Я делаю MxRecordLookup. Я получаю сообщение об ошибке при вызове DnsRecordListFree в .NET Framework 4.0. Я использую Windows 7. Как мне обойти это? Вот ошибка:
Faulting application name: MxRecordService.exe, version: 1.0.0.0, time stamp: 0x4ce25848
Faulting module name: ntdll.dll, version: 6.1.7600.16559, time stamp: 0x4ba9b802
Exception code: 0xc0000374
Fault offset: 0x00000000000c6df2
Faulting process id: 0x110c
Faulting application start time: 0x01cb85f46c1140da
Faulting application path: C:\vss\Web\MXRecordWS\MxRecordService\bin\Debug\MxRecordService.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: e8c9ecb6-f1e8-11df-8afe-0026b9777c1c
Мой код:
[DllImport("dnsapi.dll", EntryPoint = "DnsQuery_W", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern UInt32 DnsQuery([MarshalAs(UnmanagedType.VBByRefStr)]ref string hostname, UInt16 iType, UInt32 iOptions, UInt32 aipServers, ref IntPtr ppQueryResults, UInt32 pReserved);
[DllImport("dnsapi.dll", EntryPoint = "DnsRecordListFree", CharSet = CharSet.Ansi, SetLastError = true)]
public static extern void DnsRecordListFree(ref IntPtr pRecordList, UInt32 iFreeType);
Я попробовал пост Как обойти ошибку DnsRecordListFree в .NET Framework 4.0?
[Обновление] : Наконец-то исправлено. Решение состоит в том, чтобы убедиться, что структура win32 и структура c # являются битовыми (битовыми). Этого можно добиться, используя точный тип c # для типа win32.