c# - 我如何 P/调用 dnsapi.dll 方法 : DnsValidateServerStatus

标签 c# pinvoke

我不太熟悉非托管代码,但一直在我的 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/

相关文章:

c# - 在 C# 中打开到文件描述符的管道连接

c# - 按契约(Contract)进行静态检查设计

c# - 无法将值 NULL 插入到列中 - 具有 2 个父项的 NHibernate 实体

c# - P/Invoke问题(栈不平衡)

C# 互操作 Delphi DLL

c++ - azure网站是否支持p/invoke加载 native c++ dll

c# - 如何正确发出和使用类?

c# - 'thread safe' 对象是什么意思?

c# - 为什么我可以将 1 作为 short 而不是 int 变量 i 传递?

c# - 如何制作 PInvoke 友好的 native API?