Visual Studio 2005 + MFC:链接器错误,即使导出也不能链接构造函数



我有两个MFC项目,一个exe和一个dll。exe引用dll。我通过从exe项目中提取一些类来创建dll,这是我的起点。

dll现在可以构建了,但是exe不能链接到dll的一个类的构造函数。我尝试__declspec(dllexport) ` `处理整个类,但这给了我太多的警告,所以我__declspec(dllexport) ` `处理了它的所有公共成员。这解决了大部分的链接错误,除了构造函数。

错误(MsgBoxTest是exe, CustomMessageBoxDlg是dll):

MsgBoxTestDlg.obj : error LNK2019: unresolved external symbol "public: __thiscall CMessageBoxDialog::CMessageBoxDialog(class CWnd *,class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >,class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >,unsigned int,class CPoint,unsigned int)" (??0CMessageBoxDialog@@QAE@PAVCWnd@@V?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@1IVCPoint@@I@Z) referenced in function "private: void __thiscall CMsgBoxTestDlg::OnDisplayMessageBox(void)" (?OnDisplayMessageBox@CMsgBoxTestDlg@@AAEXXZ)
1>DebugMsgBoxTest.exe : fatal error LNK1120: 1 unresolved externals

构造函数声明(它是重载的):

// Constructor of the class for direct providing of the message strings.
    __declspec(dllexport) CMessageBoxDialog ( CWnd* pParent, CString strMessage,
        CString strTitle = _T(""), UINT nStyle = MB_OK, CPoint initialPosition = CPoint(0,0), UINT nHelp = 0 );
    // Constructor of the class for loading the strings from the resources.
    __declspec(dllexport) CMessageBoxDialog ( CWnd* pParent, UINT nMessageID, UINT nTitleID = 0,
        UINT nStyle = MB_OK, CPoint initialPosition = CPoint(0,0), UINT nHelp = 0 );

错误引用的构造函数用法:

//this is a CMsgBoxTestDlg, m_strMessage and m_strTitle are CStrings, nStyle is an UINT, initialPosition is a CPoint
CMessageBoxDialog dlgMessageBox(this, m_strMessage, m_strTitle, nStyle, initialPosition);

我尝试了Clean + Build,但是没有雪茄

Edit:该类使用DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC宏,并扩展CDialog

解决了!似乎CString解析到不同的类型取决于你是否使用Unicode或多字节字符在你的项目选项(通用->字符集)。我的dll使用Unicode,我的exe使用多字节。

相关内容

  • 没有找到相关文章

最新更新