Windows + PHPで、VBなどで開発されたDLLを利用する方法

追記: 2013-03-05
PHP5.4系ではextフォルダにあるphp_dotnet.dllをロードするように
php.iniで設定すれば動きました。

PHPでWindowsで作成されたDLL(Dynamic Link Library)を利用する方法です。
直接PHPからDLLは利用できないようですが、
Windowsのレジストリに登録してCOM(Component Object Model)として利用することによって
PHPでもDLLを呼び出すことが可能になるようです。

なんとなくやってできちゃったというレベルですのでもっといいやり方があれば教えてください。

Dllのレジストリ登録

regsvr32コマンドでDLLファイルを登録します。

C:\>regsvr32 "c:\targetdir\hoge.dll"

クラス名をチェックしたい場合は、
regeditを開いて、DLL名で検索を行うと利用できるクラス名をチェックすることができます。

PHPからCOMの呼出

以下はプログラムの例です。
comオブジェクトを作成してプロシージャーとして作成されたDLLの中身をメソッドとして呼び出しています。

<?php
$co = new COM("Compornent.ClassName");
$co->procedure("argument");

使い方

php.net マニュアルサンプルより
http://php.net/manual/ja/class.com.php
ワードを起動して直接テキストを入力後保存して終了させています。

例1 COM の例 (1)
<?php
// word を起動します
$word = new COM("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";

// 前面に移動させます
$word->Visible = 1;

// 空のドキュメントを開きます
$word->Documents->Add();

// 何か複雑なことを行います
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");

// word を閉じます
$word->Quit();

// オブジェクトを開放します
$word = null;
?>

レジストリの解除方法

regsvr32コマンドに/u引数を入れると登録レジストリを解除できます。

C:\>regsvr32 /u "c:\targetdir\hoge.dll"

注意

regsvr32で登録したDLLは、
登録したディレクトリを記録しています。
登録した場所からDLLファイルを移動する場合にはもう一度登録のやり直しが必要になります。