問題タブ [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 投票する
3 に答える
3671 参照

java - SWIG ポインターと Java 配列

SWIG のドキュメントでは、C でのさまざまな入力タイプについて、次のように説明しています。

... Java では、次のようにすべて単一の型の引数を取ります。

同様に、C の戻り型の場合:

... 3 つの関数はすべて、Java オブジェクト変数に割り当てられる Foo オブジェクトへのポインタを返します。最後の関数では、リリース時に Java ガベージ コレクションが処理する値型の割り当てが必要です。

しかし、spam5() が配列へのポインタを返すとします。Java では、個々の要素にアクセスするために配列セマンティクスを使用する必要がありますが、これだけでできるとは思いません。

コンパイラが (Foo[]) へのキャストを受け入れるとは思えませんが、これは SWIG ではどのように機能するのでしょうか?

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

c++ - SWIGラップタイプのPythonコールバック

図のように、PythonコールバックをC++ライブラリに追加しようとしています。

データがswigを通過しておらず、PyObjectではないため、これは失敗します。

私は使ってみました:

ただし、テンプレートであるため、2番目のパラメーターに何を使用すればよいかわかりません。'正しい'SWIGTYPEをハードコーディングしても、通常はPyEval_CallObjectでsegfaultが発生します。

だから私の質問は:

  1. スウィッグタイプのラッピングを呼び出すための最良の方法は何ですか?

  2. 私もここで正しい方向に進んでいますか?ディレクターはコールバックを実装することを約束しているように見えましたが、Pythonを使用したディレクターの例は見つかりませんでした。

更新:適切なラッピングが生成されています。shared_ptrsを返し、それらを正しく呼び出すことができる他の関数があります。

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

c++ - SWIGを使用してC++アプリケーションにRubyを埋め込みますか?

私は過去にSWIGを使用してRuby-C++バインディングを正常に作成しました。ここで、C ++コードは、Rubyスクリプトが接続されたダイナミックライブラリとしてコンパイルされました。

ただし、逆にやりたいと思います。C ++を使用して実行可能ファイルを作成し、Rubyコードをロードして実行できるようにします。Rubyは、C ++側でも定義された関数を呼び出すことができるはずです(当然、そうでなければ、必要なのは「system()」呼び出しだけです)。

SWIGはこれを達成するための手段を提供しますか?

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

c++ - C++ コードでの Python GIL のリリース

SWIG を使用してラップし、Python で使用する C++ で記述されたライブラリがあります。一般に、いくつかのメソッドを持つ 1 つのクラスがあります。問題は、これらのメソッドの呼び出しに時間がかかることです。アプリケーションがハングする可能性があります (これらのメソッドを呼び出すときに GIL は解放されません)。だから私の質問は:

これらのメソッド呼び出しのために GIL を解放する最も簡単な方法は何ですか?

(Cライブラリを使用した場合、これを追加のCコードでラップできることは理解していますが、ここではC++とクラスを使用しています)

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

python - C構造体の関数へのポインタでSWIGを使用する

構造体で関数へのポインタを使用する C ライブラリ用の SWIG ラッパーを作成しようとしています。関数ポインターを含む構造体を処理する方法がわかりません。簡単な例を次に示します。

test.i:

サンプル セッション:

t.my_func(1)を 2 に戻すことが可能かどうかは誰にもわかりませんか?

ありがとう!

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

windows - C++ ソース ファイルからの Windows DLL の作成

ダイナミック リンク ライブラリを作成するために使用する C++ のソース ファイルが複数あります。

gcc -shared および ln を使用して Linux でこれが発生していることがわかります

ただし、Windows の場合、ソース ファイルを変更して DLL を生成する必要があると思います。

提供されたソース ファイルを使用して DLL (Linux の *.so に似たファイル) を生成する方法はありますか。間違っている場合は修正してください。*そうは Linux の dll だと思います。

これが必要な理由は、Windows Platfrom の Python で C++ 関数を呼び出すために SWIG を使用するためです。Windowsでdllを生成する必要があるステップで立ち往生しています。

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

c++ - dllからの実行関数のアクセス違反

彼と一緒に作業するためのDLL、C++のインターフェイスがあります。bcb、msvcでは正常に動作します。Pythonスクリプトを使用して、このライブラリの関数にアクセスしたいと思います。Swigを使用してpython-packageを生成します。

ファイルsetup.py

ファイルdcm.i

これらのコマンドを実行します(Pythonは拡張子.pyに関連付けられています)

このDLLを使用する

最後の文字列でアクセス違反が発生します。また、入力パラメーターを使用するすべての関数でアクセス違反があります。

DcmInterface.h(インターフェース)

uRegistrationMessage.cpp(DLLでの実装)

工場

DcmFactory.h(クライアントコードでDLLを使用)

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

lua - SWIG を使用して作成したシェーダー オブジェクトで wxlua バインディングが機能しない

wxwdigets を使用してクラスを作成しました

SWIG 入力用の abc.i ファイルを次のように作成します。

// wxIPV4address クラス IPV4addressLua のラッパー //: public wxIPV4address ................... ....

次に、SWIG バインディングを生成するための make ファイルを作成します: ===

...

===== 私はこのように私のものを生成します:-

g++ -g -shared -fPIC -o wxAppManagerLua.so ./wxAppManager_wrap.cxx ./wxAppManager/src/XMLReader.cpp ./wxAppManager/src/wxAppManager.cpp -I./ -I./wxAppManager/inc/ -I/usr/local/lib/wx/include/gtk2-ansi-debug-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXGTK__ -pthread -L/usr/local/lib -pthread -lwx_gtk2d_richtext-2.8 -lwx_gtk2d_aui-2.8 -lwx_gtk2d_xrc-2.8 -lwx_gtk2d_qa-2.8 -lwx_gtk2d_html-2.8 -lwx_gtk2d_adv-2.8 -lwx_gtk2d_core-2.8 -lwx_based_xml-2.8 -lwx_based_net-2.8 -lwx_based-2.8

=====

lua ファイルを次のように記述します。

…………

...

私のコードは最後の行で失敗し、..

===== 注意してください ..... wxSockAddess は、クラスの派生元である wxIPV4address の基本クラスです。

このリンクをチェックしてくださいhttp://docs.wxwidgets.org/trunk/classwx_i_paddress.html

誰でも助けることができますか?

私の診断は:-

基本的な問題は、sos を作成するたびに... SWIG を使用して lua から関数またはクラスを参照しようとするときです.... wxwidget クラスまたは関数を参照するまで問題なく動作します...私の 2 つの sos でさえ参照できますsos のクラスに ... wxwidgets クラスではありません .... wx.so の任意のクラスを wx.so の他のクラスに引き続き参照すると、動作します ...

ルアが私のクラスのタイプを wxwidgets のクラスに理解するのを妨げている原因を教えてください。

wxwidgets のバインディングが SWIG ではなく従来の方法で生成されていることは知っています。これは問題の原因ですか?

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

c - C 構造体を SWIG でラップする

次の型定義を含む C ヘッダー ファイルがあります。

この構造体を SWIG でラップしようとしましたが、どうやら間違っているようです。私のSWIGインターフェースファイルは次のようになります

しかし、ヘッダー ファイルの内容をインターフェイス ファイルにコピーすると、後者は次のようになります。

次の方法でRubyから構造体にアクセスできます

ヘッダー ファイルを自動的にラップする方法はありますか? ヘッダー ファイルの内容を変更するたびにインターフェイス ファイルにコピー アンド ペーストしたくありません。

よろしくお願いします。

-- t6d