Ответ 1
Опубликовать фактический код. Код C/С++ не компилируется как C или С++. Код Python имеет синтаксические ошибки (] завершение функции вызова Foo). Ниже приведен код. Основная проблема после исправления синтаксиса и ошибок компилятора заключалась в объявлении функции __stdcall
, поэтому windll
может использоваться в коде Python. Другой вариант - использовать __cdecl
(обычно по умолчанию) и использовать cdll
вместо windll
в коде Python.
mydll.c(cl/W4/LD mydll.c)
#include <stdlib.h>
__declspec(dllexport) void __stdcall Foo(unsigned char** ppMem, int* pSize)
{
char i;
*pSize = 4;
*ppMem = malloc(*pSize);
for(i = 0; i < *pSize; i++)
(*ppMem)[i] = i;
}
demo.py
from ctypes import *
Foo = windll.mydll.Foo
Foo.argtypes = [POINTER(POINTER(c_ubyte)),POINTER(c_int)]
mem = POINTER(c_ubyte)()
size = c_int(0)
Foo(byref(mem),byref(size))
print size.value,mem[0],mem[1],mem[2],mem[3]
Выход
4 0 1 2 3