Frage

Ich habe Probleme mit [DnsQuery] ( http : //msdn.microsoft.com/en-us/library/ms682016 (VS.85) .aspx) API, die * ppQueryResultsSet Parameter stört mich. Kann mir jemand ein Beispiel dafür, wie richtige DLL-Aufrufe in Python zu machen?

import ctypes
from ctypes import wintypes
from windns_types import DNS_RECORD, IP4_ARRAY #declared here http://pastebin.com/f39d8b997


def DnsQuery(host, type, server, opt=0):
    server_arr = IP4_ARRAY()
    rr = DNS_RECORD()
    server_arr.AddrCount=1
    server_arr.AddrArray[0] = ctypes.windll.Ws2_32.inet_addr(server)
    ctypes.windll.dnsapi.DnsQuery_A(host, type, opt, server_arr, rr, 0)
    # WindowsError: exception: access violation reading 0x00000001

    return rr

print DnsQuery("www.google.com", 1, "208.67.222.222")
War es hilfreich?

Lösung

Ist es nicht ein Zeiger auf Zeiger auf DNS_RECORD? Das heißt, Sie rr als POINTER(DNS_RECORD)() zu initialisieren haben und geben es durch Bezugnahme. ctypes.byref(rr)

Aktualisieren : Aber ich denke, das Problem Sie vorbei server_arr sehen ist: Sie haben eine Struktur mit dem ersten Feld ist 0x00000001 statt Verweise übergeben diese Struktur, so Code C versucht zu dereferenzieren AddrCount Feld und gibt Sie Zugriffsverletzung. Die gleiche Technik soll auch für server_arr verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top