« 歯車導入。 | トップページ | 呑む?。 »

2010年12月 1日 (水)

64 で XPOP2 (XPOP普及委員会その16)

XPOP普及委員会ともあろうものが、重要なことに今まで触れずに来てしまった。



あなた、64bit な Windows で、XPOP2 動いてますか?




俺が今まで試した限りでは、作者のページから落とせる XPOP2 の 64bit 版 ( XPOP20.64.xsiaddon ) は、完全には動かないんですよね。 どうやら、ポップアップメニューのタイトルバーの部分の文字や色を指定すると、エラーを吐いて止まってしまうようなのです。

例えば、

 DisplayPop( "Kane;Dase;---;Gorua", "GoruaPop", "blu" );

こう書くと、本来であれば GoruaPop というタイトルで、青っぽい背景のタイトルバー付きの XPOP メニューがが出るはずなんです。 第2引数はタイトル文字、第3引数は XPOP であらかじめ用意されている色ですから。 

でも実際に走らせてみると、
Xpop64_invalidargument
引数がアカンというエラーが出てしまいます。 XPOP の本体、DisplayPop コマンドのエラーですね。


タイトルバーに何も指定しなければ、ちゃんと動くように見えます。 

 DisplayPop( "Kane;Dase;---;Gorua" );

このように第2引数・第3引数を取っ払ってしまえば、
Xpop64_noargument
ちゃんとポップアップされてます。
でも味もそっけもないポップアップメニューになりますね。 
しかも何だか、見覚えのないタテの分割線もある・・・。

ともかく、これまで自分で書いてきた XPOP 関係のツールの多くはタイトルバーを使うスクリプトになっちゃってるし、タイトルバーの色や文字によってある状態をユーザに知らせるような役割を持たせてしまったりしているもんだから、やはりタイトルバーが使えないと困るのです。


ちなみに 32bit の Windows XP ではなんら問題ありません。 自作ツールのほとんどはこの環境で開発してきました。 最近になって 64bit の XP や 64bit の Win7 も使うようになって、急に XPOP2 でエラーを吐き始めて困りました。


で、たしか有田さんが見つけれくれた解決方法。
XPOP2 の代わりに、RCTools4.1 を使う。


RCTools も同じく Reinhard Claus さんが作ったスヴァらしいツールですが、RCTools4.1 の中には DisplayPop2 というコマンドが含まれています。 詳しくはわかりませんが、XPOP2 の DisplayPop コマンドと互換性があるように見えます。これを使うと上手く行くんです。

RCTools4.1 をダウンロードし ZIP を解凍すると、

 RCTOOLS41.xsiaddon
 RCTOOLS42-32.xsiaddon
 RCTools42_2011_x64.xsiaddon


この3種類が出てきます。

付属のドキュメントを見ると、

 RCTOOLS41.xsiaddon : 64bit でも使えるけどバージョンは古い 4.1 のままだよ
 RCTOOLS42-32.xsiaddon : バージョン 4.2 だから最新版だけど 32 bit しか使えないよ

という意味の説明があります。 RCTools42_2011_x64.xsiaddon については触れられていませんね。 以前は RCTools42_2011_x64.xsiaddon はなかったはずで、最近になって追加されたのだと思います。

この中の RCTOOLS41.xsiaddon をインストールします。 すると DisplayPop2 コマンドが使えるようになるので、XPOP スクリプトの中でこれまで DisplayPop( xxxx, yyyy, zzzz ) などと書いていた所を DisplayPop2( xxxx, yyyy, zzzz ) に書き換えれば、タイトルバーの指定も含めてちゃんと動きます。 XPOP2 に付属するコマンドではなく、RCTools4.1 に付属するコマンドを呼び出して利用するということですね。 うむ、良かった。 俺、XPOP 無かったら死ぬもん。


でもですね、既存の XPOP スクリプトを書き換えなきゃいけないわけで、そりゃもうめんどくさいわけですよ。 でも今まではこれでやってきました。 64bit 環境でだけ、いちいち書き換えていたのです。



でも最近別の方法も見つけましてね。

上でも書いた RCTools42_2011_x64.xsiaddon なのですが、ためしにこれをインストールしてみると、DisplayPop2 コマンドはもはやなくて、DisplayPop になっているではありませんか。 つまりこれまで XPOP2 に付いてきたコマンドと同じ名前になっています。 あれえ?

Rc42_displaypopcommand


ってことで、RCTools42_2011_x64.xsiaddon がインストールされた状態で先ほどのスクリプトを走らせてみると、
Rc42_displaypop
ちゃんと動きました (;゚∀゚)=3
  タイトル文字も背景色も来ています。


どうやらこの RCTools42_2011_x64.xsiaddon は、今までの XPOP2 と互換性のある DisplayPop コマンドでポップアップしているようなので、自作の XPOP スクリプトでもこれを使うのが一番なのではないかと思いました。


そしてこのコマンドを利用する以上、XPOP2 のインストールはもはや要らないはずだ、と思って XPOP2 をアンインストールしてみたところ、ちゃんと XPOP できています。 XPOP2 のパッケージに含まれるものは DisplayPop コマンドだけでしたから、そしてそのコマンドが RCTools 4.2 に含まれている以上、もう XPOP2 が無くても大丈夫なんですね。たぶん。






しかし 32bit では・・・・・。

同じように 32bit でも RC4.2 をインストールすればもはや XPOP のインストールが要らなくなるのだろうかと思い、RCTOOLS42-32.xsiaddon をインストールしてみたんですが、ありゃ? 
Rc42_32bit
バージョンは同じ 4.2 でも、RCTools42_2011_x64.xsiaddon とは違ってこの RCTOOLS42-32.xsiaddon の方は、DisplayPop2 コマンドになってますね? なので従来の XPOP2 の DisplayPop コマンドとはカブりません。共存しています。 

互換性がある以上、DisplayPop を使っても DisplayPop2 を使っても良いことになると思いますが、従来は DisplayPop を使っていたんだから、わざわざ DisplayPop2 に書き換える必要性は薄いですよね。



ということで、これまでに書いた XPOP スクリプトを全く修正しなくて済む方法としては、


 32bit 環境 = 従来どおり XPOP2 を使う( XPOP2 の DisplayPop コマンド使用)

 64bit 環境 = XPOP2 は不要。RCTools42_2011_x64.xsiaddon を使う(このパッケージに含まれる DisplayPop コマンドを使用)


ということになると思います。 

ちなみに、XSI 7.5 + XP64 に RCTools42_2011_x64.xsiaddon を入れてもちゃんと動きました。 2011 以降用のような名前になってるからパッと見は 7.5 じゃ動かなさそうですが、実際は 7.5 でも動いたんですよ。



一応、俺が実験した組み合わせを書いておきます。

WindowsXP 32
XSI 7.01 / 7.5 / 2011.5
xPOP20.xsiaddon
XPOP2 付属の DisplayPop コマンド使用。問題無し。


WindowsXP 64
XSI 7.5
xPOP20.64.xsiaddon
XPOP2-64 付属の DisplayPop コマンド使用。タイトルバーの機能だけ効かない。


Windows7 64
XSI 2011.5
xPOP20.64.xsiaddon
XPOP2-64 付属の DisplayPop コマンド使用。タイトルバーの機能だけ効かない。


WindowsXP 64 / Windows7 64
XSI 7.5
RCTOOLS41.xsiaddon
RC41 付属の DisplayPop2 コマンド使用。タイトルバーも含めて問題無し。 が、既存のスクリプトは DisplayPop を DisplayPop2 に書き換える必要有り。


WindowsXP 64bit
XSI 7.5
RCTools42_2011_x64.xsiaddon
RC42 付属の DisplayPop コマンドを使用。問題無し。


Windows7 64bit
XSI 2011.5
RCTools42_2011_x64.xsiaddon
RC42 付属の DisplayPop コマンドを使用。問題無し。



ということで、RCTools42_2011_x64.xsiaddon をインストールしている場合はXPOP2 をアンインストールしてしまい、XPOP2 を利用したツールは以降、RCTools4.2 付属の DisplayPop コマンドを使いましょう。 もう、そうしましょう。 書き換えの必要無しで済むんだから。



昔はあれほど使った RCTools でしたが、最近はそんなに使わなくなってしまったので、バージョンアップもしてなかったし、色々と気にしてませんでした。 だから気づかなかったんだな。 にしても、おそらく作者のクラウスさん、ずいぶん昔にこれらのツールを開発して、XSI や OS のバージョンが上がるたびに「動くようにするためだけに」対症療法的に改変を加えたり、その間に機能追加・改良のバージョンアップも挟まったりして、混沌としてしまったのではないでしょうかね。 わかりにくくなってしまってますが、まあ仕方ない。 それだけ息の長いツールだということですね。


RCTools も XPOP も C++ で書かれているようなので俺はその構造もさっぱりわからんし、頓珍漢なこと書いてたらすいません。間違えている箇所があれば指摘して下さい。 また、この組み合わせで動いたよという情報とか、こうすれば簡単なのに何ややこしいことやってんだよこのヴォケ などという突っ込みがあれば、どうかコメントをお寄せ下さい。



Happy XPOP :D

|

« 歯車導入。 | トップページ | 呑む?。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 64 で XPOP2 (XPOP普及委員会その16):

« 歯車導入。 | トップページ | 呑む?。 »