I could use some help when assigning a global C variable to a DLL using ctypes.
Below is an example of what I'm trying to do:
test.c contains the following
#include <stdio.h> char name[60]; void test(void) { printf("Name is %s\n", name); }
In windows (cygwin), I create a DLL (Test.dll) as follows:
gcc -g -c -Wall test.c gcc -Wall -mrtd -mno-cygwin -shared -W1,--add-stdcall-alias -o Test.dll test.o
When I try to change the name variable and then call the C test function using the ctypes interface, I get the following ...
>>> from ctypes import * >>> dll = windll.Test >>> dll <WinDLL 'Test', handle ... at ...> >>> f = c_char_p.in_dll(dll, 'name') >>> f c_char_p(None) >>> f.value = 'foo' >>> f c_char_p('foo') >>> dll.test() Name is Name is 4∞┘☺ 13
Why does the test function print garbage in this case?
Update:
I confirmed Alex's answer. Here is a working example:
>>> from ctypes import * >>> dll = windll.Test >>> dll <WinDLL 'Test', handle ... at ...> >>> f = c_char_p.in_dll(dll, 'name') >>> f c_char_p(None) >>> libc = cdll.msvcrt >>> libc <CDLL 'msvcrt', handle ... at ...>
source share