请教专家 -- MFC下怎么与消息一起传递参数?
TRACE是独立的静态函数。问题是这是一个多平台工程,TRACE是将信息打到新的内存Buffer中,然后将Buffer指针和消息一起发给***Doc。这样就出问题了:将Buffer指针当作消息LPARAM参数时,没有办法通过,报错为Cause Assert error。
具体是:
MyWinApp.h中:
class CMyWinAppDoc : public CDocument
{
protected:
DECLARE_DYNCREATE(CWinPhoneDoc)
……
protected:
afx_msg LRESULT OnMyTrace(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()
};
MyWinApp.cpp中:
IMPLEMENT_DYNCREATE(CWinPhoneDoc, CDocument)
BEGIN_MESSAGE_MAP(CWinPhoneDoc, CDocument)
ON_COMMAND(MY_TRACE, OnMyTrace)
END_MESSAGE_MAP()
void WTrace(char *spFileName, int iLineNum)
{
const char * spFile = strrchr(spFileName, '/');
char * szpBuffer, sBuff[10];
szpBuffer = (char *)malloc(512); // malloc memory
if ( spFileName != NULL)
{
if (spFile != NULL)
spFile++;
else
{
spFile = strrchr(spFileName, '\\');
if (spFile != NULL)
spFile++;
else
spFile = spFileName;
}
strcpy(szpBuffer, spFile);
sprintf(sBuff, " (%d)", iLineNum);
strcat(szpBuffer, sBuff);
strcat(szpBuffer, "\0\0");
free(szpBuffer);
AfxGetMainWnd()->SendMessage(WM_COMMAND, MY_TRACE,(LPARAM)szpBuffer);
}
}
LRESULT CMyWinDoc::OnMyTrace(WPARAM wParam, LPARAM lParam)
{
AfxGetMainWnd()->MessageBox("Hello -- OnMyTrace", "Hello Box");
free((char *)lParam);
return 0;
}
编译/链接通过,运行错误信息为:
Debug Assertion Failed!
……
File:dbgheap.c
Line:1017
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
……
如果我把LPARAM参数去掉(缺省是lParam = 0),那么就能够运行,但是没有参数传递。
我记得API中是可以用lParam传递参数的。哪位兄弟可以指点一二,不胜感谢!