しょっちゅう忘れることを書いておく。
![]() |
66 |
811 views
ようするに、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行目のpythoncallback関数がC言語側に渡り、C言語のソースの6行目のp("call from C")と書かれている箇所でpythoncallbackが呼ばれる。
これでソケットプログラムと組み合わせて作れば、WEBを介さない超高速画像転送プログラムができる…かもしれない。
Page 18 of 69.
すぺぺぺ
本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。
https://www.osumoi-stdio.com/novel/