• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数プロジェクトをビルドしたとき、DLLに新しく追加したClassのみがリンクエラーになる)

VC++6.0上で複数プロジェクトをビルドしたときのリンクエラーについて

このQ&Aのポイント
  • VC++6.0上で複数の関連するプロジェクトをビルドすると、DLLに新しく追加したClassのみがリンクエラーになる問題が発生しています。
  • 新しく追加したClassはDLLの内部で使用されており、Mainプロジェクトから直接呼ばれるClassではありません。また、Classの使用箇所をDLLのソースからコメントアウトすると、リンクエラーは解消されます。
  • 現在の設定内容が十分に理解できておらず、問題の原因が特定できていません。MainプロジェクトからDLLを呼び出すための設定が正しく行われているか確認することをおすすめします。

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

具体的な状況が分からないので推測ですが、 Mainから使用しておらずDLLからもexportしていないのに、 「Mainの方でそのヘッダを(間接的に?)includeしてしまっている」から、 Mainの方でもそのClassが定義されたことになってしまい、 そのの実体がないと言われてると言うことはありませんか。 ヘッダの依存関係がうまく整理できてないせいかな?という印象です。 無闇にincludeされてませんか。 本当にDLL内のみでしか使わず、Mainと無関係ならば、 Mainがincludeするヘッダファイルでは、そのClassが定義されないようにしてください。 代替策は、そのクラスもDLLからexportすることですが、 どちらが適しているかは実際のクラスの役割にもよるかと。

simanoha
質問者

お礼

おっしゃる通り、MainがincludeしているDLLのヘッダに、errorが起きていたソースのヘッダがincludeされていました。 問題のヘッダのinclude箇所を削除するなど、依存関係をきれいにしたところ、無事にビルドが通って非常にすっきりしました。 どうもありがとうございました。

その他の回答 (1)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

自己解決結果を補足にどうぞ。

simanoha
質問者

補足

> MrBan さん ありがとうございます! 自己解決しました結果は以下です。 MainとなるプロジェクトのFileViewを確認したところ、 DLLの(問題のClassを呼び出してる)ソースが「Source Files」に含まれていることに気付きました。 そこで試しに、同「Source Files」を右クリックして、「Add Files to Folder」で、問題のClassを追加したところ、無事にビルドが通るようになりました。 というわけで、直接の問題は解決したのですが… DLLのClassをわざわざMainプロジェクトのソース管理に加えないとビルドが通らないというのは、なんだか納得できません。 前任者が事情があってそのように設定しているのか、だとしたらVC++にどのような設定をしているのか?と疑問は残ってしまっています…。

関連するQ&A

専門家に質問してみよう