問題タブ [cgo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
com - Go から stdcall を作成する方法
COM インターフェイスへのポインタがあり、その仮想テーブルから関数ポインタを取得してメソッド呼び出しを行いたいと考えています。これを行うには、stdcall メソッドを呼び出す必要があります。Go では、どのように規約 stdcall で呼び出しを行うか、cgo で規約 stdcall で呼び出しを行うのですか?
go - Windows SDKでcgoを使用できますか?
tdm-gccを試したところ、動作しますが、Windows SDKでcgoを使用することはできますか?
garbage-collection - Go構造体が収集されたときに、管理されていないリソースを解放する方法はありますか?
次のように、Go構造体でラップされたC型へのポインタがあります。
次に、Cタイプには次の機能があります。
インスタンスがファイナライズfree_c_type
されるたびに呼び出されるようにする方法はありますか?Wrapper
go - Cユニオンフィールドにアクセスする際の問題
GoのC共用体のフィールドにアクセスしたいのですが。以下は私のソースコードですが、コンパイル時にエラーが発生しました:
ビルドすると、次のようなエラーが発生しました。
bc undefined(タイプ* [8]バイトにはフィールドまたはメソッドcがありません)
ユニオンフィールドにアクセスするための正しいアプローチを教えてくれる人はいますか?
go - エラー:Cから例を作成するときに、C.stdoutの名前の種類を判別できませんでしたか?行け?Cgo!記事
私はWin764でGoを実行しており、 http://tdm-gcc.tdragon.net/の64ビットバージョンのGCCを使用して います。これをLinuxで実行することはできません。
私が得るエラーは次のとおりです。
このメッセージに関するドキュメントを見つけることができず、Googleに表示されるヒットはほとんどありません。
誰かがこれを引き起こしているものについての考えを持っていますか?前もって感謝します!
go - CGO; C関数にはintポインタ引数がありますが、正しい型を渡す方法は?
現在、Cgo を使用して Go から C 関数を呼び出しています。Go で「写真を読む」の例を再現しようとしています。
ただし、C 関数の場合は、int* len
引数が必要です (おまけの質問です。それは ? と同じint *len
ですか)。これを読むと、これは整数へのポインタです。問題の関数はccv_write
libccv ライブラリのものです。完全な署名は次のとおりです。
int ccv_write(ccv_dense_matrix_t* mat, char* out, int* len, int type, void* conf)
関連するコード スニペットは次のとおりです。
上記の例では、次のコンパイル時エラーが生成されます。cannot convert &x (type *int) to type *_Ctype_int
正しい引数を渡す方法について何か考えはありますか?
go - zlibをgolangでラップするにはどうすればよいですか?
cgoを使用してgolangからczlibを呼び出すことにより、golangの最も遅いzip実装を修正しようとしました
しかし、エラーが発生します
エラー:'deflateInit'が宣言されていません(この関数での最初の使用)
deflateInitはzlib.hで定義されています
私は何かが足りないのですか?ヒントをありがとう。
go - Go/CGo - ポインターとして渡された C 配列をどのように使用しますか
解決するのに時間がかかったので、これを質問/回答として投稿しています。私の解決策に関するフィードバックは気にしません。Go/CGo では、ポインターとして渡された C 配列をどのように操作しますか?
たとえば、次の C 構造体を使用します。
oid フィールドを Go 文字列に変換したいのですが、guint32* ポインターをどのように操作すればよいですか?
go - goで[][]byteから**charに変換する方法
go [][]byte から C **char に変換したいと思います。つまり、C で char double ポインターに変換したいバイト マトリックスが go にあります。
[][]byte を入力として、**char を出力として持つ必要があると仮定してください。
次のような方法で []byte から *char に変換できることはわかっています。
しかし、このケースを 2 次元に拡張することはできないようです。[][]バイトを新しい[]バイトにパックする、かなり手の込んだことを試しました。次に、その []byte を C 関数に送信します。C 関数は、ポインター演算を使用して **char を作成し、新しい []byte の正しい位置を指します。
ただし、この変換により奇妙な動作が発生します。データは数回の反復では正しいのですが、関数呼び出し間で破損しているように見えます。
誰かに何かアイデアがあれば、本当に感謝します。
回答から、文字列ではなく生データを扱っていることを述べることが重要であることがわかります。したがって、ゴーバイトタイプです。したがって、C 文字列ターミネータを追加すると、元のデータが破損します。char のサイズは 1 バイトであるため、C **char を使用しています。そうは言っても、応答に感謝します。受け入れられた回答を自分のニーズに合わせることができました。
linker - go + cgo とリンク
Go の cgo として次の c を使用したい:
ビルド:
Go の cgo 用にそのコードを書き直しました。
でコンパイルしようとしました:
ただし、リンカーエラーが発生します:
/tmp/go-build076004816/opensource.stdk/lib/tools/_obj/x11.cgo2.o: 関数
_cgo_c0e279f6f16e_Cfunc_XScreenSaverAllocInfo': ./x11.go:52: undefined reference to
内 XScreenSaverAllocInfo' /tmp/go-build076004816/opensource.stdk/lib/tools/_obj/x11.cgo2.o:関数_cgo_c0e279f6f16e_Cfunc_XScreenSaverQueryInfo': ./x11.go:65: undefined reference to
XScreenSaverQueryInfo' collect2: エラー: ld が 1 つの終了ステータスを返しました
私は何を間違っていますか?