作者:虛壞叔叔
博客:https://xuhss.com
早餐店不會開到晚上,想吃的人早就來了!
添加頭文件PyFFmpeg.h
#pragma once
#include<Python.h>
class PyFFmpeg
{
public:
PyObject_HEAD
//開放給python的函數
public:
static PyObject *Create(PyTypeObject *type, PyObject *args, PyObject *kw);
static int Init(PyFFmpeg*self, PyObject *args, PyObject *kw);
static void Close(PyFFmpeg*self);
};
源文件PyFFmpeg.cpp
如下
#include "PyFFmpeg.h"
// 開放給python
PyObject *PyFFmpeg::Create(PyTypeObject *type, PyObject *args, PyObject *kw) {
printf("PyFFmpeg::Create\n");
return type->tp_alloc(type, 0);
}
int PyFFmpeg::Init(PyFFmpeg*self, PyObject *args, PyObject *kw)
{
printf("PyFFmpeg::Init\n");
return 0;
}
void PyFFmpeg::Close(PyFFmpeg*self)
{
printf("PyFFmpeg::Close\n");
Py_TYPE(self)->tp_free(self);
}
// 模塊入口 模塊名稱 pyffmpeg
PyMODINIT_FUNC PyInit_pyffmpeg(void)
{
PyObject *m = NULL;
static PyModuleDef ffmod = {
PyModuleDef_HEAD_INIT,
"pyffmpeg",
"", -1, 0
};
m = PyModule_Create(&ffmod);
// 添加PyFFmpeg_python類
static PyTypeObject type;
memset(&type, 0, sizeof(PyFFmpeg));
type.ob_base = {
PyObject_HEAD_INIT(NULL) 0 };
type.tp_name = "";
type.tp_basicsize = sizeof(PyFFmpeg);
type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
type.tp_new = PyFFmpeg::Create;
type.tp_init = (initproc)PyFFmpeg::Init;
type.tp_dealloc = (destructor)PyFFmpeg::Close;
// 初始化類型
if (PyType_Ready(&type) < 0) {
return NULL;
}
PyModule_AddObject(m, "PyFFmpeg", (PyObject*)&type);
printf("Pyinit_pyffmpeg\n");
return m;
}
編譯通過,然後在testmod.py
中引用:
# import pyffmpeg
from pyffmpeg import *
ff = PyFFmpeg()
del ff
input()
運行 visual studio
程序:
可以看到創建成功並且空間也已經分配,模塊的構造函數別調用,冰鞋析構時內存也得到了釋放。
點贊
收藏
轉發
一波哦,博主也支持為鐵粉絲制作專屬動態壁紙哦~關注下面卡片即刻獲取更多編程知識,包括各種語言學習資料,上千套PPT模板和各種游戲源碼素材等等資料。更多內容可自行查看哦!