python

しょっちゅう忘れることを書いておく。

33

653 views

pythonの関数をC言語から呼び出す

ようするに、C言語にコールバック関数を作って、pythonの関数を渡して実行するというもの。

C言語

# include <stdio.h>

typedef void (*MY_CALLBACK)(char *);

void callback(MY_CALLBACK p) {
    p("call from C");
}

ビルドは前ページと同じで、以下のように共有ライブラリを作成する。

gcc -shared -fPIC -o libtest.so test.c

pythonのコードは次のように書く。

#coding:UTF-8

import ctypes

def python_callback(s):
    print(s)
    print(s.decode("utf-8"))

if __name__ == '__main__':
    libtest = ctypes.CDLL("./libtest.so")
    cfun = ctypes.CFUNCTYPE(None, ctypes.c_char_p)
    libtest.callback(cfun(python_callback))

すると、5行目のpython_callback関数がC言語側に渡り、C言語のソースの6行目のp("call from C")と書かれている箇所でpython_callbackが呼ばれる。
これでソケットプログラムと組み合わせて作れば、WEBを介さない超高速画像転送プログラムができる…かもしれない。

Page 18 of 56.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

マッスル

自己紹介

本サイトの作成者。
趣味:プログラム/水耕栽培/仮想通貨/激辛好き
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
仮想通貨はNEMが好き。
水耕栽培は激辛好きが高じて、キャロライナ・リーパーの栽培にチャレンジ中。

サイト/ブログ

https://www.osumoi-stdio.com/pyarticle/

ツイッター

@darkimpact0626