如何才能使ATL组件向客户端传递字符串数组(BSTR),其接口的参数是什么(即接口如何写)??
解决方案 »
- 使用CFiledialog时,返回主界面标题栏变灰~什么情况?
- 如何获得编辑框的数据。
- 修改INI文件段名的API函数怎么写?
- 100分,界面高手请进来看看,有没有竖着的tabctrl控件(内附图)?
- 令人头痛的问题
- 急!可能是很简单的问题,可是我弄不明白!请各位帮忙!
- 怎么样隐藏进程,让他不显示在任务理器中。
- 我用一根 串口线(自己做的),连起了2 个串口,可用几个调试程序试的时候,接受到的字符与发送的不符合。
- 急!!!!!求助:怎么样制作一个象ip地址输入框一样的控件???
- 菜鳥問題:當我按窗體的關閉按鈕時,如何不讓程式關閉???
- 在线请教一个关于标准C的字符串问题:
- 请教一个关于CComboBox控件类型由dropdown改变为dropdownlist的问题!谢谢!急!
GetString(/*[out]*/BSTR* pbstrOut)
字符串数组:
用VARIANT类型,包含SafeArray指针数据
有很多
length在外部赋值,
在该方法里面,需要做一下操作:先为pbstrOut分配内存
*pbstrOut = (BSTR*)CoTaskMemAlloc(sizeof(BSTR) * *length);
然后可以对每项赋值了
for(int i=0;i<length;i++)
{
*pbstrOut[i] = ...;
}当然,代替的方法很多,比如:把几个字符串通过自定义的分隔符拼成一个串传出去
又或用安全数组更好
{
long l=0;
_bstr_t bstr;
char cstr[100]; SAFEARRAY* sa;
SAFEARRAYBOUND sb;
sb.lLbound=0;
sb.cElements=9;
sa=SafeArrayCreate(VT_BSTR,1,&sb);
for(l=0;l<10;l++)
{
sprintf(cstr,"%d",l);
bstr=cstr;
SafeArrayPutElement(sa,(long*)&l,bstr);
} VariantInit(str);
str.vt=VT_ARRAY|VT_BSTR;
str.parray=sa; return S_OK;
}
[id(1), helpstring("method ShowGrid")] HRESULT ShowGrid([out,in]int* length,[size_is(*length),out,retval]BSTR** pbstrOut);客户端调用为:
int i;
i=2;
BSTR * varValue=m_StationSet->ShowGrid(&i);CString strT[2];
strT[0]=_com_util::ConvertBSTRToString(varValue[0]);
strT[1]=_com_util::ConvertBSTRToString(varValue[1]);结果在最后一条语句执行时,出现Unhandled exception,希望大家指正?