急,在线等

tcxjia 2007-11-30 04:37:54
void GetScriptMaps()
{
::CoInitialize(NULL);
IADsContainer* iContainer;
IADs* iAds;
int i=0;
VARIANT sPort;
SAFEARRAY* psa;
CString tcx;
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)
{
VARIANT* varArray=NULL;
SafeArrayAccessData(sPort.parray,(VOID**)&varArray);
UINT uDim = SafeArrayGetDim(sPort.parray);
if(1==uDim)
{
long lLbound,lRbound;
SafeArrayGetLBound(sPort.parray,1,&lLbound);
SafeArrayGetUBound(sPort.parray,1,&lRbound);
long size = lRbound-lLbound+2;
VARIANT* tArray=NULL;
SAFEARRAYBOUND aDim[1];
aDim[0].lLbound= 0;
aDim[0].cElements= size;
psa= SafeArrayCreate(VT_VARIANT,1,aDim);

long Lbound,Rbound,index;
SafeArrayGetLBound(psa,1,&Lbound);
SafeArrayGetUBound(psa,1,&Rbound);
SafeArrayAccessData(psa,(VOID**)&tArray);
long sizeo = Rbound-Lbound+1;

index=Lbound;
for(long i=lLbound;i<=lRbound;i++)
{
if(index<sizeo)
tArray[index].bstrVal = varArray[i].bstrVal;

index++;
}
tArray[sizeo-1].bstrVal=SysAllocString "*,D:\\myprogram\\DataIN\\DLLRelll\\DataIN.dll,4,GET,POST,HEAD,TRACE"); SafeArrayUnaccessData(psa);
SafeArrayUnaccessData(sPort.parray);
}
}
}
sPort.parray = psa;

iAds->Put(_bstr_t("ScriptMaps"),sPort);
iAds->SetInfo();
iAds->Release();
iContainer->Release();
}
::CoUninitialize();
}
大家帮忙看看这段代码有什么问题.
iAds->Put(_bstr_t("ScriptMaps"),sPort);没有起作用.为什么改不了ScriptMaps的属性呢?以及有什么解决方法?
...全文
187 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcxjia 2007-12-03
  • 打赏
  • 举报
回复
谢谢前面几位的帮忙
但是问题还是没有解决,希望大家帮下忙,分不够可以再加,关键是很急
tcxjia 2007-12-03
  • 打赏
  • 举报
回复
awperpvip 挖靠我狂晕来CSDN这么久,竟不知道原来名字可以这么长
发表于:2007-11-30 18:00:57
The variant should be of type VT_ARRAY and point to a SAFEARRAY.

我就是这么做的.你可以看代码

awperpvip 2007-11-30
  • 打赏
  • 举报
回复
The variant should be of type VT_ARRAY and point to a SAFEARRAY.
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
我的意思是你这条语句是把什么类型转换成什么类型的?
awperpvip 2007-11-30
  • 打赏
  • 举报
回复
不知道你要哪个
_variant_t(const _bstr_t& bstrSrc );
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
转换哪个?
awperpvip 2007-11-30
  • 打赏
  • 举报
回复
转换一下
_bstr_t(_variant_t& var);
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
现在问题就明朗了
就是Put()参数就不支持VARIANT为VT_ARRAY参数的话
如果我要添加一条字符串,那该怎么办?
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
另外,如果 hr=iAds-> Get(_bstr_t("ScriptMaps"),&sPort);
CString s(sPort.bstrVal);
AfxMessageBox(s);
s为乱码
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
HRESULT hr=iAds-> Get(_bstr_t("ScriptMaps"),&sPort); 读取的时候就读到了VARIANT为VT_ARRAY参数的sPort里面,
我就是在后面加的.
现在,如果我直接把字符串合并了后再put的话,系统指认第一条.我还尝试了在字符串之间加入\n等特殊字符但是还是分割不了.系统就认第一条,在4后面的所有字符串都认为是动作了
yxz_lp 2007-11-30
  • 打赏
  • 举报
回复
iAds-> Put()参数就不支持VARIANT为VT_ARRAY参数。
你可以尝试

 iAds-> Gut(_bstr_t("ScriptMaps"),sPort);
sPort再加上"*,D:\\myprogram\\DataIN\\DLLRelll\\DataIN.dll,4,GET,POST,HEAD,TRACE"
iAds-> Put(_bstr_t("ScriptMaps"),sPort);

tcxjia 2007-11-30
  • 打赏
  • 举报
回复
这个例子看过了,还是谢谢你
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
ScriptMaps属性系统自带的,我只是想添加一条自己的映射到上面
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
如果我直接另sPort= _variant_t("*,D:\\myprogram\\DataIN\\DLLRelll\\DataIN.dll,4,GET,POST,HEAD,TRACE");
然后 iAds-> Put(_bstr_t("ScriptMaps"),sPort); 就可以输入进去
但输入进去后就把所有的都覆盖了,只有这一个了
yxz_lp 2007-11-30
  • 打赏
  • 举报
回复
下面是MSDN的例子,你对照下

HRESULT hr;
IADs *pADs = NULL;
LPWSTR pszADsPath = L"LDAP://CN=JeffSmith,CN=Users,DC=Fabrikam,DC=com";

CoInitialize(NULL);

//////////////////////////////////
// Modifying attributes using IADs
//////////////////////////////////
hr = ADsGetObject(pszADsPath, IID_IADs, (void**) &pADs);

if(SUCCEEDED(hr))
{
VARIANT var;
VariantInit(&var);

// Set the first name.
V_BSTR(&var) = SysAllocString(L"Jeff");
V_VT(&var) = VT_BSTR;
hr = pADs->Put(CComBSTR("givenName"), var);

// Set the last name.
VariantClear(&var);
V_BSTR(&var) = SysAllocString(L"Smith");
V_VT(&var) = VT_BSTR;
hr = pADs->Put(CComBSTR("sn"), var);
VariantClear(&var);

// Other Telephones.
LPWSTR pszPhones[] = { L"425-707-9790", L"425-707-9791" };
DWORD dwNumber = sizeof(pszPhones)/sizeof(LPWSTR);
hr = ADsBuildVarArrayStr(pszPhones, dwNumber, &var);
hr = pADs->Put(CComBSTR("otherTelephone"), var);
VariantClear(&var);

// Commit the change to the directory.
hr = pADs->SetInfo();
pADs->Release();
}

CoUninitialize();

tcxjia 2007-11-30
  • 打赏
  • 举报
回复
执行是成功的
yxz_lp 2007-11-30
  • 打赏
  • 举报
回复
首先HRESULT hr= iAds-> Put(_bstr_t("ScriptMaps"),sPort); //是否执行成功,看看hr的返回值
tcxjia 2007-11-30
  • 打赏
  • 举报
回复
没排好版,见晾

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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