Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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传输到dll并获取修改后的值_Python_C++_Pointers_Dll_Ctypes - Fatal编程技术网

将指针从Python传输到dll并获取修改后的值

将指针从Python传输到dll并获取修改后的值,python,c++,pointers,dll,ctypes,Python,C++,Pointers,Dll,Ctypes,我正在努力解决以下问题,我想,对于拥有更高级C语言技能的人来说,这个问题并没有那么复杂 我的意图是访问从Python中存储在DLL中的C++函数。 我设法让它在ADD和MULT等简单函数中运行 由于我稍后要访问的函数将返回多个浮点值,因此我需要使用指针 我想执行以下基本步骤: -在python中创建一个变量 -将指针转移到dll ctypes->c_指针 -更新指针引用的值 -返回python并使用修改后的值

我正在努力解决以下问题,我想,对于拥有更高级C语言技能的人来说,这个问题并没有那么复杂

我的意图是访问从Python中存储在DLL中的C++函数。 我设法让它在ADD和MULT等简单函数中运行

由于我稍后要访问的函数将返回多个浮点值,因此我需要使用指针

我想执行以下基本步骤:

-在python中创建一个变量

-将指针转移到dll ctypes->c_指针

-更新指针引用的值

-返回python并使用修改后的值

<我的C++函数用于DLL创建是:

#include <stdio.h>
#include <wchar.h>
#include <iostream>
#include <vector>
#include <math.h>  
#include <fstream>
using namespace::std;

extern "C" {

__declspec(dllexport)
int Kappel(double a, double *f){
    *f = 25.5;

return 0;
}
} // extern "C"
谢谢你的帮助
埃里克几分钟前就解决了这个问题。 这和想象的一样简单

不起作用:

p = 1.5
Cp = c_double(p)
Cp_ = pointer(c_double(p))
作品:

p = 1.5
Cp = c_double(p)
Cp_ = pointer(Cp)
ctypes具有byref,这是执行所需操作的首选方式:

# Given: int Kappel(double a, double *f)
lib.Kappel.argtypes = c_double,POINTER(c_double)
lib.Kappel.restype = c_int

out = c_double() # Create instance of a C type to pass by reference.
lib.Kappel(1.5,byref(out))
print(out.value) # Retrieve the value.

您在问题中忽略了提问。对不起,隐含的问题是,是否有人可以在我的代码中识别问题的来源。
# Given: int Kappel(double a, double *f)
lib.Kappel.argtypes = c_double,POINTER(c_double)
lib.Kappel.restype = c_int

out = c_double() # Create instance of a C type to pass by reference.
lib.Kappel(1.5,byref(out))
print(out.value) # Retrieve the value.