DLLを登録せずにC4772エラーを解決する方法はありますか?
-
04-10-2019 - |
質問
多数の相互参照comライブラリを備えたVS2010プロジェクトを維持しています。 VS2010がインストールされているランダムなワークステーションから構築可能であるように、プロジェクトを構成しようとしています。ワークステーションは32ビットと64ビットの両方になる可能性があるため、プロジェクトを「登録出力」に構成すると、64ビットDLLがDllregisterServerを呼び出すためにロードできないため、ビルドは32ビットマシン上のビルドに失敗します。
例を以下に示します。プロジェクトBのTypelibは、プロジェクトAのTypelibから次のステートメントを介してプロジェクトBを参照します。
#import "B.tlb"
ライブラリBはAを参照しているため、B.TLBがインポートされている場合、コンパイラはAからタイプをロードしようとします。したがって、Aが登録されていない場合、コンパイルは次のことに失敗します。
error C4772: #import referenced a type from a missing type library ...
Oleviewアプリケーションを使用してB.TLBを開こうとしましたが、REGSVR32を使用して登録されている場合、ライブラリAの右のファイル名を表示するのは地獄のみです。
だから、ここでの私の質問は、TLBSを登録せずに、すべてのファイルを同じディレクトリに配置するだけで、ある種のマニフェストを添付することで、ライブラリの参照を適切に解決するための代替方法はありますか?たとえば、ライブラリのTLBの名前を.tlbまたはその種のものと名前を変更します。
解決
参照されたa.tlbを最初にインポートしてみてください。または、include()オプションを使用してb.tlbのインポートにリストします。
それだけ #輸入 他の参照を不必要に持ち込むことを避けることができれば、使用するインターフェイスの部分。
他のヒント
適切なオプションがあります。vc++ディレクトリに.tlbファイルにパスを追加する - >実行可能ディレクトリこれにより、コンパイラに与えられるパスへのパス環境変数が追加されます。これによれば: http://msdn.microsoft.com/en-us/library/sce74ah7.aspx インポートされたもので参照されているすべての.tlbは、パスとlibでのみ検索されます。
最も簡単な方法は、すべて *.tlbファイルが使用されている場合に配置することです。
プロジェクトの構成に依存します。すべての *.tlbファイルをコピー:$(outdir)、$(projectdir)、dir where where where where where where whate with when when you when *.tlbなど
よろしく、マリウス