Problem with calling function from dll
Duncan Booth
duncan.booth at invalid.invalid
Thu Dec 13 05:01:52 EST 2012
deepblu at poczta.fm wrote:
> I have problem with using function from dll.
>
> import ctypes
>
> b = ctypes.windll.LoadLibrary("kernel32")
>
> a = ""
>
> b.GetComputerNameA(a,20)
>
>
> But I got exception:
>
> Traceback (most recent call last):
> File "<pyshell#323>", line 1, in <module>
> b.GetComputerNameA(a,20)
> WindowsError: exception: access violation reading 0x00000014
>
> Even when I write:
> a = ctypes.c_char_p('.' * 20)
> I got the same result.
>
> Here I found this function description:
> http://sd2cx1.webring.org/l/rd?ring=pbring;id=15;url=http%3A%2F%
2Fwww.a
> stercity.net%2F~azakrze3%2Fhtml%2Fwin32_api_functios.html
>
>
> Please help.
You have to allocate a buffer for the result, and the second parameter
is a pointer to the length of the buffer on input and contains the
length of the result on output.
#!python2.7
from ctypes import windll, c_wchar_p, POINTER, c_int,
create_unicode_buffer
kernel32 = windll.LoadLibrary("kernel32")
_GetComputerNameW = kernel32.GetComputerNameW
_GetComputerNameW.argtypes = [c_wchar_p, POINTER(c_int)]
_GetComputerNameW.restype = c_int
def GetComputerName():
buf = create_unicode_buffer(255)
len = c_int(255)
if not _GetComputerNameW(buf, len):
raise RuntimeError("Failed to get computer name")
return buf.value[:len.value]
print GetComputerName()
--
Duncan Booth http://kupuguy.blogspot.com
More information about the Python-list
mailing list