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