COM组件如何传递数组作为参数 参数写VARIANT 里面放一个SAFEARRAY 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SAFEARRAY* pSafeArray;SAFEARRAYBOUND rgsabound[1];rgsabound[0].lLbound = 0;rgsabound[0].cElements = num;pSafeArray = SafeArrayCreate(VT_BSTR, 1, rgsabound);if(pSafeArray == NULL){return;}for(long n = 0; n < num; n++){BSTR bstr = SysAllocString(tempArray[n].c_str());SafeArrayPutElement(pSafeArray, &n, bstr);SysFreeString(bstr);}VARIANT pArray;pArray.vt = VT_ARRAY|VT_BSTR;pArray.parray = pSafeArray;使用long plLowBound, plUpperBound;SafeArrayGetLBound(data.parray, 1, &plLowBound);SafeArrayGetUBound(data.parray, 1, &plUpperBound);if (plUpperBound < plLowBound)return E_FAIL; BSTR bstr = SysAllocString(L"");SafeArrayGetElement(pArray, &i, &bstr);接口的参数声明:(VARIANT data) http://blog.chinaunix.net/uid-21372424-id-119789.html SAFEARRAY是比较方便的方法,如果你不愿意使用,可以自己构造一个格式的字符串的方式(比如将所有数据构造在一个xml中,然后通过字符串传递),这样做的好处是灵活,比如先在外面定义一个模板,当数据格式改变了,你只需要改变模板文件而不必改源代码重新编译,缺点是由解析而造成效率较低,不适宜用在反复频繁调用的地方。 动态库 VC2010 线程 同步 与 对话框刷新 CString中ACSII转换十进制~~ 句柄的传递 请问怎么在“打开”和“另存为”对话框中加入文件过滤器? 这个 问题出在哪里啊? 怎么样获得系统时间? 谁能帮帮忙,给我一个切分窗口的代码例子 很简单的一个绘图问题 新人过来求救,有好心人吗? 重绘clistctrl 莫名出现残影,请大家帮忙看看那~ 32位程序与64位dll问题
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = num;pSafeArray = SafeArrayCreate(VT_BSTR, 1, rgsabound);
if(pSafeArray == NULL)
{
return;
}for(long n = 0; n < num; n++)
{
BSTR bstr = SysAllocString(tempArray[n].c_str());
SafeArrayPutElement(pSafeArray, &n, bstr);
SysFreeString(bstr);
}VARIANT pArray;
pArray.vt = VT_ARRAY|VT_BSTR;
pArray.parray = pSafeArray;
使用
long plLowBound, plUpperBound;
SafeArrayGetLBound(data.parray, 1, &plLowBound);
SafeArrayGetUBound(data.parray, 1, &plUpperBound);if (plUpperBound < plLowBound)
return E_FAIL; BSTR bstr = SysAllocString(L"");
SafeArrayGetElement(pArray, &i, &bstr);
接口的参数声明:
(VARIANT data)