请ATL高手解答一下是什么原因
不好意思,其他版块没解决的问题,我只好在这里问ATL高手了
使用同样的方法在DEPHIL里建立OCX控件,然后在VS2005调用测试通过,同一个环境和内容,为什么C++BUILDER
写的在调用时提示:Assertion failed:pClientSite==0||m_spClientSite==0,file c:\program files\embarcadero\rad studio\7.0\include\atl\atlctl.h,line 911
是不是编译的时候要设置什么? 备注:使用C++BUILDER写的这个控件在VB非托管程序能正常调用,但是在VS2005托管就
出现上述错误。但是DEPHIL写的就没有任何问题,请问是什么原因?
附上atlctl.h代码内容
inline HRESULT CComControlBase::IOleObject_SetClientSite(IOleClientSite *pClientSite)
{
ATLASSERT(pClientSite == NULL || m_spClientSite == NULL); 该行为911行
m_spClientSite = pClientSite;
m_spAmbientDispatch.Release();
if (m_spClientSite != NULL)
{
m_spClientSite->QueryInterface(IID_IDispatch,
(void**) &m_spAmbientDispatch.p);
}
return S_OK;
}
[解决办法]
说明pClientSite传进来个空的呀。
托管的要保证绝对安全的,非托管无所谓。
你这句话本来就有危险。ASSERT报告错误,就程序崩溃了。
1.用非托管的话。
2.不喜欢的话,改atlctl.h也可以尝试。又不是没干过这事。