head_status.head_num = 1
Python3.7(test_testlib.py)的输出:
$ python test_pybind.py
head_num=-858993460
head_num=2
守则:
testlib.h:
#pragma once
#ifdef TESTLIB_EXPORTS
#define TESTLIB_API extern "C" __declspec(dllexport)
#else
#define TESTLIB_API extern "C" __declspec(dllimport)
#endif
struct HeadStatus {
const int getHeadNum() { return head_num; };
void setHeadNum(const int new_head_num) { head_num = new_head_num; };
int head_num;
};
TESTLIB_API HeadStatus &get_head_status();
testlib.cpp:
#include "pch.h"
#include "framework.h"
#include "testlib.h"
#include <pybind11/pybind11.h>
namespace py = pybind11;
#include <iostream>
TESTLIB_API HeadStatus &get_head_status()
{
HeadStatus head_status = HeadStatus();
head_status.head_num = 1;
return head_status;
}
using namespace pybind11::literals; // needed for _a style arguments in m.def
PYBIND11_MODULE(testlib, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
py::class_<HeadStatus>(m, "HeadStatus")
.def("getHeadNum", &HeadStatus::getHeadNum)
.def("setHeadNum", &HeadStatus::setHeadNum);
m.def("get_head_status", &get_head_status, "A function that returns a struct for the status of a head");
}
test\u testlib.cpp:
#include <iostream>
#include "../testlib/testlib.h"
int main()
{
HeadStatus hs = get_head_status();
std::cout << "head_status.head_num = " << hs.head_num << "\n";
}
test\u testlib.py:
import testlib
head_status = testlib.get_head_status()
head_num = head_status.getHeadNum()
print(f"head_num={head_num}") # prints -858993460
head_status.setHeadNum(2)
head_num = head_status.getHeadNum()
print(f"head_num={head_num}") # prints 2
目前没有回答
相关问题 更多 >
编程相关推荐