問題タブ [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.

0 投票する
1 に答える
973 参照

com - Go から stdcall を作成する方法

COM インターフェイスへのポインタがあり、その仮想テーブルから関数ポインタを取得してメソッド呼び出しを行いたいと考えています。これを行うには、stdcall メソッドを呼び出す必要があります。Go では、どのように規約 stdcall で呼び出しを行うか、cgo で規約 stdcall で呼び出しを行うのですか?

0 投票する
1 に答える
399 参照

go - Windows SDKでcgoを使用できますか?

tdm-gccを試したところ、動作しますが、Windows SDKでcgoを使用することはできますか?

0 投票する
1 に答える
706 参照

garbage-collection - Go構造体が収集されたときに、管理されていないリソースを解放する方法はありますか?

次のように、Go構造体でラップされたC型へのポインタがあります。

次に、Cタイプには次の機能があります。

インスタンスがファイナライズfree_c_typeされるたびに呼び出されるようにする方法はありますか?Wrapper

0 投票する
1 に答える
838 参照

go - Cユニオンフィールドにアクセスする際の問題

GoのC共用体のフィールドにアクセスしたいのですが。以下は私のソースコードですが、コンパイル時にエラーが発生しました:

ビルドすると、次のようなエラーが発生しました。

bc undefined(タイプ* [8]バイトにはフィールドまたはメソッドcがありません)

ユニオンフィールドにアクセスするための正しいアプローチを教えてくれる人はいますか?

0 投票する
2 に答える
5794 参照

go - エラー:Cから例を作成するときに、C.stdoutの名前の種類を判別できませんでしたか?行け?Cgo!記事

Cから次の例を作成しようとしていますか?行け?Cgo!

私はWin764でGoを実行しており、 http://tdm-gcc.tdragon.net/の64ビットバージョンのGCCを使用して います。これをLinuxで実行することはできません。

私が得るエラーは次のとおりです。

このメッセージに関するドキュメントを見つけることができず、Googleに表示されるヒットはほとんどありません。

誰かがこれを引き起こしているものについての考えを持っていますか?前もって感謝します!

0 投票する
3 に答える
10000 参照

go - CGO; C関数にはintポインタ引数がありますが、正しい型を渡す方法は?

現在、Cgo を使用して Go から C 関数を呼び出しています。Go で「写真を読む」の例を再現しようとしています。

ただし、C 関数の場合は、int* len引数が必要です (おまけの質問です。それは ? と同じint *lenですか)。これを読むと、これは整数へのポインタです。問題の関数はccv_writelibccv ライブラリのものです。完全な署名は次のとおりです。

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

正しい引数を渡す方法について何か考えはありますか?

0 投票する
1 に答える
1564 参照

go - zlibをgolangでラップするにはどうすればよいですか?

cgoを使用してgolangからczlibを呼び出すことにより、golangの最も遅いzip実装を修正しようとしました

しかし、エラーが発生します

エラー:'deflateInit'が宣言されていません(この関数での最初の使用)

deflateInitはzlib.hで定義されています

私は何かが足りないのですか?ヒントをありがとう。

0 投票する
3 に答える
9316 参照

go - Go/CGo - ポインターとして渡された C 配列をどのように使用しますか

解決するのに時間がかかったので、これを質問/回答として投稿しています。私の解決策に関するフィードバックは気にしません。Go/CGo では、ポインターとして渡された C 配列をどのように操作しますか?

たとえば、次の C 構造体を使用します。

oid フィールドを Go 文字列に変換したいのですが、guint32* ポインターをどのように操作すればよいですか?

0 投票する
2 に答える
2903 参照

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 を使用しています。そうは言っても、応答に感謝します。受け入れられた回答を自分のニーズに合わせることができました。

0 投票する
2 に答える
2871 参照

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 toXScreenSaverQueryInfo' collect2: エラー: ld が 1 つの終了ステータスを返しました

私は何を間違っていますか?