문제

dnsquery]에 문제가 있습니다 (http://msdn.microsoft.com/en-us/library/ms682016(vs.85).aspx) API, *ppQueryResultsset 매개 변수가 문제를 일으킨다. 누구든지 파이썬에서 올바른 DLL 호출을 만드는 방법의 예를 보여줄 수 있습니까?

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")
도움이 되었습니까?

해결책

포인터가 아닌 포인터가 아닙니다 DNS_RECORD? 즉, RR AS를 초기화해야합니다 POINTER(DNS_RECORD)() 참조로 전달하십시오. ctypes.byref(rr).

업데이트:하지만 당신이 보는 문제는 지나가는 것입니다. server_arr: 당신은 첫 필드가있는 구조를 통과합니다 0x00000001 이 구조에 대한 참조 대신 C 코드는 피로를 시도합니다. AddrCount 현장 및 액세스 위반을 제공합니다. 동일한 기술을 사용해야합니다 server_arr 도.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top