python 传递结构体指针到 c++ dll

Posted 佩雷尔曼的信徒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 传递结构体指针到 c++ dll相关的知识,希望对你有一定的参考价值。

CMakeLists.txt

# project(工程名)
project(xxx)

# add_library(链接库名称 SHARED 链接库代码)
add_library(xxx SHARED xxx.cpp)

xxx.cpp

#include <iostream>
using namespace std;

// c++ 结构体定义
struct struck_ {

    // 股票名,字符串
    char * stock_code_;

    // 开盘价
    double stock_open_;
};

// 声明为标准 C 格式导出的函数
extern "C" {

    // 参数接受结构体指针
    int struck_function_(struck_ * struck_pointer_) {
        cout << struck_pointer_->stock_code_ << endl;
        cout << struck_pointer_->stock_open_ <<endl;
        return 0;
    }
}

xxx.py

from ctypes import *

# python 结构体定义
class py_struct_(Structure):
    _fields_ = [("stock_code_", c_char_p), ("stock_open_", c_double)]

# python 结构体实例化,初始化
py_struct_1 = py_struct_()
py_struct_1.stock_code_ = b"Hello world!"
py_struct_1.stock_open_ = 123456

# 取结构体指针
py_struct_1_pointer_ = byref(py_struct_1)

# 获取 dll 句柄
h_dll_ = CDLL(\'C:\\\\Users\\\\Perelman\\\\.CLion2016.1\\\\system\\\\cmake\\\\generated\\\\xxx-34f96d0d\\\\34f96d0d\\\\Debug\\\\libxxx.dll\')

# 打印结果
print(h_dll_.struck_function_(py_struct_1_pointer_))

360截图20160625011323895

以上是关于python 传递结构体指针到 c++ dll的主要内容,如果未能解决你的问题,请参考以下文章

C#调用C++的dll库怎么传递结构体中不定长度的char数组

C#如何调用C++的DLL的结构体数组指针

如何将结构从 C++ 应用程序传递到 C++ Win32 DLL?

QT怎样将一个结构体作为函数参数从C++传递到QML

将 C++ 结构指针从 Perl 传递给任意 dll 函数调用

C++基础3(函数指针结构体)