Perlからの自作DLLの呼び出しに成功しない(Win32::API 経由)
Windowsである程度の規模の自作DLLをperlから呼び出したいと思ったんですが、
現状、取りえる選択肢は
の3つかなと思っております。
で、ちょっと調べた限りじゃXSはXS用にCのコードを書く必要があるみたいだし、一部で流行のSWIGは元のソースを書き換える必要がなさそうなんだけど、DLLの再コンパイルが必要そうなところで面倒になってNG*1。それで、Win32::APIを使うのが良いかなと思ったんだけど、自作APIの初期化関数を呼ぶところで強制終了となってしまう。Kernel32.dllの関数はOK*2
特に引数のポインタの扱いがいまいちよくわからない。例えばNULLポインタを渡して初期化されたオブジェクトを取得する関数HogeInit()があったとして、C言語で書くと
MyObject *obj = HogeInit(NULL);
ってところをperlの場合
my $HogeInit = new Win32::API('mydll','HogeInit','P','P'); my $obj = HogeInit->Call(0);
って書いて良いのでしょうか?多分だめそうな気がするんだが、本来はどう書くんでしょう?
識者が読んでいたらコメントよろしくお願いしますm(_ _)m