次のコード行を使用して COM オブジェクトを作成しようとしている VB6 dll があります。
Set CreateObj = CreateObject("OPSValuer.OPSValue")
ただし、これは「オブジェクト変数またはブロック変数が設定されていません」というエラーで失敗します。
dcomcnfg で OPSValuer.OPSValue を確認でき、問題なく登録されているようです。問題の原因について何か考えがある人はいますか?
インスタンス化しようとしているクラスが正しくインストールされていないか、いくつかの依存関係が欠落している可能性があります。OLE ビューにアクセスできる場合は、VB の外部でそのクラスのインスタンス化を試みることができます。インスタンス化されない場合は、インストールが不適切であるか、依存関係が不足しています。OLE View は Visual Studio に同梱されています。システムで OleView.exe を検索してください。
私のシステムでは、D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin にありました。
DMKing は OleView について正しいです。また、 Dependency Walkerのコントロールを確認してみてください。不足している依存関係がすぐに表面化するはずです。
これは DCom コンポーネントであるため、コンポーネント コンストラクターで何かが失敗している可能性もあります。コンストラクターで何かが失敗すると、そのエラーが発生します。これはローカルの DCom オブジェクトですか、それとも別の層で実行されているものですか?
CreateObject の代わりに、標準の New でインスタンス化してみて、別のエラーが発生するかどうかを確認してください。参照自体を追加すると、そのエラーの特定に役立つ場合があります。早期バインディングではなく、遅延バインディングを使用している理由はありますか?
がVBOPSValuer.OPSValue
で記述されたコンポーネントであるとすると、これはおそらくClass_Initialize
そのコンポーネントのイベントで発生したエラーです。コンポーネントのソースコードがある場合は、デバッグが簡単です。
エラーは、オブジェクトの初期化ルーチン内でスローされる可能性があります。Google で "OPSValuer.OPSValue" が見つからないということは、バグに遭遇したのはカスタム コードだと思います。