首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于MFC基础有关问题(显示一个消息)

2013-10-01 
关于MFC基础问题(显示一个消息)请问,我在一个MFC工程里面定义了一个动态库回调函数的实现,动态库会发送消

关于MFC基础问题(显示一个消息)
请问,我在一个MFC工程里面定义了一个动态库回调函数的实现,动态库会发送消息给MFC。现在我不知道如何实现让动态库发送过来的消息给MFC的一个list显示,部分程序如下:

void CALLBACK MessageCallback(unsigned char code, int dlen, void* data)
{
printf("i,m ok!\r\n");
CMFCTesttoDllDlg mfc; //意图给MFCdlg类一个实例mfc

switch(code)
{
case TIP_CODE_HBACK:
mfc.printMsg();//意图调用消息打印
break;

default:
break;
}
}

void CMFCTesttoDllDlg::printMsg()
{
m_List1.InsertString(0, "2");//调用到此处就死掉
UpdateData(FALSE);
}


编译可以通过,但是当消息执行到m_List1.InsertString(0,"2");
系统就会停掉,提示:
Debug Assertion Failed!
Program:....MFCDll.exe
File:afxwin2.inl
Line:673
For information on how your program can casue an assertion failure, see the Visual C++ documentation on asserts.
(Press Retry to degug the application)
[解决办法]
请帖主移驾VC/MFC论坛。
[解决办法]
这是MFC吧。
我个人觉得你在调试到
m_List1.InsertString(0, "2");//调用到此处就死掉
这句话的时候,看看m_List1是不是空啊

CMFCTesttoDllDlg mfc;只是创建了对象
这时候你调用m_List1应该是存在问题的
[解决办法]
把"2"改成_T("2")再试试
[解决办法]
确定printMsg()函数收到了来自MessageCallback()发送的消息吗?
[解决办法]

m_List1 句柄丢失了吧 你用获取句柄的方法得到指针来处理试试  不要用m_List1了
[解决办法]
你m_List1对象关联的窗口存在吗?
[解决办法]
你只定义了一个窗口类对象,并不表示关联的窗口对象对象, OK?

你这里CMFCTesttoDllDlg mfc;只是定义了一个对话框类的对象,并没有关联对话框窗口,所以调用 mfc.printMsg();函数中的与窗口相关的操作均为非常操作。
[解决办法]
“CMFCTesttoDllDlg mfc; //意图给MFCdlg类一个实例mfc”
只是新 创建了 mfc。
而且 mfc 对话框 并没有打开(show),

你其实是 要 那个 已经 存在的 对话框。
所以 必须 得到 他的 指针。
[解决办法]
就如13L所说的,你用
CMFCTesttoDllDlg mfc; 
创建时一个新的对话框对象,并不是我们的主对话框(也就是我们程序启动时自动创建的对话框);所以你在调用
void CMFCTesttoDllDlg::printMsg() 
这个函数的时候其实是调用你新建立对象的函数,与我们主对话框没有一点关系。而又由于你没有对新对话框中的m_List1进行初始化,所以直接插入的时候就会出现错误;

CWinApp* pThisApp = AfxGetApp();
CWnd* pMainWnd = pThisApp->m_pMainWnd;

CMFCTesttoDllDlg * pMainDlg = (CMFCTesttoDllDlg *)pMainWnd;
if (pMainDlg == NULL)  return;
用上面的一段代码代替你定义mfc这条语句;

热点排行