問題タブ [swig]

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 に答える
1093 参照

c++ - Swig と参照カウントの C++ クラス

私の C++ オブジェクトの多くは、AddRef メソッドと FreeRef メソッドを使用して、再帰カウントを実装しています。FreeRef が参照カウントを 0 に減らすと、オブジェクトは自身を削除します。

参照カウント オブジェクトを返すすべてのメソッドは、参照をインクリメントしません。スマート ポインターは、ポインターを受け取ると単純にカウントをインクリメントし、ポインターを参照しなくなったときにカウントをデクリメントできるため、これにより簡単になります。例えば:

SWIGに、既存のスマートポインタをこれらのオブジェクトに内部的に使用するように指示できるかどうか考えていましたが、それを行う方法がわかりません:(

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

python - 些細な Python SWIG エラーの質問

Python を swig で実行して C/C++ を実行しようとしています。ここでチュートリアルを実行しています。「Python モジュールの構築」です。私が電話をするとき

エラーが発生します:

実際には example.o ファイルを作成しますが、機能しません。例のように 2.1 ではなく python2.5 を使用していますが、これは問題ですか? エラー (その他はすべて「警告」です) は、プラットフォームが間違っていることを示しています。これは 64 ビット マシンです。これは問題ですか?gcc の構成がマシンに対して間違っていますか? どうすればこれを乗り越えることができますか?

更新: まだ問題があります。この「修正」を実際に実装するにはどうすればよいですか?

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

python - Swig、pythonを使用してパトリシアを試行する問題

Patricia Tries (Perl の NET::Patricia) をラップして Python で公開しようとしています。クラスの1つに問題があります。

そのため、Python から見たパトリシア ノード (以下) のインスタンスには、「データ」プロパティがあります。読み取りはうまくいきますが、書き込みは壊れます。

具体的には:

今私のCは弱いです。SWIGの本で読んだことから、これはデータへのポインタを渡す必要があることを意味すると思います。によると:

また、生のポインター値を外部の python ライブラリーに渡す必要がある場合は、ポインター オブジェクトを整数にキャストすることでそれを行うことができます... ただし、逆の操作はできません。生の整数値からのポインター オブジェクト。

質問:

  1. 私はこれを正しく理解していますか?
  2. どうすればこれを回避できますか? %extends ですか? タイプマップ? 具体的にとても参考になります。

ノート:

  1. C ソースを変更することはできませんが、追加の .h ファイルまたはインターフェイス .i ファイルで拡張できます。
  2. 私が理解していることから、その「データ」フィールドには、私が本当に知らない「何か」の妥当な値の「何か」を含めることができるはずです。
0 投票する
2 に答える
2095 参照

c++ - コンパイルのために SWIG モジュールを分割し、リンク時に再結合することはできますか?

SWIG バインディングを初めて実装した約 2 年前に、この問題に遭遇しました。大量のコードを公開するとすぐに、SWIG が出力する C++ ファイルのサイズが大きすぎて、コンパイラがそれらを処理できないという点に到達しました。この問題を回避する唯一の方法は、インターフェイスを複数のモジュールに分割し、それらを個別にコンパイルすることでした。

これにはいくつかの欠点があります。

• 各モジュールは、他のモジュールの依存関係を認識している必要があります。この側面を処理するインターフェイス ファイルを生成するスクリプトがありますが、複雑さが増します。

• モジュールを追加するたびに、動的リンカーがコードをロードするのに必要な時間が増加します。すべてのサブモジュールをインポートするinit .py ファイルを追加したので、コードが分割されているという事実はユーザーに透過的ですが、常に表示されるのは長い読み込み時間です。

現在、ビルド スクリプト/ビルド プロセスを見直しており、この問題の解決策が現在のものよりも優れているかどうかを確認したいと考えていました。理想的には、すべてのラッパー コードを含む 1 つの共有ライブラリが必要です。

SWIGでこれを達成する方法を知っている人はいますか? 特定のプロジェクト用に Ruby で記述されたカスタム コードをいくつか見たことがありますが、これを可能にするために出力が後処理されていますが、Python ラッパーの実現可能性を見ると、それほど簡単ではないように見えます。

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

python - Python の swig 拡張機能のデバッグ

実行する以外にswig拡張機能をデバッグする他の方法はありますか

?

レガシー ライブラリlibkdtree++をラップし、すべての swig 関連のメモリ管理ポイント (借用した参照と独自の参照など) に従いました。それでも、バインディングがメモリを消費していないかどうかはわかりません。公開された各関数を段階的にデバッグできると便利です。Python から開始し、C グルー バインディングを介して C 空間に戻り、戻ってきます。

すでにその可能性はありますか?

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

c++ - Swigを介してC++とLuaの間で変数を渡します

私は多数のクラス(150以上)を持つC ++プロジェクトに取り組んでおり、各クラスには10から300程度のフィールドがあります。再コンパイルを必要としないコールバックをコーディングできるように、テスト用のスクリプトインターフェイスを提供できるようにしたいと思っています。私はPythonよりもCAPIに精通しているので、Luaでこれを実行したいと思いますが、頭痛の種を減らすことができれば、Pythonで実行できれば幸いです。

私はC++からLua関数を呼び出す方法とその逆の方法をしっかりと把握しており、基本的なデータ型をやり取りする方法を知っています。私が持っている質問は、SWIGを使用して2つの間でユーザー指定のデータ型を共有する方法です。

たとえば、C ++のある時点で、250個のフィールドを持つオブジェクトのいくつかのメンバーデータを評価したい場合があります。そのオブジェクトをLuaに渡して、生成されたSWIGラッパーを使用してそのオブジェクトを操作し、特定のフィールドを表示してから、(変更される可能性のある)オブジェクトをC++に戻して継続して使用できるようにしたいと思います。 。

また、ラッパーを使用してLuaでオブジェクトのインスタンスをインスタンス化し、それをC ++に渡して、オブジェクトの通常のC++バージョンとして使用できるようにしたいと思います。

これは可能ですか?誰かが私にチュートリアルや明示的な例を教えてもらえますか?

あなたが提供できるどんな助けにも感謝します!

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

inheritance - (SWIG / Lua)swig_lua_classの基本/親クラスのリストにアクセスする方法

特定のクラスのセットに対して生成されたSWIGラッパーで、SWIGは、そのクラスが継承するすべての親クラスのC文字列表現のリストを保持していることに気付きました。(char ** base_names)。機能があることは知っています

これは、指定された変数のデータ型の文字列表現を返します。親クラスのテーブルを文字列として返す関数もありますか?そうでない場合、この関数を書く簡単な方法はありますか?私はSWIGの内部の仕組みにまったく精通していません。

ありがとう!

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

c++ - 例外をキャッチできません!

swig を使用して、C++ ライブラリのクラスを python でラップしています。それは全体的に機能しますが、ライブラリ内からスローされる例外があり、swig インターフェイスでそれをキャッチできないように見えるため、Python アプリケーションがクラッシュするだけです!

クラス PyMonitor.cc は、目的のクラスである Monitor への swig インターフェースを記述します。Monitor のコンストラクターは、接続に失敗すると例外をスローします。この例外を PyMonitor で処理したいと思います。

PyMonitor.cc:

ただし、 connect() メソッドは例外をキャッチしません。「スロー後に呼び出された終了...」エラーが発生し、プログラムが中止されます。

私はswigについてあまり知りませんが、これはすべて問題のないC++であり、例外はプログラムを強制終了する前にconnect()メソッドに伝播するはずです。

何かご意見は?