2

特定の 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_symbolsdl_undef_symbols()もOKです。次にdl_find_symbol looks、ある種のブート シンボルが見つかりません。XS は、XS 関数を Perl から見えるようにするブートストラップ関数を作成するとdl_install_xsub()思いますが、通常の DLL にはこれがありません。

いずれにせよ、私は dds.dll 関数を Perl で直接見えるようにしたくありません。dds.dll 関数を XS コードから見えるようにしたいと考えています。単純なリンク手順のように聞こえますが、わかりません。

もっと簡単な方法があれば、私もそれで十分です。どんな助けでも感謝します。

4

0 に答える 0