MFC ActiveX控件,在PowerBuilder里面使用,保存时出错!

youngwolf 2011-06-16 09:42:41
用MFC写一个控件,全部默认,然后在pb里面使用,拖到pb里面的一个窗口之上,然后保存,出现非法操作,调用栈为:
mfc71d.dll!COleControl::GetPropsetData(tagFORMATETC * lpFormatEtc=0x0013e070, tagSTGMEDIUM * lpStgMedium=0x0013e054, const _GUID & fmtid={...}) 行59 C++
mfc71d.dll!COleControl::OnRenderData(tagFORMATETC * lpFormatEtc=0x0013e070, tagSTGMEDIUM * lpStgMedium=0x0013e054) 行307 + 0x14 C++
mfc71d.dll!COleControl::CControlDataSource::OnRenderData(tagFORMATETC * lpFormatEtc=0x0013e070, tagSTGMEDIUM * lpStgMedium=0x0013e054) 行242 + 0x1e C++
mfc71d.dll!COleDataSource::XDataObject::GetDataHere(tagFORMATETC * lpFormatEtc=0x0013e070, tagSTGMEDIUM * lpStgMedium=0x0013e054) 行596 + 0x13 C++
mfc71d.dll!COleControl::XDataObject::GetDataHere(tagFORMATETC * pformatetc=0x0013e070, tagSTGMEDIUM * pmedium=0x0013e054) 行120 C++
pbvm90.dll!10b2b0ef()
pbvm90.dll!10b2772e()
pbvm90.dll!10b26892()
pbvm90.dll!10b2f6eb()
pbvm90.dll!10b15e01()
pbudo90.dll!1274f88c()
kernel32.dll!7c80e14f()
kernel32.dll!7c801a53()
libjsybheap.dll!004039ea()
pbvm90.dll!10bc48a3()
libjsybheap.dll!00402aaa()
ntdll.dll!7c92d9da()
kernel32.dll!7c801879()
libjsybheap.dll!00402158()
libjsybheap.dll!004021e2()
pbvm90.dll!10bc7ff1()
pbvm90.dll!10b541a6()
pbvm90.dll!10b809c4()
libjsybheap.dll!004039ea()
libjsybheap.dll!004024c1()
libjsybheap.dll!004024c1()
libjsybheap.dll!00402aaa()
ntdll.dll!7c92d9da()
kernel32.dll!7c801879()
libjsybheap.dll!004024c1()
libjsybheap.dll!00403325()
libjsybheap.dll!00403325()
ntdll.dll!7c92df8a()
kernel32.dll!7c810e96()
ntdll.dll!7c92d7da()
kernel32.dll!7c810ac6()
ntdll.dll!7c92df8a()
kernel32.dll!7c810e96()
kernel32.dll!7c810e96()
libjsybheap.dll!00403325()
kernel32.dll!7c810ac6()
msvcrt.dll!77c09f8e()
pbvm90.dll!10bc8031()
pbvm90.dll!10b53d6e()
pbvm90.dll!10b3dc87()
pbvm90.dll!10b3c5f7()
pbvm90.dll!10cb7994()
pbvm90.dll!10cb79ad()
pbvm90.dll!10c5eb4e()
pbvm90.dll!10c5eb64()
pbvm90.dll!10c74b57()
pbvm90.dll!10c74b72()
pbudo90.dll!1274f39a()
pbudo90.dll!1274f3af()
pbudo90.dll!1274ed07()
ntdll.dll!7c939f68()
ntdll.dll!7c939ffa()
ntdll.dll!7c96b721()
ntdll.dll!7c939f68()
ntdll.dll!7c939ffa()
ntdll.dll!7c96b721()
ntdll.dll!7c939ffa()
ntdll.dll!7c939ffa()
ntdll.dll!7c96b060()

环境:
vc2003+pb9.0

注:我用vc使用这个控件,也是拖到界面,然后保存,居然根本就不会调用到COleControl::XDataObject::GetDataHere,应该是mfc控件与pb的兼容性问题,不知道大家有没有人遇到过,怎么解决此问题!
...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吃草的公牛 2011-08-09
  • 打赏
  • 举报
回复
我也遇到这样的问题,求解!!
youngwolf 2011-06-16
  • 打赏
  • 举报
回复
能定位:
if (!pset.WriteToStream(lpStream))
{
TRACE(traceAppMsg, 0, "CPropertySet::WriteToStream failed.\n");
lpStream->Release();
lpStorage->Release();
return FALSE;
}
就是上面的lpStorage->Release();出错,因为它是NULL。
关键是,在vc里面使用控件,根本不会有这一系列调用,不知道为什么,pb里面去要这样调用。

就算我进入pset.WriteToStream(lpStream),看看是哪里出错了,也没办法解决啊。我一行代码都还没写过,就出这样的错。
ouyh12345 2011-06-16
  • 打赏
  • 举报
回复
没用过pb
能否用windbg调试,定位到具体的变量?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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