把rich edit2.0里面的文字和格式保存到rtf文件中。es.pfnCallback = MyStreamOutCallback编译出错

c++。 2017-10-20 03:45:00
我使用的vs2010 MFC,想把rich edit2.0里面的文字和格式保存到rtf文件中。
static DWORD CALLBACK
MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
pFile->Write(pbBuff, cb);
*pcb = cb;
return 0;
}


CFile cFile(TEXT("myfile.rtf"),CFile::modeCreate|CFile::modeWrite);
EDITSTREAM es;
es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamOutCallback;
m_richedit.StreamOut(SF_RTF, es);



部分截取后编译后出现:
error C2440: “=”: 无法从“DWORD (__cdecl *)(DWORD,LPBYTE,LONG,LONG *)”转换为“EDITSTREAMCALLBACK”
该转换要求 reinterpret_cast、C 样式转换或函数类型转换
问题出在es.pfnCallback = MyStreamOutCallback;,请问在哪里有问题,怎么改?
...全文
283 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2018-12-11
  • 打赏
  • 举报
回复
定义是早期版本的吧 用DWORD_PTR
EDITSTREAMCALLBACK callback function
菜鸟级小乌龟 2018-12-11
  • 打赏
  • 举报
回复
在你那里面EDITSTREAMCALLBACK的定义可能不是
typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
而是
typedef DWORD (CALLBACK *EDITSTREAMCALLBACK)(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb);
菜鸟级小乌龟 2018-12-11
  • 打赏
  • 举报
回复
改成:
static DWORD CALLBACK  
MyStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
pFile->Write(pbBuff, cb);
*pcb = cb;
return 0;
}


CFile cFile(TEXT("myfile.rtf"),CFile::modeCreate|CFile::modeWrite);
EDITSTREAM es;
es.dwCookie = (DWORD_PTR) &cFile;
es.pfnCallback = MyStreamOutCallback;
m_richedit.StreamOut(SF_RTF, es);

「已注销」 2017-10-26
  • 打赏
  • 举报
回复
&MyStreamOutCallback
赵4老师 2017-10-20
  • 打赏
  • 举报
回复
百度搜相关关键字。 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧