At Wednesday 27/9/2006 22:58, Podi wrote:

I have a C function in the dll does the following:

DLL_API int dll_foo(char **data, size_t *size)
{
    strcpy(*data, "hello");
    *size = strlen(*data);

    return 0;
}


So I would call the function as such,

char data[8];
size_t size;

int status = dll_foo(&data, &size);

I have tried the following in Python but not able to get it working...
Any help would be appreciated!

from ctypes import *
mydll = windll.mydll
array = c_char * 8
data = array()
size = c_long()
status = mydll.dll_foo(byref(data), byref(size))
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
WindowsError: exception: access violation writing 0x00000000

I'd use your last try. But since it didnt work, use a prototype and see what happens:

data = create_string_buffer('\000' * 8)
size = c_long()
dll_foo = mydll.dll_foo
dll_foo.argtypes = [POINTER(c_char_p), POINTER(c_long)]
status = dll_foo(byref(data), byref(size))

Are you sure your function is compiled using the stdcall calling convention? I'm not sure what means DLL_API.



Gabriel Genellina
Softlab SRL

        
        
                
__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya! http://www.yahoo.com.ar/respuestas

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to