どうも、こんにちは。どうしもわからないので少し聞いて下さい。
現在、XPの環境でVB6.0を使って開発していたものが完了したところです。
(もちろん、コンパイル済みです。「開発.EXE」)
そこで、OSを変え(MEです)テスト段階に入っているのですが、エラーが
発生しています。MSFlexGridを貼り付けたウインドウを開くと
「実行エラー:339
コンポーネント'MSFLXGRD.OCX'、またはその依存関係のひとつが
適切に登録されていません。ファイルが存在しないか、あるいは
不正です」とエラーメッセージがでます。
OCXって、OSに関係するのでしょか?
ただ、OCXは、コンポーネントの拡張子としか考えていなかったので
意外なメッセージでした。(よくあるんですか?)
どうか、このエラーを取り除く方法を知っていらっしゃる方、
助けてください。最後の最後で、引っかかっています。
ご教授、お待ちしております。お願いします。
OCXはレジストリに登録しないと使えません。
そのパソコンには、使いたいOCXがインストール(レジストリに登録)されていないんだと思います。
解決策は、インストーラソフトを使うか(たいていのインストールソフトは、レジストリへの登録もサポートしてるようです)、
そういうOCXをまとめて配布しているサイトへのリンクをReadmeに書くなりして、
「ない人はインストールしてね」と書くなりするといいでしょう。
前者のほうが親切ではありますけど、インストーラが嫌いな人(勝手にレジストリがいじられるのを嫌うとか)もいますし、
配布ファイルサイズが増えてしまうとかの問題があります。
後者のほうは、やや不親切かもしれませんが、前者の問題を全部クリアできます。
(VBユーザーのパソコンや、パソコンに該当OCXがインストールされている場合、すぐ使えます)
対象のユーザーによって決めるのがいいかもしれませんね。
話を聞いて下さって、ありがとうございます。
「解決策は、インストーラソフトを使う」と、ご指導下さったので
今まで、使っていた「InstallStudio 7.0J Standard」を止めて、
VB付属の「ディストリビューション ウィザード」でインストール作成
してみました。すると、複数のOCXを1つのCABにできるみたいで
「開発.exe」 の同じ階層に「開発.cab」ができました。
しかし、「ME」にインストールしてみると、はじめ、「dll」やら「tlb」等
の「cab」の方からコピーが始まり、その途中で「システムにあるの一部のシステムファイルが最新でないため、セットアップを実行できません。」とメッセージがでます。
ディストリビューションで、インストール作成した後に「95・98以上に
インストールするには"DCOM98" が必要になります」と書かれていたことに関係するのでしょうか?
もう、本当にどうしらいいのでしょうか?
本当は、このインストール作成をディストリビューションにすると
アプリの配下にフォルダやファイルを一緒にEXEにできなくなってしまいます。どうか、どうか、どうか助けて下さい。お願いします。
さあ…。どうしたものでしょうね。
tlbファイルはOCXを使うにあたって、不必要(だったと思う)だと思うんですよね。
だから、余計なものや、必要なものがたりなかったりするんだと思うんです。
ここは、MicroSoft(以下MS)製以外のインストーラを使ってみてはどうでしょう?
たしかディストリビューションウィザードは、全自動でインストールファイルを選択しますよね。
それが今回、問題になっているのかもしれないので。
わたしは簡単インストーラ(http://www5a.biglobe.ne.jp/~nobukich/einstall/)をお勧めします。
ただ、最新版のVer2は、まだまだバグがあるので、Ver1のほうを。
でもこの場合、それじゃだめかもしれませんね。
MSのサポートセンターかどこかに、何か情報があるかもしれません。
OcxやDLLファイルはコピーしただけでは使えません。
Regsvr32.Exe というツールがあると思うのでそれに登録したいファイルを
渡すことで手作業で登録できます。
普通はインストーラがこの作業を自動で行ってくれるので、なるべく
インストーラを使うようにしたほうが良いと思います。
書いているうちに話が進んでましたね。
DCOM98はネット上で配布されているのでDownloadできます。
http://www.microsoft.com/japan/com/comdownload.asp
OCXは場合によってはコピーだけでも動いたりします。
必要なファイル(プログラム作成で使用したOCX,DLLなど)を全部プログラムと同じフォルダに放り込んで起動すると動く場合があります。
ただし以下の場合は除きます。
・必要なOCXと異なるバージョンのOCXがすでにレジストリに登録ずみである場合。
これはRegsvr32で「解除」してやると一応使えます。(上記の猫八さんのものとは逆の行為)
当然イレギュラーであり、はっきりいって邪道ですが
異なるバージョンの同一のOCXで作成したプログラムがあって、
どっちかのバージョンを登録すると反対のほうがだめになるような場合には
有効かもしれません。
(ただお勧めはしませんし、あくまで非常の手段です。
用途が限定されたPCであればためしてもいいかもしれません。)
私は最近それがいやで、なるべくAPIでやるようにしてますが。
あまり参考にならない意見ですみません(^^;
みなさん、本当にご返事、嬉しく思っています。
たかみちえさん、猫八さん、Loreleyさん、ありがとうございます。
インストールエラーのお話ですが、なんとかなりそうな、ならんような。^^;
まん丸一日、考えたのですが、ディストリビューションの終盤で、
OCXやDllをインストール先を教えてくれるのですが、すべて「System」内
でした。そこで、InstallStudioを使って、自作アプリは「Program File」
の中へOCX等は「System」の中へすべてインストールすることにしました。
すると、「ME」環境ですべて動きました。
ただ、分からないことは、VBの参照設定で、項目を選んでいくと
下の方にDllなどの場所が書かれていますよね。私のは「System32」の方が
多かったのですが、VB6.0をインストールした時に「System32」にも
インストールされたことになりますよねー。訳が分からなくなってきた+_+;
と、とにかく「System」と「System32」の違いってなんなんなんでしょう?
「System」と「System32」の両方に、同じDLLやOCXがあるとまずいんでしょうか?
もし、インストール先に同じDLLがあった場合、上書きされるのでしょうか?
ほんでもって、OSごとにDLLってやっぱり進化しているのですか?
えーこれらを自分で整理して考えますと、自分でインストールしたDllや
OCX達をレジストリーに登録するには、どう書けばいいんですか?
InstallStudioにレジストリーのキーを書くところはあるんですけど?
んー、変な質問ばかりすみません。なんせ、初めてちゃんとした
自作ソフトを作るもので、必死です。どうか、なんでもいいので
教えて下さい。お願いします。
今日は、窓から4月のカレンダーが飛んでいってしまいました。
Systemフォルダは16ビットで、System32は32ビットで動作するファイル
を保存しているようです。
自分で作ったDLLやOCXは用途にもよりますが、ある1つのアプリでしか
使わないものであればそのアプリをインストールしたディレクトリに
保存し、複数のアプリで使用できるものなら System32 に保存して、
Win9X系や16ビットのシステムでの使用が目的のファイルに限っては
Systemに保存するというように分けるのが良いと思います。
もともと共有ファイルって、同じ処理を一箇所にまとめてファイルサイズ
を小さくするのが目的なので、System32に置かなければいけない訳では
ないですよ。
名前としては16bitか32bitかの違いを表現してるんだと思います
NT系ではsystem32に
9x系ではsystemに
というのが一般的だと思います
共有システムファイルをシステムフォルダにコピーする場合は
名前での直接的な指定よりも、APIや関数でsystemパスを取得する
方が正確かつ安全です。
systemとsystem32と両方入れる場合は
同じバージョンであれば問題はないと思いますが、
違うバージョンにしてしまった場合、希望の結果が得られない場合がありえます。
(XPのDOSプロンプトでは 「c:\windows\system」にパスが通ってないようですし)
OCXやDLLの登録については猫八さんがすでに書かれています。
OCXの進化(=バージョンアップ)とOSとは厳密には切り離して考えます
たとえばIEのバージョンとOSとは切り離して考えられるのと同じです
(同じWin95でもIE4の人とIE5の人がいます。ユーザーがアップデートするかどうかの違いです)
ただし、新しいものができているのにわざわざ古いものを公開しないでしょうから
まったくの無関係ということもないでしょうけど。
(たとえばwin95にはVB5ランタイムがはいってませんが、win98には入っています)
かぶってしまいましたね(^-^;A
なるほどー、適切で分かりやすい説明、ありがとうございます。
なんだか、難しく考えすぎていたように思えます。
アプリと一緒がいいですね。寂しくないし。みんな、一緒だ!!^_^^_^^_^
トラブッタ時は、その時で考えます。
今回、本当に皆様方に、お世話になりました。
皆様方がいなかったらどうなっていたか…。
よかったーVB掲示板があって。感謝感謝しゃかしゃか。((@_@))
それでは、みなさん、ありがとうございました。
これで、解決とさせて頂きます。
また、NOTHINGを見かけたら、よろしくお願いします。
解決チェックを…忘れていました。
と、Loreleyさんが記入してくれてますね。
んー、どうしよう。今回のソフトだけは、アプリと
一緒のフォルダにします。-_-u
そして、もっともっと「Dll」や「OCX」のことを勉強して
みなさんにも、情報を提供できるぐらい頑張りたいと思います。
みんな、レベル高すぎて無理かもなー。 ^_^;
それでは、今度は本当に解決です。ありがとうございました。m_ _m
ツイート | ![]() |