問題タブ [xs]
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.
perl - XS を使用して Perl プログラムで Ada モジュールを使用するにはどうすればよいですか?
最近 Ada の学習を始めました。Ada と C オブジェクト ファイルをリンクして多言語プログラムまたはライブラリを構築できることを知っています。XS を使用して Perl から Ada コードを呼び出すことは可能ですか?
perl - sv_setref_pv() が void * 引数を IV スロットに格納するのはなぜですか?
Perl API を見ていて、なぜだろうと思っていました。
sv_setref_iv()
IV
その引数をIV
スロットに格納し、sv_setref_nv()
NV
その引数をNV
スロットに格納し、- しかし、その引数をスロットではなくスロットに
sv_setref_pv()
格納しますか?void *
IV
PV
私には予感があります (CUR フィールドと LEN フィールドはそのような変数には意味がありません)、XS に詳しい人の意見を聞きたいです :-)
perl - ExtUtils::Constants を使用してシステム定数にアクセスする
ExtUtils::Constant を使用してシステム ヘッダーから C 定数をエクスポートしようとしています。
ドキュメントに従って、私は Makefile.PL に持っています:
次に、Bar.xs で:
ただし、テストを実行すると:
私は得る:
これは、EPOLLOUT が定数として存在する場合には当てはまりません。つまり、無効な識別子です。
これはどのように行われるべきですか?これが EPOLLOUT を正しい値に設定できないことにまったく驚いていません-ドキュメントには、 ExtUtils::Constant 「ヘッダーファイルをスキャンしてこれらの定数を抽出するルーチンが含まれていません」とも書かれています-しかし、.xs
生成されたコードは終わっています私の頭では、Foo::Bar::EPOLLOUT が undef 値を持つ識別子として認識されないことに少し驚いており、そうでないという事実により、次に何を試せばよいのか混乱します。
ExtUtils::Constant を使用する別の perl モジュールのソースを検討しますが、exports システムが定義する唯一のものは POSIX であり、これがコアです (他の誰かが知っている場合はコメントを残してください)。
24 時間後: Perl Monksに相互投稿されました。
c - パラメータを指定して perl ルーチンを呼び出す
C プログラムで perl ルーチンを呼び出す必要があります。perl ルーチンは次の引数を取ります:$a, $b, $c
とは整数、は文字列 (バイナリ文字を含む場合があります) です$a
。perlcallによると、呼び出しを行う手段は次のとおりです。$b
$c
call_argv(...)しか使えないようですが、2つ質問があります
- perl ルーチンに整数を渡す方法
- (バイナリ) 文字列を perl に渡すにはどうすればよいですか?
のような機能があればいいのに
c++ - XS を使用して c++ と perl をインターフェイスする方法は?
これは学校の事です。
問題は次のとおりです。
私たちはボンバーマンのクローンに取り組んでおり、スクリプト インターフェイスを実装して、ユーザーが独自の「人工知能」を作成できるようにする必要があります。Perl を使用することにしました。現在、次のように perl モジュールをビルドしています。
ファイルは次のとおりです(テスト目的):
SaibApi.xs:
SaibApi.hpp
Makefike.PL:
わかりやすくするために、typemaps ファイルを除外しました。
モジュールは正しく構築されており、Perl で SaibApi クラスをインスタンス化できます。ここでの問題は、明らかにクラスを c++ と perl で同時にインスタンス化する方法がないことです。私たちがやろうとしているのは、単純なメソッドを介して C++ コード (マップ、プレーヤーなどを含む多数の std::list など) からオブジェクトを取得できるようにする単純な API をユーザーに提供することです。
例えば:
私たちは多くの調査を行いましたが、XS に関するドキュメントは少し不足しています。私たちは今立ち往生しています。c++ と perl で同時にクラスをインスタンス化して、メソッド_lol
を使用せずに c++ の部分で設定し、perl の部分で出力できるようにするにはどうすればよいでしょうか? SetLol()
不可能な場合、代替手段は何ですか?
perl - Perl での DLL のロード
特定の 32 ビット DLL (dds.dll) とヘッダー ファイル (dds.h、C++ スタイル) があります。ソースはありますが、変更したくありません。私はcygwinを使用してWindowsを使用しています。
Perl を介して直接ではなく、XS を介して DLL 内の関数にアクセスしたいと考えています。XS初心者です。
【使い方がわからないWin32::API
。DLL 関数には構造体の入力と*struct
入力があり (後者は関数によって変更されます)、私にはわかりませんWin32::API::Struct
。それも一案かとは思いますが、とりあえず諦めました。】
Perl と XS の間で整数のリストを渡すことができるので、その部分が機能します。私の計画は#include "dll.h"
、XS コードで整数のフラット リストを渡し、XS でリストを構造体に変換し、構造体とその他の引数を DLL 関数に渡し、結果の構造体を整数のフラット リストに変換して返すことです。リストをPerlに。
何が起こっているのかを理解するために、XSLoader.pm を必要最小限に減らしました。私自身の XS で生成された .dll で動作します。
同じように dds.dll を読み込んでみましたが、実際には意味がないと思います。過ぎdl_require_symbols
てdl_undef_symbols()
もOKです。次にdl_find_symbol looks
、ある種のブート シンボルが見つかりません。XS は、XS 関数を Perl から見えるようにするブートストラップ関数を作成するとdl_install_xsub()
思いますが、通常の DLL にはこれがありません。
いずれにせよ、私は dds.dll 関数を Perl で直接見えるようにしたくありません。dds.dll 関数を XS コードから見えるようにしたいと考えています。単純なリンク手順のように聞こえますが、わかりません。
もっと簡単な方法があれば、私もそれで十分です。どんな助けでも感謝します。
perl - XS を使用して perl で c 関数を公開する
この形式には複数の c 関数があります。
はint
戻り値の型です。
result[]
関数が埋める文字列を含む
XS などの関数を作成し、perl で公開するのに最適なものは次のとおりです。
関数の戻り値を取得する
perl で char result[] 値を取得する
以下を試しましたが、以下は戻り値のみを返します
何か助けていただければ幸いです。