質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

0回答

435閲覧

Go言語で関数アドレスの受け渡し方法について

kotton_papa

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/08/31 08:55

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問