Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi:如何直接读取windows dns缓存?_Delphi - Fatal编程技术网

Delphi:如何直接读取windows dns缓存?

Delphi:如何直接读取windows dns缓存?,delphi,Delphi,我知道我可以使用“ipconfig/displaydns”和Powershell的“Show DnsServerCache” 从命令中获取输出,但我想直接执行。我在stackoverflow中找到了如何在C中实现的源代码,但我无法将其转换为delphi 有人知道如何在德尔福做到这一点吗?我在谷歌上找不到任何东西 提前谢谢 (这是我的第一篇帖子,而且英语不是我的母语,如果我不清楚,很抱歉) 我找到的代码是: #include <windows.h> #include <stdio

我知道我可以使用“ipconfig/displaydns”和Powershell的“Show DnsServerCache” 从命令中获取输出,但我想直接执行。我在stackoverflow中找到了如何在C中实现的源代码,但我无法将其转换为delphi

有人知道如何在德尔福做到这一点吗?我在谷歌上找不到任何东西

提前谢谢

(这是我的第一篇帖子,而且英语不是我的母语,如果我不清楚,很抱歉)

我找到的代码是:

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _DNS_CACHE_ENTRY {
    struct _DNS_CACHE_ENTRY* pNext; // Pointer to next entry
    PWSTR pszName; // DNS Record Name
    unsigned short wType; // DNS Record Type
    unsigned short wDataLength; // Not referenced
    unsigned long dwFlags; // DNS Record Flags
} DNSCACHEENTRY, *PDNSCACHEENTRY;


typedef int(WINAPI *DNS_GET_CACHE_DATA_TABLE)(PDNSCACHEENTRY);

int main(int argc, char **argv) {

    PDNSCACHEENTRY pEntry = (PDNSCACHEENTRY)malloc(sizeof(DNSCACHEENTRY));

    // Loading DLL
    HINSTANCE hLib = LoadLibrary(TEXT("DNSAPI.dll"));

    // Get function address
    DNS_GET_CACHE_DATA_TABLE DnsGetCacheDataTable =
        (DNS_GET_CACHE_DATA_TABLE)GetProcAddress(hLib, "DnsGetCacheDataTable");

    int stat = DnsGetCacheDataTable(pEntry);
    printf("stat = %d\n", stat);
    pEntry = pEntry->pNext;
    while(pEntry) {
        wprintf(L"%s : %d\n", (pEntry->pszName), (pEntry->wType));
        pEntry = pEntry->pNext;
    }
    free(pEntry);
    return 0;
}
#包括
#包括
#包括
typedef结构\u DNS\u缓存\u条目{
struct _DNS_CACHE_ENTRY*pNext;//指向下一个条目的指针
PWSTR pszName;//DNS记录名称
无符号短wType;//DNS记录类型
无符号短wDataLength;//未引用
无符号长dwFlags;//DNS记录标志
}DNSCachentry,*PDNSCACHEENTRY;
typedef int(WINAPI*DNS\u GET\u CACHE\u DATA\u表)(PDNSCACHEENTRY);
int main(int argc,字符**argv){
PdnCacheEntry pEntry=(PdnCacheEntry)malloc(sizeof(DNSCACHEENTRY));
//加载动态链接库
HINSTANCE hLib=LoadLibrary(文本(“DNSAPI.dll”);
//获取函数地址
DNS获取缓存数据表DnsGetCacheDataTable=
(DNS获取缓存数据表)GetProcAddress(hLib,“DnsGetCacheDataTable”);
int stat=DnsGetCacheDataTable(pEntry);
printf(“stat=%d\n”,stat);
pEntry=pEntry->pNext;
while(pEntry){
wprintf(L“%s:%d\n”,(pEntry->pszName),(pEntry->wType));
pEntry=pEntry->pNext;
}
免费(五便士);
返回0;
}

我们不是翻译服务。你需要付出更多的努力。一个非常基础的C语言入门,你会处理得很好。不要轻易放弃。我投票结束这个问题,因为堆栈溢出不是翻译服务。如果你没有C语言的经验,它可能看起来像中文,你根本不知道从哪里开始。像你需要付出更多努力这样的回应并没有什么帮助。我支持大卫的观点。你会经常遇到C语言,所以值得上一门初级课程,你应该能够自己做这件事。我相信网上有一些不错的。如果你不准备这样做,你需要雇佣一个能为你做这件事的人。结束这个问题,打开一个新的问题,在翻译的特定部分寻求帮助,然后展示你的努力,这似乎是公平的@JuanK