質問

多数の相互参照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など

よろしく、マリウス

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top