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

mfc dll中使用shockwave flash object控件遇到有关问题 很纠结 请大家帮忙

2012-01-20 
mfc dll中使用shockwave flash object控件遇到问题 很纠结 请大家帮忙!这个问题困扰我3天了,在网上查了各

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试试,否则即使发现了问题原因也不一定能解决。

热点排行