Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,如何设置LP_c_ubyte的值_Python_C++_Callback_Ctypes_Loadlibrary - Fatal编程技术网

在python中,如何设置LP_c_ubyte的值

在python中,如何设置LP_c_ubyte的值,python,c++,callback,ctypes,loadlibrary,Python,C++,Callback,Ctypes,Loadlibrary,我正在使用Python ctypes为C DLL创建一个Python包装器。我在用python更新内存中的值指针时遇到问题 在本例中,我有一个具有寄存器回调函数的DLL。调用回调函数,创建无符号char变量,将指向该变量的指针传递给回调函数,然后打印该变量的更新值 我所期望的是python函数callbackUpdateValue将更新foo的值,更新后的值将打印在C DLLDoCallBack函数中。打印0的值,而不是预期的99 我的问题是:在python中如何更新callbackUpdate

我正在使用Python ctypes为C DLL创建一个Python包装器。我在用python更新内存中的值指针时遇到问题

在本例中,我有一个具有寄存器回调函数的DLL。调用回调函数,创建无符号char变量,将指向该变量的指针传递给回调函数,然后打印该变量的更新值

我所期望的是python函数
callbackUpdateValue
将更新
foo
的值,更新后的值将打印在C DLL
DoCallBack
函数中。打印
0
的值,而不是预期的
99

我的问题是:在python中如何更新
callbackUpdateValue
foo
的值,以便可以在C DLL
DoCallBack
函数中打印它

我已经尽可能地最小化了我的代码

<强> dll C++代码<强> < /p> DLL有两个函数。一个用于注册回调,另一个用于调用回调并打印结果

#include <stdio.h>
typedef void(*FPCallback)(unsigned char * foo);
FPCallback g_Callback;

extern "C" __declspec( dllexport ) void RegisterCallback(void(*p_Callback)(unsigned char * foo)) {
    g_Callback = p_Callback ; 
}

extern "C" __declspec( dllexport ) void DoCallBack() {
    unsigned char foo = 0 ; 
    g_Callback( &foo ); 
    printf( "foo=%d\n", foo); 
}

定义python回调的正确方法是

def callbackUpdateValue( foo ):
    foo[0] = 99

其中
foo[0]
取消对指针的引用。更多信息可以在这里找到:

定义python回调的正确方法是

def callbackUpdateValue( foo ):
    foo[0] = 99

其中
foo[0]
取消对指针的引用。更多信息可在此处找到:

不确定,但您不必取消对指针的引用,即。E使用
foo[0]=99
?后续问题不确定,但您不必取消引用指针,即。E使用
foo[0]=99
?跟进问题