2009-07-29 1 views
3

私は本当に奇妙なエラーと誰もがこれに流すことができる光を持っていると大いに感謝するでしょう。私たちは(いつものように)銃の下にいるので、私はこれについて迅速に答えを見つける必要があります。奇妙なVB6メイクエラー

COMオブジェクトを作成するVB6ソースをいくつか変更しました。アプリをビルドする自動ビルドでエラーが返されました。私が思っていた問題はありません。私は自分の変更を取り消すだけです。私の変更を裏返しても、問題は消えていません。

私は

を作る/ VB6 ProjectFile.vbg \ VB6する パスのようなコマンドラインで、.vbgファイルを経由してアプリケーションを構築しようとすると具体的に、私はメッセージ

「でコンパイルエラーを取得しますファイル ''、行: オブジェクトライブラリが無効か、見つからないオブジェクト定義への参照が含まれています。

私が言ったように、私はソースコードを元に戻したので、なぜこのエラーがまだ発生しているのかは分かりません。誰かの周りのVB6の看護師誰が私を答えて指すことができるかもしれない?私は問題の正確なコードを投稿することができますが、正しくビルドされているという事実は正しく構築を中断し、正しくビルドすることを拒否して、これは私のコードで問題ではなく、以前のビルドエラーの結果として何かがレジストリに入れられたようなものです。

ヒント、ヒント、または提案を大歓迎します。私は私の質問が少しスケッチであることを認識しますが、私は含まれていることが重要で何がないかも分かりません。

編集:

素晴らしいアドバイスをいただきありがとうございます。私はそれが何らかの種類の自動登録を行うVB6と関係があると思う。

もう少し詳細を追加するだけで、IDEから参照されるvbpファイルをビルドするときにこの問題は発生しません。 vbpを含む.vbg上のmakeでのみ発生します。また、問題のビルドツールは自動的に最新のソースを取得し、エラーはローカルボックスと専用のビルドボックスの両方で発生します。

EDIT 2:再び

こんにちはすべて、

リリースエンジニアリングの仲間は、現在OKですので、これは彼のビルド環境でビルドするために取得する方法を考え出しました。私たちがこの危機を過ぎてしまえば、彼がしたことについて彼に尋問して、みんなと詳細を共有しようとします。すべての素晴らしい提案に感謝します。これはSOのことですごく素晴らしいことです。つまり、私は10歳の技術について尋ねました。私は、いくつかの素晴らしい、そしてオンポイントのアイディアを得ました。

+0

プロジェクトはどのような互換モードを使用していますか? – cmsjr

答えて

0

前回の失敗したビルドから逃げる可能性のある.objファイルと.expファイルを削除して削除します。

+0

良い考えですが、私はVBが.objまたは.expファイルを作ったとは思わなかった。しかし、私はこれを二重チェックします、ありがとう。 –

+0

いいえ - 何もしなかった。 –

5

VBGとすべてのVBPもロールバックされていることを確認してください。そのエラーは、もはや依存関係に有効ではないCLSIDを参照しようとしているプロジェクトと一貫しています。 IDEからプロジェクトグループとビルドをロードしようとしましたが、それが動作し、グループファイルとプロジェクトファイルの変更をすべて保存してチェックインすると、修正された可能性があります。

+0

@cmsjr、私はIDE経由でVBGを開いてビルドを行い、/ makeは現在動作しています。しかし、私の人生のために私はこれを理解していません。 VBは.vbpファイルからサイレントチェックを行いますか?どういうわけか私はVBPファイルを誤ってチェックインしたに違いないと思います。 –

+0

私は誤って.vbpを保存した可能性がありますが、決して開いていないので、誤って.vbgファイルを保存していないことがわかりました。別の自動ビルドプロセスで使用されます。それは何年も変わっていません。 –

+0

私は静かなチェックアウトをしているとは思わないが、問題を引き起こす可能性のあるプロジェクトトラッキングによって、奇妙なプロジェクトをしているとは言い難い。 – cmsjr

1

私は、COMコンポーネントが問題の原因かもしれないと言いました。パブリックメソッドまたはプロパティのいずれかが変更されている場合、私はVB6がインターフェイスGUIDを変更することを覚えているようですおよびは新しいものを自動的に登録します。

レジストリをチェックして、コンポーネント名の検索、関連するCLSIDのメモ、レジストリのバックアップ、および参照の削除を行うことをお勧めします。

cmsjrには、.vbpファイルの不正なCLSID参照が含まれている可能性があるため、

もう1つの方法は、障害によって一部の.tlb(タイプライブラリ)またはolb(オブジェクトライブラリ)ファイルで問題が発生したことです。

0

変更した行にプロジェクト&を再入力する必要があります。
VBGと一緒にプロジェクトを保存し、その後に再コンパイルします。

私はそれを修正すると思います。

EDIT:考えられるのは、cls/basファイルが、使用したクラス(CLSID)を覚えていることです。したがって、参照を変更してもcls/basの行を変更しないと、型の不一致(cls/basファイルに入力されたものと参照されたもの)です。

1

あなたの互換性DLLをすべて別のディレクトリに移動することをお勧めします。この理由は、バイナリ互換性をチェックするためにVB6が使用しているものを制御するためです。さらに、生成されたTypelibsは参照をIMPORTします。したがって、バイナリDLL Ver 10を互換性のために使用していても、バイナリDLL Ver 9をインポートすると問題が発生します。すべてのライブラリを単一のフォルダに保持し、プロジェクトをそのフォルダ内のDLLにポイントすることによって、それぞれのTypeLibが正しいバージョンをインポートすることが保証されます。

最後に、複数のレベルのDLLが相互に参照されている場合。バイナリ互換性を使用してVB6をコンパイルできない不思議なエラーが発生することがあります。そのような場合は、階層内の最も低いDLLをコンパイルする必要があります(恐らくユーティリティDLL)これを互換性フォルダにコピーします。すべてが一気にコンパイルされるまで、あなたの方法をチェーンアップしてください。

DLLを持っていると参照DLL Bが参照DLL C. VB6が時々混乱してしまうのは、AとCを変更するとうまくコンパイルされますが、互換ライブラリが更新されるまでAがうまくいきません。