前提・実現したいこと
C言語で作成した自前のライブラリを
cgoを利用してGo言語から参照を行おうとしているのですが
Go言語で関数のアドレスの受け渡し方法が分からず
コンパイルエラーで躓いております。
C言語で作成したライブラリは呼び出し側(今回はGo言語側)から
コールバック関数を登録するような構造になっているため、
Go言語で記述した関数のポインタをC言語側のライブラリへ渡したいのですが
記述方法が分からずコンパイルエラーで躓いております。
そもそもGo側で記述した関数のアドレスをC側へ渡して
C側から呼び出すようなことが可能なのか不明ですが、
可能な場合記述方法についてアドバイス頂けますと幸いです。
宜しくお願いします。
発生している問題・エラーメッセージ
cannot use GoLang_CallBack_TEST (type func()) as type *_Ctype_REGISTFUNC in argument to _Cfunc_RegisterFunction
該当のソースコード
//C言語側コード typedef void REGISTFUNC( void ); void RegisterFunction( REGISTFUNC * pFunc ); static REGISTFUNC * s_RegistFunc=null; void RegisterFunction( REGISTFUNC * pFunc ) { s_RegistFunc = pFunc // 以降ライブラリ内部から定期的にコールされる }
//Go言語側コード //上記のC言語側コードをgccにてビルドしてGo言語環境にリンクし、 //以下Go言語側コードにて呼び出しを行おうとしています。 //------------------------------------------------------------ type REGISTFUNC func() func GoLang_CallBack_TEST() { fmt.Println( "Call Back TEST" ) } func main(){ C.RegisterFunction( GoLang_CallBack_TEST ) //<-ここでコンパイルエラーが出ます }
試したこと
以下のように一度変数に入れてからなども試してみましたがエラーは解消されませんでした。
test_func := GoLang_CallBack_TEST
C.RegisterFunction( test_func )
補足情報(FW/ツールのバージョンなど)
OS:Windows10
Cコンパイラ:gcc
GO言語のコンパイラ:liteIDE
あなたの回答
tips
プレビュー