PHP 4.4.4 (より正確には bamcompiler) では、w32api FFI を使用して、次のように iup GUI ライブラリとやり取りしようとしています。
<?
$iup=new win32;
$iup->registerfunction("int IupOpen (int argc,string argv) From iup.dll");
$iup->registerfunction("int IupClose () From iup.dll");
$iup->registerfunction("int IupMainLoop () From iup.dll");
$iup->registerfunction("long IupDialog (long child) From iup.dll");
$iup->registerfunction("int IupShow (long child) From iup.dll");
$iup->registerfunction("long IupHboxv (long &child) From iup.dll");
$iup->registerfunction("long IupLabel (string title) From iup.dll");
$iup->registerfunction("long IupButton (string title,string action) From iup.dll");
$iup->registerfunction("long IupSetAttributes (long ih,string attrs) From iup.dll");
$iup->IupOpen(null,null);
$b=$iup->IupButton("vasile","apasa");
$l=$iup->IupLabel("asta e vasile");
$hbc=pack("L*x",$l,$b);
$hb=$iup->IupHboxv(&$hbc);
$dia=$iup->IupDialog($hb);
$iup->IupSetAttributes($dia,"SIZE=300x200");
$iup->IupShow($dia);
$iup->IupMainLoop();
$iup->IupClose();
?>
私が得るのは空のウィンドウだけです。
コントロールの 1 つのアドレスを IupHboxv ex:(&$b) に渡すと、そのコントロールがウィンドウに表示されるので、パックされた文字列のアドレスと関係があると思います。
w32api は薄すぎるので、pack 関数については Perl のドキュメントを読みました。