Python 2.5に関しては、次のCコードをPythonで実装したいと思います。
Cコード:
#include <wtypes.h>
__declspec(dllexport) X_ERROR __stdcall GetAdmSize(INT* piAdmSize, CHAR** chBuf, INT iBufSize);
int iProgSize = 0;
char szProgSize[50];
char* pszProgSize = szProgSize;
error = GetAdmSize(&iProgSize, &pszProgSize, 49);
Pythonコード:
from ctypes import *
c_bool = c_int
x = windll.LoadLibrary("x.dll")
iProgSize = c_int()
szProgSize = create_string_buffer(50)
getAdmSize = x.AdkGetAdmSize
getAdmSize.argtypes = [POINTER(c_int), POINTER(c_char_p), c_int]
status = getAdmSize(byref(iProgSize), byref(szProgSize), 49)
しかし、次の例外が発生します。
Traceback (most recent call last):
status = getAdmSize(byref(iProgSize), (szProgSize), 49)
ArgumentError: argument 2: <type 'exceptions.TypeError'>: expected LP_c_char_p instance instead of c_char_Array_50
私は何が間違っているのですか?
アップデート:
私は試した:
pointerToStringBuffer = cast(szProgSize, c_char_p)
status = getAdmSize(byref(iProgSize), byref(pointerToStringBuffer), 49)
しかし、これは私に与えます:
Traceback (most recent call last):
status = getAdmSize(byref(iProgSize), byref(pointerToStringBuffer), 49)
WindowsError: exception: access violation reading 0x00000031
興味深いことに、これを呼び出すと、Cでも同じエラーが発生します。
error = AdkGetAdmSize((int*)0, (char**)49, 0);
私の議論が正しく調整されていないようです
助言がありますか?