关于asp调用atl com的写法问题

KnowLittle 2002-02-04 01:48:12
加精
我写的atl com,里面定义了[out],[out, retval]两个参数。
我用vb调试的时候,写了dim resultstr as String,作为那个不是返回值的输出,调试成功。没有问题
现在我的同事需要在asp里面调用这个接口,不能写dim .. as string,不写也不对,怎么办?
...全文
321 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
joyplay 2002-02-19
  • 打赏
  • 举报
回复
倒霉,怎么没早来asp看看,这么多分呀..可惜可惜...
KnowLittle 2002-02-08
  • 打赏
  • 举报
回复
成了,参考了comxp的写法
bstrRet->bstrVal = CComBSTR("Err_NoAuthority").Copy();

高兴!给分,谢谢所有的人,谢谢大家
xuchu 2002-02-08
  • 打赏
  • 举报
回复
up
KnowLittle 2002-02-08
  • 打赏
  • 举报
回复

bstrRet->vt = VT_BSTR;
bstrRet->bstrVal = L"Err_Exception";
直接这样写可以吗
KnowLittle 2002-02-08
  • 打赏
  • 举报
回复
不抱错了,但是输出不正确,不管什么,输出都是空串
KnowLittle 2002-02-08
  • 打赏
  • 举报
回复
你总算来了,让我试试看
lcq521wrd 2002-02-08
  • 打赏
  • 举报
回复
STDMETHOD(AddLine)(/*[in]*/BSTR CompanyId,/*[in]*/BSTR UserName,/*[out]*/BSTR *bstrRet,/*[out,retval]*/long *retId);
{
建议BSTR改成VARIANT类型。。。。
_variant_t varTmp;
varTmp=从数据库中取数据!
//保证varTmp取的是VT_BSTR
VariantClear(bstrRet)
VariantCopy(bstrRet,&(varTmp.Detach());

}


asp use

set obj=server.......
RetVal=obj.AddLine(CStr(CID),CStr(UN),Pam)
response.write Pam
zarz 2002-02-07
  • 打赏
  • 举报
回复
i see
jml_boy 2002-02-07
  • 打赏
  • 举报
回复
UP UP UP
acptvb 2002-02-07
  • 打赏
  • 举报
回复
感谢您使用微软产品。

当在ASP中用VBScript调用COM组件的方法时,如果其中的参数声明为[out],将会出现您所提到的错误。您必须把这个参数声明为VARIANT指针类型的,ASP将以引用方式传递该参数。

声明如下:[out] VARIANT* ResultStr

您可以查看以下文章解决这个问题:
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q197957

微软全球技术中心 VB技术支持

立即参加微软认证的“最有价值专家”评选,赢取价值万元以上的丰富奖品!详情参见(http://www.csdn.net/expert/Topic/456/456919.shtm)

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
KnowLittle 2002-02-07
  • 打赏
  • 举报
回复
赫赫,我的信誉不是100,也是比较特别的嘛!!!
KnowLittle 2002-02-07
  • 打赏
  • 举报
回复
楼上的,谢谢
不过清仔细看看我的题目和一些回复
xtjack 2002-02-07
  • 打赏
  • 举报
回复
定义:
[id(1), helpstring("method getSign")] HRESULT getSign([in]BSTR srcStr,[out,retval]BSTR *destStr);

调用:
set obj=server.createobject("XXX.object")
deststr=obj.checkSign(srcStr)
set obj=nothing

这样是完全正确的,我使用了很多!
Davelu 2002-02-07
  • 打赏
  • 举报
回复
呵呵,我也帮忙顶吧!
希偌 2002-02-07
  • 打赏
  • 举报
回复
先说你的目的!
KnowLittle 2002-02-07
  • 打赏
  • 举报
回复
我顶
KnowLittle 2002-02-06
  • 打赏
  • 举报
回复
希望更多的朋友参与讨论 ,或者给出一些建议,
我知道分数没什么,关键是大家帮忙我年前完成这个冬冬,谢谢谢谢!!!!
KnowLittle 2002-02-06
  • 打赏
  • 举报
回复
我也觉得非常郁闷,我实在认为没什么错。
不过如果我把这个调用写成
dim ResultStr,resultId
resultId=myobj.addline(para1,para2,"")
就可以。

ComXP 2002-02-06
  • 打赏
  • 举报
回复
不应该出错呀,我这边就是这么用的。我把相关代码贴出来,你自己检查检查。
IDL:
[id(1), helpstring("method Register")] HRESULT Register(BSTR bsIpAddr, [out,ref]VARIANT* vRoomNo, [out,retval]long *plResult);

CPP:
STDMETHODIMP CCommander::Register(BSTR bsAddr, /*[out,ref]*/VARIANT *vRoomNo, /*[out,retval]*/long *plResult)
{
.......
*plResult = 0;
char szRoomNo[20];

......
VariantInit(vRoomNo);
vRoomNo->vt = VT_BSTR;
vRoomNo->bstrVal = CComBSTR(szRoomNo).Copy();

*plResult = 1;

return S_OK;
}

ASP:
Dim Cmd
Dim Room, result

Set Cmd = Server.CreateObject("XXX.Commander")
.....
result = Cmd.Register("1.2.3.4",Room)
if( result<>0 ) then
Response.Write Room
end if

这么做应该是没有问题的,如果不对,你就要检查其他原因了,比如是不是没有注册新的组件什么的。
KnowLittle 2002-02-06
  • 打赏
  • 举报
回复
to:ComXP
这个方法虽然有点奇怪,我还是试了一下,不过还是不行,依然报错
0x800a000d
加载更多回复(25)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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