HRESULT hr=E_FAIL;
CComPtr<IObjectContext>pObjContext;
hr=::GetObjectContext(&pObjContext);
CComPtr<IRequest>pRequest=NULL;
CComPtr<ISessionObject>pSession=NULL;
if(SUCCEEDED(hr))
{
CComPtr<IGetContextProperties>pProps;
hr=pObjContext->QueryInterface(IID_IGetContextProperties,(void**)&pProps);
if(SUCCEEDED(hr))
{
CComBSTR bstrASPObj="Session";
CComVariant vt;
if(SUCCEEDED(pProps->GetProperty(bstrASPObj,&vt)))
{
if(V_VT(&vt)==VT_DISPATCH)
{
IDispatch *pDispatch=V_DISPATCH(&vt);
if(pDispatch)
{
hr=pDispatch->QueryInterface(IID_ISession,(void **)&pSession);
}
}
}
以后的代码不用写啦吧
CComPtr<IObjectContext>pObjContext;
hr=::GetObjectContext(&pObjContext);
CComPtr<IRequest>pRequest=NULL;
CComPtr<ISessionObject>pSession=NULL;
if(SUCCEEDED(hr))
{
CComPtr<IGetContextProperties>pProps;
hr=pObjContext->QueryInterface(IID_IGetContextProperties,(void**)&pProps);
if(SUCCEEDED(hr))
{
CComBSTR bstrASPObj="Session";
CComVariant vt;
if(SUCCEEDED(pProps->GetProperty(bstrASPObj,&vt)))
{
if(V_VT(&vt)==VT_DISPATCH)
{
IDispatch *pDispatch=V_DISPATCH(&vt);
if(pDispatch)
{
hr=pDispatch->QueryInterface(IID_ISession,(void **)&pSession);
}
}
}
以后的代码不用写啦吧
解决方案 »
- windows内部实现到底是基于Unicode还是UTF-8
- VC CreateFile打开 带点文件夹d:\abc..\server.asp失败
- 大侠们帮帮忙!! 如何枚举本地的域用户和如何判断本地是否设置了域登录????
- 请教些很杂碎的VC基础问题..
- 如何处理批量tip
- 怎样将bmp文件去掉文件头,然后将内容按宽度分成10块存成二进制流的形式文件
- 如何判断一个文件是否打开成功?
- acmStreamOpen出错
- 我用VC6。0想在一个EXE 工程中使用控件时需要包含它的头文件,但是如果包含它的头文件就会导致太多的变量的重复定义,请问有办法解决这个
- const value_data & init_data=value_data();什么意思
- 我该如何自己去实现类似Windows的“拷贝文件对话框”?
- 请问那里有关于内存分配地址方面的资料
下面是我的一个使用session对象的简单例子
看看在参照MSDN应该可以解决问题的
STDMETHODIMP CASPComp::GetSessionValue(BSTR bstrValue, VARIANT *pvar)
{
// TODO: Add your implementation code here
HRESULT hr=E_FAIL;
CComPtr<IObjectContext>pObjContext;
hr=::GetObjectContext(&pObjContext);
// CComPtr<IRequest>pRequest=NULL;
CComPtr<ISessionObject>pSession=NULL;
if(SUCCEEDED(hr))
{
CComPtr<IGetContextProperties>pProps;
hr=pObjContext->QueryInterface(IID_IGetContextProperties,(void**)&pProps);
if(SUCCEEDED(hr))
{
CComBSTR bstrASPObj="Session";
CComVariant vt;
if(SUCCEEDED(pProps->GetProperty(bstrASPObj,&vt)))
{
if(V_VT(&vt)==VT_DISPATCH)
{
IDispatch *pDispatch=V_DISPATCH(&vt);
if(pDispatch)
{
hr=pDispatch->QueryInterface(IID_ISessionObject,(void **)&pSession);
if(pSession)
{
pSession->get_Value(bstrValue,pvar);
}
}
}
}
}
} return S_OK;
}
使用啦ISessionObject的get_value方法
下面是接口的定义
public interface asp.ISessionObject
extends com.ms.com.IUnknown
{
//Methods
public abstract void Abandon();
public abstract com.ms.com.Variant getValue(java.lang.String);
public abstract void putValue(java.lang.String, com.ms.com.Variant);
public abstract int getCodePage();
public abstract void putCodePage(int);
public abstract asp.IVariantDictionary getContents()
public abstract int getLCID();
public abstract asp.IVariantDictionary getStaticObjects();
public abstract java.lang.String getSessionID();
public abstract int getTimeout();
public abstract void putTimeout(int);
public abstract void putLCID(int);
}