我的共享库中有一个函数指针,用于调用主引擎。 (效果很好):func_ptr
我还有一个python模块,我在程序中导入,使用boost :: python :: import(“module”)
我的python模块中的一个函数:
def wrapper(function):
function('TEST ')
和我的c ++程序中的一个函数:
int function(char const *msg){
{
func_ptr(msg); //this line crashes
return 1;
}
当我用
调用我的包装函数时module.attr("wrapper")(boost::python::make_function(function))
它在我的c ++函数中崩溃了。 (段错误)
gdb产生类似的东西:
如何使它有效? Ty!
答案 0 :(得分:0)
如果在调用函数指针function()
时在func_ptr
中发生崩溃,则执行已经通过Boost.Python层。考虑:
func_ptr
是否指向有效功能。func_ptr
指向的函数是否正确处理参数值"TEST "
。使用module.py
:
def wrapper(function):
return function('TEST ')
main.cpp
:
#include <iostream>
#include <boost/python.hpp>
void engine(const char* msg)
{
std::cout << "engine: " << msg << std::endl;
}
void (*func_ptr)(const char* msg) = &engine;
int function(const char* msg)
{
func_ptr(msg);
return 42;
}
int main()
{
Py_Initialize();
namespace python = boost::python;
try
{
// Import the 'module' module.
python::object module = python::import("module");
// Invoke the wrapper function in the module, providing function
// as a callback.
python::object result =
module.attr("wrapper")(python::make_function(&function));
std::cout << "result: " << python::extract<int>(result) << std::endl;
}
catch (python::error_already_set&)
{
PyErr_Print();
}
}
应用程序产生以下输出:
engine: TEST
result: 42