Как обойти ошибку DnsRecordListFree в .NET Framework 4.0? - PullRequest
0 голосов
/ 17 ноября 2010

Я делаю 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.

1 Ответ

0 голосов
/ 17 ноября 2010

Попробуйте изменить определение функции DnsRecordListFree на:

  [DllImport("dnsapi.dll", EntryPoint = "DnsRecordListFree", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern void DnsRecordListFree(ref IntPtr pRecordList, UInt32 iFreeType);

Редактировать : я думаю, есть только одна версия этой функции

...