我不太熟悉非托管代码,但一直在我的 C# 应用程序中使用 dnsapi.dll 中的一些方法。有很多关于如何使用 DnsQuery 或 DnsFlushResolverCache 的示例,但是 DnsValidateServerStatus 方法似乎是新的(需要 Win 7 或 Server 2008 R2)。我想在我的 C# 应用程序中使用此方法,但我似乎无法使编码(marshal)处理和结构正常工作。此方法的文档可在以下位置找到: http://msdn.microsoft.com/en-us/library/windows/desktop/ee837436(v=VS.85).aspx
请帮忙!
最佳答案
这个 Win32 API 的困难部分是 SOCKADDR
结构。在 PINVOKE.NET有一个 SOCKADDR
结构的实现。以下示例基于此实现:
[DllImport("Dnsapi.dll")]
private static extern int DnsValidateServerStatus(IntPtr sockaddr, string queryName, ref uint serverStatus);
WinsockSockAddr addr = new WinsockSockAddr(IPAddress.Parse("127.0.0.1"), 0);
uint serverStatus = 0;
int status = DnsValidateServerStatus(addr.PinnedSockAddr, "fqdn server name", ref serverStatus);
Console.Out.WriteLine(status);
Console.Out.WriteLine(serverStatus);
希望这对您有所帮助。
关于c# - 我如何 P/调用 dnsapi.dll 方法 : DnsValidateServerStatus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8330530/