使用 LPSTR 在 python 3 中调用 dll
Calling dll in python 3 with LPSTR
我有一个名为 my.dll
的 .dll
,有 4 个函数,在 python 3.5 中调用:
myDLL = ctypes.cdll.LoadLibrary(Path:\to\my.dll)
我的问题是调用具有 LPSTR
:
的函数
#include "stdafx.h"
#include "newheader.h"
double _stdcall pain_function(double arg1, double arg2, LPSTR arg_string_with_spaces)
对 my.dll
的其他 3 个调用工作正常。
下面是我为 pain_function
尝试的代码:
import ctypes
from ctypes import wintypes
# Load dll
myDLL = ctypes.WinDLL(Path:\to\my.dll)
# Call function
pain_function = myDLL.pain_function
# Typecast the arguments
pain_function.argtypes = [ctypes.c_double, ctypes.c_double, wintypes.LPSTR]
# Typecast the return
pain_function.restype = ctypes.c_double
pain_return = pain_function(arg1, arg2, some_string)
pain_return
returns 一些无意义的数字。我尝试了一些变化,主要是:
some_string = ctypes.create_string_buffer(b' ' * 200)
我在其他地方看过这里:
python-ctypes-prototype-with-lpcstr-out-parameter
将 200 个空格的字符串传递给 dll 的正确方法是什么?
提前致谢
您指出的原型是:
double _stdcall pain_function(double arg1, double arg2, LPSTR arg_string_with_spaces)
但使用:
myDLL = ctypes.cdll.LoadLibrary(Path:\to\my.dll)
应该是,对于__stdcall
调用约定:
myDLL = ctypes.WinDLL('Path:\to\my.dll')
我有一个名为 my.dll
的 .dll
,有 4 个函数,在 python 3.5 中调用:
myDLL = ctypes.cdll.LoadLibrary(Path:\to\my.dll)
我的问题是调用具有 LPSTR
:
#include "stdafx.h"
#include "newheader.h"
double _stdcall pain_function(double arg1, double arg2, LPSTR arg_string_with_spaces)
对 my.dll
的其他 3 个调用工作正常。
下面是我为 pain_function
尝试的代码:
import ctypes
from ctypes import wintypes
# Load dll
myDLL = ctypes.WinDLL(Path:\to\my.dll)
# Call function
pain_function = myDLL.pain_function
# Typecast the arguments
pain_function.argtypes = [ctypes.c_double, ctypes.c_double, wintypes.LPSTR]
# Typecast the return
pain_function.restype = ctypes.c_double
pain_return = pain_function(arg1, arg2, some_string)
pain_return
returns 一些无意义的数字。我尝试了一些变化,主要是:
some_string = ctypes.create_string_buffer(b' ' * 200)
我在其他地方看过这里:
python-ctypes-prototype-with-lpcstr-out-parameter
将 200 个空格的字符串传递给 dll 的正确方法是什么?
提前致谢
您指出的原型是:
double _stdcall pain_function(double arg1, double arg2, LPSTR arg_string_with_spaces)
但使用:
myDLL = ctypes.cdll.LoadLibrary(Path:\to\my.dll)
应该是,对于__stdcall
调用约定:
myDLL = ctypes.WinDLL('Path:\to\my.dll')