mfc dll中使用shockwave flash object控件遇到问题 很纠结 请大家帮忙!
这个问题困扰我3天了,在网上查了各种资料还未解决:
环境:vs2005,mfc dll工程(共享),在对话框中添加了一个shockwave flash object控件,并将其设置为对话框类的一个控件变量。
问题:执行这个dll时,会弹出“试图执行系统不支持的操作”。
HWND CDataExchange::PrepareCtrl(int nIDC)
{
……………………
pSite = m_pDlgWnd->GetOleControlSite(nIDC);
if (pSite == NULL)
{
TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
ASSERT(FALSE);
AfxThrowNotSupportedException();
}
}
nIDC是shockwave flash object控件的id值,但m_pDlgWnd->GetOleControlSite(nIDC)却返回空,跟进去后是因为COleControlContainer *m_pCtrlCont为空导致。然后AfxThrowNotSupportedException()就抛出“试图执行系统不支持的操作”。
注:1。已经在app类中做过AfxEnableControlContainer()、AfxOleInit()、CoInitialize( )工作。
2。如果是mfc应用程序的话,没有任何问题。
恳请大家帮我看看到底是哪里出了问题。万分感谢!!!
[解决办法]
你可以把复现问题的代码发给我,我帮你调试一下
gw_net@163.com
[解决办法]
没有Initinstance?是扩展DLL么?
[解决办法]
设置变量的时候,没有把对应的资源ID和变量进行绑定就执行了操作了,请确认你绑定了吗?
[解决办法]
http://www.vckbase.com/article/atl/0007.htm
[解决办法]
出问题的恐怕不仅仅是FLASH控件,其它OCX控件估计一样出问题。
问题的现象:从这个控件ID取不到SITE,导致断言出错。
我的猜测:既然取不到SITE,说明SITE没有创建成功,而SITE的创建是CONTAINER完成的,所以首先要检查CONTAINER是否有效。如果有效(调用了AfxEnableOleContainer时的正常情况)且没有被重载,CONTAINER会调用系统默认的OCCMANAGER,这个OCCMANAGER保存在模块信息里,或者从线程本地存储的数据中获取(应用程序提供的OCCMANAGER),但要正确地获取OCCMANAGER,需要正确地把本DLL的模块信息注册到MFC全局模块链中,但这个工作只能由MFC扩展DLL才能完成,REGULAR类型的DLL是不会做的。
建议改成扩展DLL试试,否则即使发现了问题原因也不一定能解决。