0

次のコード行を使用して COM オブジェクトを作成しようとしている VB6 dll があります。

Set CreateObj = CreateObject("OPSValuer.OPSValue")

ただし、これは「オブジェクト変数またはブロック変数が設定されていません」というエラーで失敗します。

dcomcnfg で OPSValuer.OPSValue を確認でき、問題なく登録されているようです。問題の原因について何か考えがある人はいますか?

4

4 に答える 4

3

インスタンス化しようとしているクラスが正しくインストールされていないか、いくつかの依存関係が欠落している可能性があります。OLE ビューにアクセスできる場合は、VB の外部でそのクラスのインスタンス化を試みることができます。インスタンス化されない場合は、インストールが不適切であるか、依存関係が不足しています。OLE View は Visual Studio に同梱されています。システムで OleView.exe を検索してください。

私のシステムでは、D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin にありました。

于 2008-10-14T21:13:19.130 に答える
2

DMKing は OleView について正しいです。また、 Dependency Walkerのコントロールを確認してみてください。不足している依存関係がすぐに表面化するはずです。

これは DCom コンポーネントであるため、コンポーネント コンストラクターで何かが失敗している可能性もあります。コンストラクターで何かが失敗すると、そのエラーが発生します。これはローカルの DCom オブジェクトですか、それとも別の層で実行されているものですか?

CreateObject の代わりに、標準の New でインスタンス化してみて、別のエラーが発生するかどうかを確認してください。参照自体を追加すると、そのエラーの特定に役立つ場合があります。早期バインディングではなく、遅延バインディングを使用している理由はありますか?

于 2008-10-15T01:12:57.787 に答える
0

がVBOPSValuer.OPSValueで記述されたコンポーネントであるとすると、これはおそらくClass_Initializeそのコンポーネントのイベントで発生したエラーです。コンポーネントのソースコードがある場合は、デバッグが簡単です。

于 2008-10-17T19:15:22.203 に答える
0

エラーは、オブジェクトの初期化ルーチン内でスローされる可能性があります。Google で "OPSValuer.OPSValue" が見つからないということは、バグに遭遇したのはカスタム コードだと思います。

于 2008-10-14T21:18:10.587 に答える