Okay. After some hours of testing and headers and stuff the follow situation is here:
My source file is as follow right now:
#include <QLibrary>
#include "dnssrv.h"
#include <windows.h>
#include <windns.h>
#ifdef DNS_QUERY
#define dnsQuery
#warning DNS_QUERY is already defined.
#endif
#ifdef DNS_FREE
#define dnsFree
#warning DNS_FREE is already defined.
#endif
#ifndef DNS_QUERY_SRV
#define DNS_QUERY_SRV 0x0021
#endif
// typedef DNS_STATUS WINAPI (*DNS_QUERY)(PCSTR, WORD, DWORD, PIP4_ARRAY, PDNS_RECORD *, PVOID *);
// typedef void WINAPI (*DNS_FREE)(PVOID, DNS_FREE_TYPE);
typedef DNS_STATUS WINAPI (*)(PCSTR, WORD, DWORD, PIP4_ARRAY, PDNS_RECORD *, PVOID *)
QList<DnsSrv
::Server> DnsSrv
::resolve(const QString &name
){
QList<DnsSrv::Server> servers;
DNS_QUERY dnsQuery = (DNS_QUERY) lib.resolve("DnsQuery_UTF8");
DNS_FREE dnsFree = (DNS_FREE) lib.resolve("DnsFree");
if (dnsQuery == NULL || dnsFree == NULL) {
qDebug("Windows does not support DnsQuery");
goto failed;
}
PDNS_RECORD rr;
if (dnsQuery(name.toUtf8(), DNS_QUERY_SRV,
DNS_QUERY_STANDARD, NULL, &rr, NULL) != 0)
goto failed;
name.toLower();
for (PDNS_RECORD p = rr; p != NULL; p = p->pNext) {
if (p->wType != DNS_QUERY_SRV ||
QString((char *) p
->pName
).
toLower() != name
) continue;
DNS_SRV_DATA *srv = &p->Data.Srv;
DnsSrv::Server res;
res.ttl = p->dwTtl;
res.priority = srv->wPriority;
res.weight = srv->wWeight;
res.port = srv->wPort;
res.target = (char *) srv->pNameTarget;
servers.append(res);
}
dnsFree(rr, DnsFreeRecordList);
failed:
lib.unload();
return servers;
}
#include <QLibrary>
#include "dnssrv.h"
#include <windows.h>
#include <windns.h>
#ifdef DNS_QUERY
#define dnsQuery
#warning DNS_QUERY is already defined.
#endif
#ifdef DNS_FREE
#define dnsFree
#warning DNS_FREE is already defined.
#endif
#ifndef DNS_QUERY_SRV
#define DNS_QUERY_SRV 0x0021
#endif
// typedef DNS_STATUS WINAPI (*DNS_QUERY)(PCSTR, WORD, DWORD, PIP4_ARRAY, PDNS_RECORD *, PVOID *);
// typedef void WINAPI (*DNS_FREE)(PVOID, DNS_FREE_TYPE);
typedef DNS_STATUS WINAPI (*)(PCSTR, WORD, DWORD, PIP4_ARRAY, PDNS_RECORD *, PVOID *)
QList<DnsSrv::Server> DnsSrv::resolve(const QString &name)
{
QList<DnsSrv::Server> servers;
QLibrary lib("dnsapi");
DNS_QUERY dnsQuery = (DNS_QUERY) lib.resolve("DnsQuery_UTF8");
DNS_FREE dnsFree = (DNS_FREE) lib.resolve("DnsFree");
if (dnsQuery == NULL || dnsFree == NULL) {
qDebug("Windows does not support DnsQuery");
goto failed;
}
PDNS_RECORD rr;
if (dnsQuery(name.toUtf8(), DNS_QUERY_SRV,
DNS_QUERY_STANDARD, NULL, &rr, NULL) != 0)
goto failed;
name.toLower();
for (PDNS_RECORD p = rr; p != NULL; p = p->pNext) {
if (p->wType != DNS_QUERY_SRV ||
QString((char *) p->pName).toLower() != name)
continue;
DNS_SRV_DATA *srv = &p->Data.Srv;
DnsSrv::Server res;
res.ttl = p->dwTtl;
res.priority = srv->wPriority;
res.weight = srv->wWeight;
res.port = srv->wPort;
res.target = (char *) srv->pNameTarget;
servers.append(res);
}
dnsFree(rr, DnsFreeRecordList);
failed:
lib.unload();
return servers;
}
To copy to clipboard, switch view to plain text mode
Compiling log:
1>------ Build started: Project: dnssrv, Configuration: Release Win32 ------
1>Compiling...
1>dnssrv_win.cpp
1>.\dnssrv\dnssrv_win.cpp(22) : error C2059: syntax error : '('
1>.\dnssrv\dnssrv_win.cpp(25) : error C2143: syntax error : missing ';' before '{'
1>.\dnssrv\dnssrv_win.cpp(25) : error C2447: '{' : missing function header (old-style formal list?)
1>dnssrv - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
1>------ Build started: Project: dnssrv, Configuration: Release Win32 ------
1>Compiling...
1>dnssrv_win.cpp
1>.\dnssrv\dnssrv_win.cpp(22) : error C2059: syntax error : '('
1>.\dnssrv\dnssrv_win.cpp(25) : error C2143: syntax error : missing ';' before '{'
1>.\dnssrv\dnssrv_win.cpp(25) : error C2447: '{' : missing function header (old-style formal list?)
1>dnssrv - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
To copy to clipboard, switch view to plain text mode
Bookmarks