問題タブ [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.
c++ - Swig を使用して Python 配列を C++ ベクトルに渡す
私はPythonでオブジェクトの配列を持っています
そして、それらを C++ 関数に渡して計算を実行したいと考えています。SWIG を使用してインターフェイスを作成しています。渡されたオブジェクトのクラス型は、C++ で既に定義されています。
これを行う最善の方法は何ですか?
php - PHP拡張機能を作るためのSWIG、試してみましたか?
C (C++ ではない) で書かれたいくつかの小さなライブラリとラッパーがあり、拡張機能を介して PHP で利用できるようにしたいと考えています。適切な PHP 拡張機能の作成に関するいくつかのチュートリアルを読みましたが、難しくはないように思えますが、ライブラリに加えて拡張機能を維持するという面倒なことはしたくありません。
SWIGは Zend PHP 5 と互換性のある拡張機能の構築をサポートしていると読みましたが、これは私にとって完璧です。ただし、SWIG のドキュメントによると、サポートはベータ版のようです。
C での使用法のメタ例として、私のライブラリはかなり一般的です。
SWIG を使用してライブラリの拡張機能をこれほどシンプルにする経験を共有できる人はいますか? ビルドのオプション部分として PHP 拡張機能を作成するために SWIG を使用している、C で書かれたフリー/オープン ソース プロジェクトを知っている人はいますか?
フィードバックをお待ちしております。それが肯定的である場合、私は SWIG を実際に理解することに時間を割きます。
python - Python の拡張 - swig や Cython ではなく、swig に拡張する
Python コードのボトルネックを見つけ、psycho などで遊んでみました。次に、パフォーマンスのために ac/c++ 拡張機能を作成することにしました。
swig の助けを借りて、引数などを気にする必要はほとんどありません。すべて正常に動作します。
ここで私の質問: swig は、実際の .pyd または .so コードを呼び出す前に、多くの「チェック」と「PySwigObject」を行う非常に大きな py ファイルを作成します。
このファイルを手書きしたり、swig に任せたりすると、さらにパフォーマンスが向上するかどうかを経験したことがある人はいますか?
php - swig インターフェイスのコンパイル後にシンボルが見つからない
Linux共有オブジェクトのphpインターフェイスをコンパイルしようとしていますが、swigからの出力を使用して問題なくコンパイルできましたが、ロードしようとすると、シンボルが見つからないというエラーが表示されます。
今、私は zend を見てきましたが、それは php フレームワークのようです。リンクするライブラリが不足していると思いますが、どのライブラリかわかりません。
他の誰かが以前にこれを行い、それを機能させましたか?
編集:
php - swig を使用して c++ の php インターフェイスを生成する方法
私は何百ものことを試しましたが、swig を使用して .so ファイルを php と連携させることができません。私はファイルを生成できます。その後、Zend をコンパイルし、それをリンクして .so を作成する必要がありましたが、ロード時にセグ フォールトが発生し続けます。
swig を使用して C++ ライブラリ用の PHP インターフェイスを生成する方法を説明してもらえますか? swig Web サイトのドキュメントは役に立ちません。
python - C to Python via SWIG: void** パラメータを取得して値を保持できません
私は次のようなCインターフェースを持っています(簡略化):
これは次のように使用されます。
Operation() がバッファ p を割り当て、GetFieldValue が p をクエリし、Cleanup が p を解放することに注意してください。私は C インターフェイスを制御することはできません。そのコードは他の場所で広く使用されています。
SWIGを介して Python からこのコードを呼び出したいのですが、ポインターをポインターに渡し、その値を取得する方法の良い例を見つけることができませんでした。
これを行う正しい方法は typemap を使用することだと思うので、C 側で p を自動的に逆参照するインターフェイスを定義しました。
ただし、次の Python コードを動作させることができませんでした。
test.Operation() を呼び出した後、p は常に初期値の None を保持していました。
SWIG でこれを行う正しい方法を理解するための助けをいただければ幸いです。それ以外の場合は、C コードの周りに C++ ラッパーを記述して、Python がポインターを処理する必要がないようにする可能性があります。そして、そのラッパーを SWIG でラップします。誰か私を止めて!
編集:
Jorenkoのおかげで、次の SWIG インターフェイスを使用できるようになりました。
この SWIG インターフェイスを使用する Python コードは次のとおりです。
奇妙なことに、python コードでは、test.GetFieldValue(p) は意味不明な結果を返しますが、test.gfv(p) は正しい値を返します。void* の typemap にデバッグ コードを挿入しましたが、両方とも p の値は同じです! それについて何かアイデアはありますか?
更新: ctypes を使用することにしました。はるかに簡単です。
c++ - SWIG を使用した C++ と Ruby 間のポリモーフィズム
SWIG を使用して、Ruby スクリプトを C++ ライブラリにラップします。Ruby では、C++ クラスから継承できますが、結果のポインターを C++ 関数にポリモーフィックに渡すことはできません。
これが具体的な例です。SWIG インターフェイス ファイルは、仮想関数 sound() を持つ基本クラス Animal を定義します。
私はクロスランゲージ ポリモーフィズムのために SWIG ディレクタを使用していますが、これは機能していないようです。Ruby スクリプトは次のようになります。
スクリプトの最終行で次のエラーが発生します。
どういうわけか、SWIG では、Ruby オブジェクトをアニマルへのポインターとして扱うことができません。何か案は?
c++ - SWIG 経由で c++ に lua を埋め込む方法
現在、クラス用の SWIG ラッパーのセットがあり、すべてビルドされています。lua 仮想マシンを作成してラッパーをロードすることはできますが、その時点で困惑しています。グーグルは、swigのluaにc ++を入れる方法を教えてくれますが、luaをc ++に入れる方法は教えてくれません。
本当にやりたいことは、lua オブジェクトをインスタンス化し、それをメインのゲーム エンジン オブジェクト ポインターに渡すことだけです。そこから管理できます。
c++ - SWIG Lua と配列の受け渡し
私は現在、次のluaコードを持っています:
ここで、g:SetVertexes() は C++ で次のように実装されます。
このエラーが発生します:
何か案は?
c++ - swig でラップされた C++ クラスのインスタンスを lua スタックにプッシュするにはどうすればよいですか?
swig でラップされ、lua に登録されたクラスがあります。このクラスのインスタンスを lua スクリプトで作成でき、すべて正常に動作します。
しかし、新しい X への呼び出しを使用して C++ コードで作成されたクラスのインスタンスがあり、呼び出したい関数を含む la lua_state L があり、1 つの引数、X のインスタンスを受け入れるとします...その関数を呼び出すにはどうすればよいですか。これが問題のコードの(一部)です(エラー処理のものは省略しました):
main.cpp
mainmenu.lua
現時点で私が見つけたのは、swig で生成された cpp ファイルからいくつかの機能を公開し、それを呼び出すことだけです。これにはいくつかの理由があります...複数のモジュールがある場合は機能せず、swig ファイルのデフォルトのリンケージ仕様を変更する必要がありました (-DSWIGRUNTIME= を使用)。
以下を main.cpp に追加します
モジュールへのポインターを取得し、次に型へのポインターを取得し、swigs 関数を呼び出して登録します。人間が読めるはずのないファイルを掘り下げなければならないのは不合理なことでした (そのため、ファイルの上部に記載されています)。(しかし、それは機能します!)
確かに、私がやろうとしていることを達成するためのより良い方法があります。
高レベルの pov からの PS 私が望むのは、GuiInst の Object Factory によって作成された Gui コンポーネントを lua が参照しないようにすることです。いくつかの非常に単純な (そして非 swig) Python モジュールを除いて、スクリプト言語に機能を公開するのはこれが初めてなので、アドバイスを受ける準備ができています。
アドバイスをありがとう!
RBerteig によるコメントへの応答
GuiInst のコンストラクターは、lua がそのインスタンスを構築するのを防ぐために、swig が実行されるときにプライベートに #defined されるため、私にとってはうまくいきません。私が防ごうとしていたのは次のことでした(luaで):
これは "g=new GuiButton" を呼び出し、GuiRegionVertical (さまざまな理由でポインターを格納する必要があります) に登録し、"delete g" を呼び出します。GuiRegionVertical には g へのポインターがぶら下がったままになります。
本当に必要なことは、GuiRegionVertical::Add(GuiButton*) が GuiButton* の参照カウントをインクリメントし、GuiRegionVertical のデストラクタがすべてのコンテンツの参照カウントをデクリメントすることだと思いますが、これがどのように行われるかはわかりませんスウィグで行われます。
これにより、プライベート コンストラクター、Gui オブジェクト ファクトリ、厄介な外部関数が不要になります。
私はこれについて間違っていますか?
ありがとう。