解決済みの質問
現在ActiveXコントロールのアプリを作成(修正)
しています。
開発環境
OS: XP(SP2)
visualStudio6.0(SP5)
実行環境
OS: XP(SP2)
デバッグ環境では正常に動作するのですが、
OCXファイルを作成して、
ブラウザ上で実行するとどうもうまくいきません。
(修正前のアプリは正常にブラウザ上で動作する)
現状としましては
・IEのセキュリティはActiveXのダウンロードを許可。
・バージョンは修正前のリビジョンに+1を設定。
・ダウンロードするOCXファイルは C:\WINDOWS\Downloaded Program Filesのフォルダに
ダウンロードされてくるがインストールはされていない(状態が不明となる)
・clsIDをリナンバーしても動かない。
・修正前の状態から再度OCXファイルを作成するだけで
も動かない。
・OCXをコンポーネントとして登録できない
・開発環境、実行環境をwin2000にしても
同様の結果です
自分で思いつく事はすべてやってみたのですが、
うまくいきません。
なにかアドバイスでも何でもよいので
いただけないでしょうか?
投稿日時 - 2005-06-30 01:31:44
何はともあれ動作するようになったとのことで、良かったです。
さてclsidの件ですが、「他のソフトウェアから見て使用方法が同じに見えるプログラムに対しては同じclsidを割り振る」のが基本です。例えば、従来のプログラムに不具合があり、プロパティ・メソッド等のインターフェースは変更しないが不具合だけは解消したという場合はclsidは変えませんが、機能を追加してプロパティやメソッドが増減したような場合にはclsidを変えます。
<object>タグ内のclsidを変更したところ動作するようになったとのことですが、そうだとすれば、全く同じ状態で<object>タグ内のclsidとOCX内に記述しているclsidを元の値に戻し、レジストリに登録されたclsidも以前の値にすればやはり同じように動作するはずです。当初clsidを同じにしても変更しても動作しなかったのは、おそらく開発の手順が整理されていなかったため、適切な段階でOCXのレジストリへの登録作業が行われなかったためではないかと思います。
投稿日時 - 2005-07-02 02:01:18
お礼
なるほど、おっしゃるとおり
バタバタしたまま開発を進めててました。
次回からは今回のことを教訓にします。
xcrOSgS2wYさん、本当にありがとうございました。
投稿日時 - 2005-07-02 13:37:17
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(2件中 1~2件目)
「そんなこと当然じゃないか」と憤慨されるかもしれませんが、念のため何点か確認させてください。
(1) 「デバッグ環境では正常に動作するのですが、OCXファイルを作成して、ブラウザ上で実行するとどうもうまくいきません。」という点ですが、ここでいう「デバッグ環境」と「ブラウザ上で実行」では、全く同じOCXファイルを使用しているのでしょうか。
(2) 「デバッグ環境」と「ブラウザ上で実行」は、具体的にはどのように違っているのでしょうか。例えば、デバッグ環境とブラウザ実行環境は物理的に異なるPCでしょうか。あるいは、デバッグ環境とはブラウザを使用しない何らかのテスト環境で、同一PC上でもブラウザを使うとうまく動かないのでしょうか。
(3) 質問の中に「修正前の状態から再度OCXファイルを作成するだけでも動かない。」とありますが、ソースファイルやプロジェクトファイル、コンパイルオプションに一切修正を加えずにただリビルドしただけのOCXファイルでも動作しないのでしょうか。
(4) デバッグビルドとリリースビルドの両方とも動かないでしょうか。それとも、どちらか一方は動くでしょうか。あるいは、特定の環境であれば動く場合があるでしょうか。
(5) OCXの登録操作はどのように行っているでしょうか。登録用のinfファイルは別途用意されているでしょうか。
投稿日時 - 2005-07-01 00:42:37
補足
xcrOSgS2wYさん、返答ありがとうございます。
まず返答から。
私の説明不足ですいません。
(1)まったく同じOCXファイルです。
(2)同じPCです。
(3)そうです。
(4)逆に質問させていただきたいのですが
VS6.0のOCX作成時にその指定をどうするのですか?
(知識不足ですいません、たしかVS.netではあったとおもうのですが・・・。)
(5)infファイルは用意していません。
それで
xcrOSgS2wYさんのご指摘をうけ、自分なりに
問題点の整理ながら考えていたら
動くようになりました。
修正した箇所は(5)で指摘していただいた
OCXの登録操作のところが間違えていました。
具体的に言うと<object>タグに書く
clsidが間違えていました。
修正したときはclsidをリナンバーしたのですが、
(本来はリナンバーせずにうまいこといくと思ってま した。)
リナンバーをGUIDGEN.exeを直接実行してナンバリン グしていたのですが、レジストリの中からプロジェ クト名+コントロール名で登録された項目から
GUIDを引っ張ってきたら、うまいこと動くようにな りました。(これって当たり前のことなんですよ ね?)
まだ自分では納得行ってない部分があるのですが、
そもそも
ActiveXコントロールを修正する場合は、そもそも
clsid(GUID)をリナンバーしなければいけないものな んですかね?
リナンバーしなければならいのであれば、
まったく別のアプリという扱いになるので
バージョン管理って意味がないと思うし、
結果的に動くようになりましたが、
動かなかった原因?
今回の自分の修正方法が正しいのか?
間違ってるのか?
たまたまうまく動いただけなのか
が自分では判断できません・・・。
今回の私の修正方法
clsidを振りなおすというのは
ただしいのでしょうか?
投稿日時 - 2005-07-02 01:16:44
おおもとのOCXはどのような環境で、どのようにして作成したものなのでしょうか。
その環境や作成方法との違いを確認してみてはいかがでしょうか。
投稿日時 - 2005-06-30 15:16:40
補足
xcrOSgS2wYさん、回答ありがとうございます。
実は初期の開発環境(マシン)は
手元にはなくて
win2000(sp3) visualstudio6.0(sp5)
であろうと想像しか出来ません・・・。
一応その開発環境を再現して
OCXを作成してもうまいこといきませんでした・・。
作成方法もロジックも2,3行追加しただけなので
特に変わらないとおもっています。
投稿日時 - 2005-07-01 00:02:38