特定の 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 コードから見えるようにしたいと考えています。単純なリンク手順のように聞こえますが、わかりません。
もっと簡単な方法があれば、私もそれで十分です。どんな助けでも感謝します。