导出类COptions:class AFX_EXT_CLASS COptions: public CObject
{
public:
COptions(void);
~COptions(void);

BOOL Writeile(CString &strFileName);
}在其他工程中使用时:包含了COptions的头文件
修改
code=C/C++]
class  _declspec(dllimport) COptions: public CObject
{
public:
COptions(void);
~COptions(void);

BOOL Writeile(CString &strFileName);
}[/code]并在需要使用处添加了了 如下代码 
code=C/C++]#include "Options.h"
#pragma comment(lib,"OptionsDll.lib")void CMainFrame::OnButtonSetting()
{
        COptions option;
option.Writeile(CString(_T("options.ini")));
}
[/code]问题:编译不通过。错误如下:
MainFrm.obj : error LNK2019: unresolved external symbol "public: int __thiscall COptions::WriteFile(class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class ATL::ChTraitsCRT<wchar_t> > > &)" (?WriteFile@COptions@@QAEHAAV?$CStringT@_WV?$StrTraitMFC@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z) referenced in function "public: void __thiscall CMainFrame::OnButtonSetting(void)" (?OnButtonSetting@CMainFrame@@QAEXXZ)这个问题可以通过修改CString 为 LPCTSTR 或者 设置 工程为动态调用MFC类库。但是公司要求用静态链接MFC类库。有什么其他解决办法呢?除了CSring有这个问题其他MFC类也存在此问题吗?为什么?

解决方案 »

  1.   

    试试  #include <atlstr>
      

  2.   

    MFC扩展DLL 必须使用共享MFC,而且调用它的可执行文件也必须使用共享MFC,非得要用MFC吗?如果可能,我宁可做成WIN32的DLL
      

  3.   

    最好不要直接导出类,现在一般扩展性的DLL都用类似插件的机制写,而不是导出类,
    导出类有很多限制,比如5楼所说必须都是共享MFC,导出类还不能是模板类,所以
    STL,WTL都不能用于导出类。
    一般DLL要么导出C API格式的函数,要么借用类似接口虚函数的机制。一般大型应用的DLL
    基本都是这样做的。