CComVariant comVT;
comVT=oleS;//将BSTR转成CComVariant,这里一步也可,comVT=A2WBSTR((char*)s);
谢谢你!
但我还有一个问题,就是如果在s中有'\0'之类的东西我该怎么返回呢?char *遇到'\0'会认为到头了。完整的设计是这样的,我定义一个void * 用来从一个外部设备获取数据,该数据应该是unsigned char,我想把这个返回的数据作为属性传出,让其它应用使用(如VB)。
将'\0'转换成其它如'\1'就OK了,
用字符串数组
SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
if (!psa)
return S_FALSE;
HRESULT hr;
for (long i = 0; i < 1000; i ++)
if (FAILED (hr = SafeArrayPutElement(psa, &i, ((unsigned char*)piaRefTemplate) + i)))
return S_FALSE;
VARIANT va;
va.vt = VT_ARRAY | VT_UI1;
va.parray = psa;
CComVariant *m_Temp = new CComVariant();
m_Temp->Copy(&va);
17。类型转换 static_cast reinterprete_cast 的区别??
static_cast reinterprete_cast 的区别
static_cast会检查转换类型健的相关性
如果没有的画会有编译错误
reinterprete_cast就是硬转了
是否可以这样理解:在多重继承中,static_cast可实现对象指针的移动,从而指向正确的父类对象部分,而reinterprete_cast不作偏移?
在多重继承中可以用dynamic_cast啊
18。那如何取得CString中的字符串??
=(LPCTSTR)CString变量
方法太多了:
GetAt,Left,Mid,Right等等,就看你怎么取了!
可是不管是GetAt,Left,Mid,Right返回类型都是CString,还是不能用,我是要取其中的字符串,奇怪的是,VC中没有string类型。(我要的字符串是给树型控件中的分支名称)
有string类型的啊,要包含<string>
加上(LPCTSTR),相当于一个const char *了,还不能用?
GetBuffer
(LPSTR)(LPCTSTR)
...m_str.GetBuffer(needlen)...;
....
m_str.ReleaseBuffer()
espon99大侠,果然是绝招,不过能否解释一下啊?
19。如何从CString类型转换为Unicode string 类型?
CString本身就支持Unicode的。
只要你选择的是UniCode编译,生成的可执行程序就是支持UniCode的
CString类是自适应的就像TCHAR一样,如果你定义了UniCode宏 就会以UniCode编译
不是呀,我有个函数中有一个参数需Unicode string 类型的,比如应该填L"abc",而且引号中的内容要有变化,现在我有一个 temp变量,是CString类型的,如何用呀?
_T()
_TEXT()
行不行?
不行
强制转化:
CString temp;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27731-13.html
12海里指的是哪里
诺列加的前车之鉴你忘了