こんにちは。助言をお願いしたく、投稿させて頂きます。
開発環境のパソコンを更新すべく、新PCにVB6をインストールしました。
しかし旧PCでは正常に(ステップ)実行できたプロジェクトが、新PCでは違う動作をしてしまいます。
調べていくと、以下の命令で新旧の動作結果が異なっています。
1: Set ini = CreateObject("IniFileLib10.CIniFile")
2: If ini Is Nothing Then
3: SettingFileLoadIni = False
4: Exit Function
5: End If
旧PCでは3〜4行目は実行されませんが、新PCでは実行しています。
新PCではiniは確かにNothingになっています。
あくまで同じプロジェクトを実行していますので、設定関係も同じはずですが、
もしや参照設定が怪しいか?と思い比較してみましたが、どちらも同じ"IniFileLib10"が指定されています。
あとは何をチェックしたら良いか判らず、迷宮入りしてPC移行が滞っています。
アドバイスをよろしくお願いします。
CreateObjectするとき(レイトバインディング)は
> 参照設定
は関係なかったような。
ご指摘ありがとうございます。
今調べた範囲ではCreateObjectでは参照設定は関係ないようですね。
CreateObjectが"IniFileLib10.CIniFile"を見つけることができず、Nothingを返してるのでしょうか?
"IniFileLib10"は前任者が作ったdllなのですが、場所を指定する意味で参照設定していました。
この場合CreateObjectが目的のオブジェクトについて、どこを探すのでしょうか?
場所の指定方法、および 場所を指定しなければどこを探すのでしょうか?
アドバイスよろしくお願いします。
旧PCのレジストリHKEY_CLASSES_ROOT\CLSID 以下を探してみてください
レジストリを検索するためには、
ファイル名かCLSIDが判れば...
参照設定してあるなら、CLSIDは .vbpファイルをメモ帳で開けば見れますね。
「IniFileLib10.CIniFile」でレジストリを検索してみてください。
もげさん、ありがとうございます。
.vbpファイルをメモ帳で開くと、dllファイル名が書いてありました。(IniFileLib10.dll)
「IniFileLib10.CIniFile」でレジストリを検索すると、新旧とも同じCLSIDが記載されていました。({01749A2E-DEDD-4C6A-8E76-5D4416AF9A53})
CLSIDでそれぞれのレジストリを検索すると同じ内容のキー、値がありました。先のIniFileLib10.dllのパスも同じでした。
これからすると、予想していた"IniFileLib10.CIniFile"が見つからない事が原因ではなさそうな気がしてきました。
うーん、困りました。他の原因系も考えて見ます。
また何かアドバイスありましたらよろしくお願いします。
エラーになるのではなく、動作が違うという話であるならば……
可能性1) CIniFile 自体ではなく、その内部で利用されている
コンポーネントのバージョンが、それぞれのPCで異なっている。
可能性2) Win2000 や WinXP の Side-by-Side 実行が適用されている。
可能性3) ログインユーザーの権限不足。
たとえば旧PCでは、ローカルPCへのAdministrators権限があったが、
新PCでは、Usersに格下げされていたとか。
> 旧PCでは3〜4行目は実行されませんが、新PCでは実行しています。
> 新PCではiniは確かにNothingになっています。
この時、On Error ステートメントは使っていますか?
使っているのなら、CreateObject が Nothing を返した後で、
Err.Number, Err.Description, Err.Source に対して、
何か追加情報が綿されていないかをチェックしてみてください。
魔界の仮面弁士さん、ありがとうございます。
せっかくアドバイス頂いておりますが、今日はPCに触れないまま仕事納めになってしまいました。
休み明けに確認結果をご報告&相談させて頂きたいと思います。
まずはありがとうございました。
ツイート | ![]() |