描述:
我在修改一个ActiveX控件(也就是dsoframer控件,应该有人听过用过,有个商业的NTKO的office控件就是建立在那个基础上的),基本上按自己的要求改好了。
可最近发现一个问题,就是我的控件在VC及DELPHI开发工具中,有着不同的表现。在VC、网页以及ActiveX容器中表现正常,可在delphi无法正常显示。经我跟踪发现是控件在取得本身所处于的模式时(运行还是设计)引发了异常。具体的语句如下:
IDispatch *pdisp;
m_pClientSite->QueryInterface(IID_IDispatch, (void **)&pdisp));
VARIANT vtUserMode;
DISPPARAMS dspparm = {NULL, NULL, 0, 0};
hr = pdisp->Invoke(DISPID_AMBIENT_USERMODE, IID_NULL, LOCALE_USER_DEFAULT, (WORD)(DISPATCH_METHOD | DISPATCH_PROPERTYGET), &dspparm, &vtUserMode, NULL, NULL);
通过以上的方式来查询控件所处的模式,为什么在Delphi程序中运行不正常。当执行到Invoke方法时就产生了异常。
请高手们帮我分析一下。谢谢。
解决方案1:
那个函数就是COleControl类提供的,如果没有使用COleControl,我也不知道怎么获取。既然AmbientUserMode是COleControl的一个成员函数,那么组件本身当然随时可以调用。