VS2005 の C/C++ でつくった MFC ActiveX コントロールを HTML へ貼り付ける
VS2005 での情報が皆無だったので、まとめてみる
調べても調べても VC6 やら VB やら役に立たない情報ばっかりだったのでまとめる。っていうか、今時 ActiveX コントロールを貼り付けたいことなんてあるのか? と思うが、企業向けだと、ピンポイントでやりたいことを実現する方法として考えられないこともないかなぁと思うので、記録として残しておくよ(´Д`)
プロジェクトの作成方法
- VC++ → MFC → 「MFC ActiveX コントロール」プロジェクト作成
- 上記ソリューションに「新しいプロジェクト追加」
- その他のプロジェクトの種類 → セットアップと配置 → 「CAB プロジェクト」を作成
- 作成された Cab プロジェクトに追加「プロジェクトの出力」
- プライマリ出力を選択(+そのほかにあれば必要なものを追加)
これで大雑把な出力準備ができた。
あとはダイアログを作ったりイベントを追加したりは好きなようにやってくれ。
ちなみに、昔は設定ファイルとして INI ファイルを使っていたようだけど、いまは OSD という XML 構造のファイルに設定が記載されるようになっている*1。
ActiveX コントロールの HTML への貼り付け方法
以下のような object タグを記述する*2
<object ID="コントロール名"
CLASSID="clsid:xxx-xxx-xxx-xxx-xxxx"
CODEBASE="./xxx.CAB#Version=1,0,0,0">
-ID:*.idl ファイルの「〜クラス情報です」と書かれたコメント行の下にある helpstring の引数として記載されている部分をぶち抜く*3。
↑2007/05/19追記:ここはなんでも良さそうですわ
- CLASSID:上記とまったく同じで、 uuid の項目を転記する。
- CODEBASE:出力された cab ファイルへのパスを記載する。バージョンの見方はよくわからん。
ActiveX のインストール先
C:\WINDOWS\Downloaded Program Files
ここに格納される。
ActiveX の作成をする場合は、自PCへのインストールを散々すると思うので、上記パスは覚えておいて不要になったら削除したりしよう。
なんか
情報を探している時、 ActiveX コントロールの貼り付け方で ocx ファイルを直接指定している方法で CODEBASE を書いているのが多かったけど、結局それじゃ実現できなかった。
なので、ダメもので cab ファイルへのパスを書いたらあっさり動いて泣きそうだった。この違いは設定ファイルが変わったからなのか?
ActiveX コントロール用の HTML って
昔のVB6 とかだと cab ファイルと一緒に HTML も生成してくれてたみたいなんだけど、 VS2005 ではその設定は無いのだろうか? 探していたんだけど、それっぽいのは無かったんだよなぁ。知ってる人がいたら教えて!><
*1:ビルドした時に生成される cab ファイルを見ると中に入っているよ
*2:本当は、これを JavaScript で動的に生成しないとアクティブ可しますか? みたいなマヌケなことを聞かれる
*3:本当は .rc ファイルに元データがあるが、普段非表示だし、参照するならこれで十分なので .idl ファイルを見ることにしておく