描述:
_variant_t i_code;
_bstr_t beg_date2;
char * i_scode;
i_code=pRss->GetCollect("id1");//从数据库里读出来得内容
i_code.ChangeType(VT_BSTR);
beg_date2=i_code.bstrVal;
i_scode=(char *)beg_date2;
cout<<i_scode<<endl;
我以前是用vb的,觉得类型定义不定义无所为。现在用C了,类型不能乱用了,有点头晕了。
问题1,从数据库里读出来,要打印出来为什么要这么大费力气类型转过来,转过去啊i_code.ChangeType(VT_BSTR);
beg_date2=i_code.bstrVal;
i_scode=(char *)beg_date2;有简单得方发吗?
2,我写了个com,接口如下
interface IMyComponent1111 : IDispatch{
[id(5), helpstring("method you5")] HRESULT you5(BSTR aa, [out,retval] BSTR * bb); }
方发如下:
STDMETHODIMP MyComponent1111::you5(BSTR aa, BSTR *bb)
{
*bb=aa;
return S_OK;
}
调试成功,单我要是想返回一个RS记录集呢?怎么做啊?
我式了很多类型,老是说类型出错。
解决方案1:
_variant_t到char*只要char *str=(char*)(_bstr_t)(var);就行了,不用那么多
解决方案2: 1,
_variant_t Code = pRss->GetCollect("id1"); //数据库里什么类型呀
_bstr_t Str = Code;
cout << (char*)Str << endl;
===============================================================
2,
//返回RS记录集
HRESULT Fun([out, retval] IDispatch** pVal);
{
ADODB::_RecordsetPtr pRS;
HRESULT hr = pRS.CreateInstance(__uuidof(ADODB::Recordset);
if (FAILED(hr))
return hr;
*pVal = pRS.Detach();
return S_OK;
}
//有错,应该这样
STDMETHODIMP MyComponent1111::you5(BSTR aa, BSTR *bb)
{
*bb = ::SysAllocString(aa);
return S_OK;
}