cffi ---- Python C API Tool

使用模式

  • 综述

    • ABI 不使用 compiler
    • API 使用 compiler
    • in-line, 只使用 cffi 代码
    • out-of-line 还使用 .c 文件
    • 不严谨地说

      • in-line –> ABI +
      • out-of-line –> API +
  • ABI Vs. API

    • ABI

      • 直接和 二进制文件交互(lib)
      • eg:

LGPL Notes

如何闭源项目 并调用 lgpl 开源项目

  • 参考:

  • 回答引文

    Situation: Your own C / C++ source code using an unmodified LGPL library to produce a commercial product (with closed source code) that you can distribute to customers (for a fee).

Python C API ---- Write Python C Extension and Call Python From C

C 语言 转 Python

解析 Python 变量

  • 函数: PyArg_ParseTuple

    • 单个 python 变量转成 C 变量
    • python tuple 转成 多个 C 变量
    • 接口 (PyArg_ParseTuple(args, "ii", &num1, &num2)

      • args: Python 所有参数
      • "ii": Python 参数的类型与个数,相当于翻译模板, "ii" 代表两个 整数
      • &num1, &num2: 使用引用指针接收,解析出来的变量
    • 返回值: 失败为零, 成功非零
1
2
3
4
5
6
7
8
9
static PyObject * Conver_Test_Max_value(PyObject *self, PyObject *args)
{
    int num1, num2;
    // "ii"表示两个整型参数
    if(!(PyArg_ParseTuple(args, "ii", &num1, &num2))){
        return NULL;
    }
    return (PyObject *)Py_BuildValue("i", Max_value(num1, num2));
}

创建 Python 变量

  • 函数: Py_BuildValue