我有两个现有的可执行文件 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;
我在解决方案中添加了项目 A 作为对项目 T 的依赖项。A 仍然可以正常编译,但 Tunresolved 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
这似乎是不祥的,因为它应该链接到现有的可执行文件。
我的问题是:我如何告诉 MSVC 2010 那些在哪里?我认为只需将 A 设置为依赖项就会让它自动解决。我可以链接到现有的可执行文件,对吧?