先来一段VC++给我们提供的标准模板代码
//connection.h
#ifdef CONNECTION_EXPORTS
#define CONNECTION_API __declspec(dllexport)
#else
#define CONNECTION_API __declspec(dllimport)
#endif
// 此类是从 connection.dll 导出的
class CONNECTION_API Cconnection {
public:
Cconnection(void);
// TODO: 在此添加您的方法。
};
extern CONNECTION_API int nconnection;
CONNECTION_API int fnconnection(void);
生成dll后,将connetion.h和生成的connection.lib文件添加到需要引用的项目中,然后在代码中引用头文件,调用Cconnection类,出现出现错误提示:
无法解析的外部符号 "__declspec(dllimport) public: __thiscall Cconnection::Cconnection(void)" (__imp_??0Cconnection@@QAE@XZ),该符号在函数 _wmain 中被引用
根据错误提示,意思是我们在调用Cconnection构造函数时找不到具体的实现,构造函数没实现当然就没法实例,那么现在有两种方法:
1:将Cconnection(void)构造函数删掉,让编译器去实现缺省构造方法。
2:用户自己去实现构造方法。
VS中当dll项目和主项目在统一解决方案下时,需要注意(这是项目移植性最好的方法):
1.主项目->属性->链接器->输入->附加依赖项:添加xxx.lib
2.主项目->属性->链接器->输入->附加库目录:添加$(SolutionDir)$(Configuration)\
至于为什么需要用dll,和相关的准则就不多说,网上很多。