我在ATL中这样定义我的函数的
[id(1), helpstring("method showset")] HRESULT showset([in] BSTR strinput,[out,retval] BSTR* strset);STDMETHODIMP Cshowset::showset(BSTR strinput, BSTR *strset)
{
// TODO: Add your implementation code here
char m_sys[20];
strcpy(m_sys,(char *)strinput);
// strcpy(m_sys,"TRM");怎么将strinput 的值传到m_sys中呢,就象这样strcpy(m_sys,"TRM");假如我输入TRM,怎么将TRM传到m_sys中呢,简单吧,请教大家了
[id(1), helpstring("method showset")] HRESULT showset([in] BSTR strinput,[out,retval] BSTR* strset);STDMETHODIMP Cshowset::showset(BSTR strinput, BSTR *strset)
{
// TODO: Add your implementation code here
char m_sys[20];
strcpy(m_sys,(char *)strinput);
// strcpy(m_sys,"TRM");怎么将strinput 的值传到m_sys中呢,就象这样strcpy(m_sys,"TRM");假如我输入TRM,怎么将TRM传到m_sys中呢,简单吧,请教大家了
解决方案 »
- 用webbrowser显示wap网站会有不兼容吗?有其它控件没有?
- 智能指针基础问题,大侠们,求明白。。。。
- MFC程序自动填写网页文本框出现的问题
- 如何使自绘制的按钮在鼠标划过的时候能改变图案?
- 你不就是个程序员吗?有什么了不起的
- 2000系统下 拷贝 4.3g的mdf文件,为什么会在最后 提示要几十万 分钟
- 申请版主,希望大家支持!
- 多线程在单核和多核CPU上的执行效率问题的讨论
- 如何设置COleDateTime的值?
- 请教一个递归问题的非递归求解方法!(22分,我全部的家当了)
- 关于toolbar和tab control......
- CBookmark<> *pBookmark怎么解释.在线等待!
strcpy(m_sys, szInput);
很不幸,我们喜爱的CString类在COM里用不了(CStringEx也一样),因为COM必须设
计成跨平台,它需要一种更普遍的方式来处理字符串以及其他数据。这就是VARIANT数据
类型的来历,还有BSTR类型。VARIANT就是一个巨大的 union,包含了你能想得到的所有
的数据类型,除了char*,不过还好,BSTR取代了char*。
(译者注:似乎VARIANT是个很慢的东西,大家都不愿意使它,不过按我看来,情况
没这么糟糕,union照理说不应该慢到哪去,要说慢,也是慢在给VARIANT分配地址空间
上,这点在VC里面做得比VB要好
这些东西看起来的确有点恐怖,不过实在用不着怕,等下面熟悉了这两个东西之后
,你会很快喜欢的)
简单来说,_variant_t是一个类,包装了VARIANT数据类型,并允许我们简单的对之
进行强制类型转换(相信大家都喜欢这个),_bstr_t对BSTR干了同样的事情。在下面的例
子里,你将看到怎么用GetCollect把数据取到VARIANT里,又怎么把它放到_bstr_t里,
最后强制转换成char*,以及把_variant_t强制转换成long、double或者其他一切东西:
_variant_t Holder;
// first get the VARIANT and put it into the _variant_t
Holder = MySet->GetCollect("FIELD_1");
// now put it into a _bstr_t and cast it to a char*
m_List.AddString((char*)_bstr_t(Holder));
对比一下没有用 _variant_t 和 _bstr_t 的代码:
COleVariant covFieldValuel
VARIANT vFieldValue
CString Holder;
MySet->GetFieldValue("FIELD_1", covFieldValue);
vFieldValue = (LPVARIANT)covFieldValue;
Holder.Format("%s",vFieldValue->pbVal);
m_List.AddString(Holder);
区别大了!
// TODO: Add your implementation code here
char m_sys[20];_bstr_t str(strinput);
strcpy(m_sys,str);// strcpy(m_sys,"TRM");