4日:
查看項目鏈接庫的詳細信息。
在鏈接的其它選擇項中設置 “/verbose:lib ”,就可以看到鏈接時搜索庫的順序,可以判斷出函數重復的細節。
5日:
關于strcat_s(char *
strDestination, size_t
numberOfElements, const char *
strSource)的誤區。
numberOfElements,表示strDestination緩沖區空間大小,而不是指可以放下strSource區的大小。
關于strcpy_s(char *pdest, size_t destSize, char *src) 在src的字串長度大于destsize時也會報錯。
9日:
關于
CMultiDocTemplate->CreateNewFrame失敗。
在工程中要新增一種視圖,添加MFC類分別繼承于
CMDIChildWndEx和CView類,但是在調用上述方法打開窗口時失敗。經過跟蹤來到CDocTemplate::CreateNewFrame方法,
CFrameWnd* pFrame = (CFrameWnd*)m_pFrameClass->CreateObject();
if (pFrame == NULL)
{
TRACE(traceAppMsg, 0, "Warning: Dynamic create of frame %hs failed.\n",
m_pFrameClass->m_lpszClassName);
return NULL;
}
提示動態創建框架失敗,打新建的CMDIChildWndEx子類,其中的宏為DECLARE_DYNAMIC把它改為DECLARE_DYNCREATE方式。再運行程序一切就可以了。
22日:
_DllMain重定義問題(托管與非托管共存)
一個混合的MFC程序,使用托管與非托管的MFC正規DLL在鏈接時出現了下如下鏈接的錯誤,錯誤 2 error LNK2005:
_DllMain@12 已經在
msvcrtd.lib(dllmain.obj) 中定 義 .......\mfcs100ud.lib(dllmodul.obj),于是在鏈接時指定mfcs1007d.lib優先,但是也無濟無事。朋友發現
AFX_MANAGE_STATE(AfxGetStaticModuleState());僅只放在了托管的代碼文件中,沒有放到非托管的文件中。在非托管的文件中新建一個函數加入上面的語句,
再次編譯就可以了。