問題タブ [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 に答える
164 参照

c - SWIG で C から Ruby ブロックを使用する

Ruby で C インターフェイスをラップするために SWIG を使用しています。与えられた 2 つの構造体

#eachRuby で処理できるように、現在の頂点を生成するメソッドを作成するにはどうすればよいですか。現在、私のSWIGインターフェースファイルには次のようなものが含まれています

よろしくお願いします。

--t6d

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

swig - AIX で SWIG がクラッシュする (Python と、おそらくすべての SWIG サポートを使用)

SWIG は AIX で簡単にコンパイルおよびインストールできます。残念ながら、単純なSWIG hello world (これもコンパイルされますが、それほど簡単ではありません) は、Segmentation Fault または Illegal Instruction (コンパイル/リンカー プロセスの詳細によって異なります) でクラッシュします。これは、gcc と xlc (IBM c コンパイラー) の両方で発生します。同音異義語の GNU ld がシステムにインストールされていなかったため、ネイティブ AIX リンカー ld のみを試しました。

ファイル: example.c

ファイル: example.i

Makefile スニペット:

リンカーのステップが問題です。チュートリアルの例に従う場合は、次のことを行う必要があります。

残念ながら、これはいくつかの理由で機能しません。IBM/AIX とオープン ソース コミュニティは、「共有ライブラリ」が何を意味するかについて、まったく異なる考えを持っていると思います。AIX ネイティブ リンカーから取得する最も一般的な共有オブジェクト (つまり) には、シンボルがまったく含まれていません (実際、サイズは 1kB 未満です)。また、リンカから壊れた出力を取得することも非常に簡単です (そのような場合、リンク中に次のような未解決のシンボルの非常に長いリストが表示されます)。

やるべきことをやっていると-berok、解決策がさまざまなリンカーオプションをハッキングしていることは明らかです. 実際、空でない .so ライブラリを作成するいくつかの組み合わせを、エラーを生成せずに見つけることができます。これらの組み合わせの 1 つが上記の Makefile スニペットで報告されています (他にもあります)。残念ながら、それらはすべて次の 2 つのモードのいずれかで失敗します。-bnoentry-bexpall-brtl-bshared-bM:SRE-bexpfull

また

gcc を使用するか、別のバージョンの python (私たちは 7 を持っています!) を使用しても、32 ビットでも 64 ビットでも何も変わりません。「適切な」リンク オプションを見つけることはできますが、実行時にクラッシュします。これを解決するには?

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

c++ - swig (または Boost::Python) のメンバーへのポインター

Python 用の C++ アプリからいくつかのバインディングを作成しました。

問題は、メンバーへのポインターを使用することです (最短パスを計算し、パラメーターとして最小化するプロパティを与えるためです)。

これは C++ の署名です。

これは私がやったことです(私がドキュメントで理解したことから):

これは、Python から関数を呼び出す方法です。

そして、これは私が得るエラーです:

デフォルトの 4 番目のパラメーターを使用するオーバーロードされたメソッドがあり、完全に機能します。

swigでメンバーへのポインタを使用することは可能ですか? はいの場合、トリックは何ですか?いいえの場合、最もエレガントな方法は何ですか?

ご協力ありがとうございました!

更新: Boost::python が確実にそれを行うかどうかを誰かが知っていれば、それに切り替えます。

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

lua - Swig と Lua: Lua ファイルを FILE* にマップする方法

引数として取る C 関数がありFILE*、Lua ファイルを渡してこの関数を Lua で使用したいと考えています。これには が必要だと思い%typemapます。書き方は?(Luaの学習を始めたばかりです)。

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

c++ - C++ベースクラスのPythonサブクラス

SWIGを介してPythonに公開したC++がいくつかあります。には、単一の純粋仮想関数を持つ基本クラスがあります。

Pythonでは、モジュールをインポートし、抽象クラスをベースとして使用するクラスを定義します。

そのモジュールはマネージャークラスでもあるので、新しく定義したクラスをマネージャーに追加したいと思います。

追加の定義:

期待どおりに機能しませんでした:

私は何を取りこぼしたか?私のFooクラスが「mybase」であるかどうかはわかりません。Pythonで基本クラスのコンストラクターへの呼び出しを追加しようとしましたが、それは機能しませんでした。クラスは抽象であると言いました。

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

c++ - SWIG を使用した Lua での C++ クラスの実装と継承

LuaSWIGを使用して、IInterface クラスと言って、そのインターフェイスを実装し、すべてを Lua 内でインスタンス化することは可能でしょうか? もしそうなら、それはどのように行われますか?

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

python - 両方がレンダリングしたいPythonバインディングを持つCライブラリ

Pythonでいくつかの流体力学をスケッチしています。しばらくして、もう少し速度を求めているので、実際のロジックをCで書き直し、Pythonバインディングをいくつか作成しました(SWIGを使用)。

今の私の問題は、それを良い方法でレンダリングする方法がないことです。ロジックはピクセルごとに実行されるため、ピクセルを追跡してレンダリングしたいと思います。

を受け入れるClibで関数を作成しようとすると、PythonでTypeErrorSDL_Surface*が発生します。おそらく、PyGameがそれをSDLに直接簡単にマッピングしたと考えるのは少しナイーブでした。また、Pythonは、Clibs"init"に。を返す​​ようにした場合の対処方法がわからないようですSDL_Surface*

これを行うための良い方法は何ですか?C lib内のすべてをレンダリングするだけであれば、問題はありません。しかし、私はそこにいくつかのGUIを配置したいと思います(Pythonを使用)。C libは、どのピクセルが「ダーティ」であるかをすでに追跡しています。そのリストを公開してPythonにループさせ、ダーティピクセルごとに関数を呼び出す必要がありますか?この種の巨大なループが、アプリの一部をCで書き直したかった正確な理由であるため、悪いようです。

そして、誰かがそれを提案する前に、boost.pythonは今インストールするのが少し重いので(私はWindowsを使用しているので)、私は今のところSWIGに固執します(誰かが「ちょうど」ブーストをインストールする賢い方法を持っていない限り) .python?)。

ここで銀の弾丸を期待しています。SDLを実行してClibを作成し、Pythonとレンダリングターゲットを共有してPyGameを実行するにはどうすればよいですか?

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

c++ - SWIG を使用して C++ で使用する Lua オブジェクトをラップする

現在、C++ オブジェクトをインスタンス化し、Lua で SWIG バインディングを使用して渡す方法を知っています。必要なのはその逆です。

Lua & C++ & SWIG を使用しています。

私は C++ のインターフェースと lua のオブジェクトを持っています。これらは同じ仕事をし、同じ構造を持つメソッドを実装しています。これらのオブジェクトを lua でインスタンス化できるようにしたいのですが、似ているインターフェイスへのポインターを使用して C++ で渡すことができます。

そのため、上記の lua オブジェクトのハンドラーとして機能するインターフェイスの C++ 実装を作成することは想像できますが、これを行う方法はわかりません。このクラスは、C++ の世界で lua オブジェクトの代表またはプロキシとして機能します。

明確にするために、私が尋ねた同様の質問への回答で使用されている次のコード例から始めます。

C++ コード:

ルアコード:

ここで、Bank という C++ のクラスがあるとします。

ここで欲しいのは、lua で次のことを行うためのメカニズムです。

プロキシとして機能する C++ クラスをインスタンス化し、すべての lua 関数を含む lua テーブルに渡すなど、追加の手順を実行する必要がある場合は、次のようになると想像できます。

C++ コード:

ルアコード:

ここでの問題は、ProxyAccount クラスをどのように実装するか、または settable の関数シグネチャがどのように見えるかさえわからないことです...

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

python - gtkglext にリンクすると SWIG が Python をクラッシュさせるのはなぜですか?

SWIG を使用して gtkglext にリンクすると、終了時に Python がクラッシュします。なぜこれがクラッシュするのですか?

test.i:

セッション:

何か案は?ありがとう...

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

c++ - C++ から Lua テーブルの関数を呼び出す

たとえば、Luaテーブル/オブジェクトがあります。

そして、この Lua テーブルにはchew、パラメーターを受け取る という名前の関数が含まれています。

私はSWIGも使用しており、たとえばクラスがありCPersonます:

Lua からこのオブジェクトのインスタンスを取得できます。

私ができるようにする必要があるのは、次の Lua コードです。

パラメータを渡して、テーブル内の関数person:eatを呼び出す場所。chewbannana

は C++ で実装されているため、クラスにすでに Lua 状態ポインターがあると仮定して、CPerson実装するにはどのような変更が必要ですか?Eat()CPerson

Edit1: C++ クラスを Lua にバインドする方法を知りたくありません。これを行うための SWIG が既にあります。Lua テーブル内で C++ から Lua 関数を呼び出す方法を知りたいです。

Edit2:CPersonクラスとbannanaテーブルはどちらも一般的な例です。クラスにはすでに LuaState ポインター/参照があり、メソッドの関数シグネチャは回答者が変更できると想定できCPersonますEat