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

*1:誤解があったら教えてください

*2:サンプルにあったGetTempPath() の呼び出し