导出类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类也存在此问题吗?为什么?
{
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类也存在此问题吗?为什么?
导出类有很多限制,比如5楼所说必须都是共享MFC,导出类还不能是模板类,所以
STL,WTL都不能用于导出类。
一般DLL要么导出C API格式的函数,要么借用类似接口虚函数的机制。一般大型应用的DLL
基本都是这样做的。