2つの既存の実行可能ファイルAとTがありますが、同じソリューションで、触れる前はどちらも正常に実行されていました。実行可能ファイルAには、クラスPを定義するヘッダーと、静的インスタンスMyPのプロトタイプがあります。定義はプロジェクトAでコンパイルされます。実行可能ファイルTでは、プロジェクトAでMyPのメンバー関数を呼び出したいので、クラスの宣言にdllimport / exportマクロを追加し、ヘッダー(定義ではない)にMyPを追加しました。プロジェクトTにヘッダーが含まれています。dllimport/exportマクロは標準であり、A_EXPORTSはプロジェクトAで定義されていますが、Tでは定義されていません。
#ifdef A_EXPORTS
#define A_API __declspec(dllexport)
#else
#define A_API __declspec(dllimport)
#endif
//various definitions and includes, defining ENUM_RECORDING_TYPE and ERROR
A_API HFILE viosopen(const _TCHAR *path, ENUM_RECORDING_TYPE rt, int flags);
A_API struct P {
ERROR B(SHORT phraseNum);
};
A_API extern P MyP;
ソリューションのプロジェクトTへの依存関係としてプロジェクトAを追加しました。まだ正常にコンパイルされますが、Tはunresolved external symbol "__declspec(import) <snip> referenced in function <snip>
関数呼び出しとunresolved external symbol "__declspec(dllimport) class P MyP" <snip>
静的オブジェクトを考え出します。また、リンクを開始した直後の出力ログにも表示されます。Creating library Debug/A.lib and object Debug/A.exp
これは、既存の実行可能ファイルに対してリンクしているはずなので、不吉なようです。
私の質問は、MSVC2010にそれらがどこにあるかをどのように伝えることができるかということです。Aを依存関係として設定するだけで、自動的にそれがわかると思いました。既存の実行可能ファイルに対してリンクできますよね?