大侠们,救命啊,在线等,高分,谁来告诉我SAFEARRAY具体怎么用啊??

explosun 2003-10-15 03:07:40
如题
...全文
40 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingjust 2003-10-16
  • 打赏
  • 举报
回复
SAFEARRAY* psaDataID = NULL;


long lSize=prsID->RecordCount*sizeof(long);
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = lSize;
psaDataID= SafeArrayCreate( VT_I4, 1, rgsabound );

SafeArrayAccessData( psaDataID, (void**)&plData );
for(int i=0;i<iCount;i++)
{
long lID=prsID->Fields->GetItem(L"DOCID")->Value;
plData[i]=lID;
prsID->MoveNext();
}
SafeArrayUnaccessData(psaDataID);
long lRet=-2;
SafeArrayDestroy(psaDataID);
atEleven 2003-10-15
  • 打赏
  • 举报
回复
http://www.codeproject.com/atl/udtdemo.asp
Eearbird 2003-10-15
  • 打赏
  • 举报
回复
你可以参考这个例子:
void GetScriptMaps()
{
IADsContainer* iContainer;
IADs* iAds;
VARIANT SC;
char s[5];
int i=0;
char dirName[MAX_PATH];
VARIANT path , state, sPort;
if(ADsGetObject(L"IIS://localhost/w3svc",IID_IADsContainer,(void**)&iContainer)==S_OK) {
//得到默认站点
iContainer->GetObject(_bstr_t("IIsWebServer"), _bstr_t("1"),(IDispatch**)&iAds);
if(iAds==NULL) return ;
VariantInit(&sPort);
HRESULT hr=iAds->Get(_bstr_t("ScriptMaps"),&sPort);
if(SUCCEEDED(hr))
{
if(sPort.vt ==VT_ARRAY|VT_VARIANT)
{
SAFEARRAY* psa = sPort.parray;
VARIANT* varArray=NULL;
SafeArrayAccessData(psa,(VOID**)&varArray);
UINT uDim = SafeArrayGetDim(psa);
if(1==uDim)
{
long lLbound,lRbound;
SafeArrayGetLBound(psa,1,&lLbound);
SafeArrayGetUBound(psa,1,&lRbound);
for(long i=lLbound;i<=lRbound;i++)
{
if(varArray[i].vt==VT_BSTR)
{
_bstr_t bstmp(varArray[i].bstrVal,true);
printf((LPCTSTR)bstmp);
printf("\n");
}
}
SafeArrayUnaccessData(psa);
}
}
}
iAds->Release();
}
}
drip 2003-10-15
  • 打赏
  • 举报
回复
不懂,帮你up

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧