• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 头要爆老,(关于ASP中用VBSCript,向自编COM传参数的问题??????)

头要爆老,(关于ASP中用VBSCript,向自编COM传参数的问题??????)

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了asp vbscript,asp vbscript教程,asp vbscript是什么,vbscript,vbscript教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 头要爆老,(关于ASP中用VBSCript,向自编COM传参数的问题??????)
描述:

情况如下,
    我用VC编有一COM组件,内一接口,某函数,需要传入字符串数组。
    我用VB能够很好的调用,并能得到正确结果。但是,在ASP中使用VBScript
来调用时,却说“服务器出现意外情况”,不能执行。请问为什么??
VC
______________
IDL:[id(3), helpstring("GetProData")] HRESULT GetProData([in]int iProType, [in]VARIANT Parames,[out,retval]VARIANT *pReturn);
STDMETHODIMP CUnRealDraw::GetProData(int iProType, VARIANT Parames, VARIANT *pReturn)
{
// Get the parames
_bstr_t tt;
tt="into the param it";
HRESULT hr=S_OK;
long lStartBound =0;
long lEndBound = 2;
hr = SafeArrayGetLBound(Parames.parray, 1, &lStartBound);
hr = SafeArrayGetUBound(Parames.parray, 1, &lEndBound);
SAFEARRAYBOUND safeBound[1]; 
SAFEARRAY* pOutArray;
safeBound[0].cElements = lEndBound-lStartBound+1;    
safeBound[0].lLbound = 0;
pOutArray = SafeArrayCreate(VT_VARIANT,1,safeBound);
for(long iIndex = lStartBound; iIndex <= lEndBound; iIndex ++)
{
VARIANT varFlavor;
VariantInit(&varFlavor);
hr = SafeArrayGetElement(Parames.parray,&iIndex, &varFlavor);
if(hr != S_OK)
{
tt="error,can't find the value";
}
if(varFlavor.vt == VT_I4 )
{
long lsz = varFlavor.lVal;
}
if(varFlavor.vt == VT_BSTR )
{
_bstr_t bstrOut(varFlavor.bstrVal);
CComVariant variantFlavor(SysAllocString(varFlavor.bstrVal));
SafeArrayPutElement(pOutArray,&iIndex,&variantFlavor);
tt= bstrOut;
}
}//for loop
//......
//.......
//return the VARIANT
V_VT(pReturn)=VT_ARRAY | VT_VARIANT;
V_ARRAY(pReturn) = pOutArray;
return S_OK;
}
____________________
VB
_______________
Dim tt As UnRealDraw
Set tt = New UnRealDraw
Dim InVar(4)
Dim inn
inn = 12
InVar(0) = "sssss"
InVar(1) = "lava_sdb"
InVar(2) = " nihao"
InVar(3) = "ss"
InVar(4) = "dd"
'Dim filesize
Dim OutStr
Dim szOut As String
OutStr = tt.GetProData(1, InVar)
For x = LBound(OutStr) To UBound(OutStr)
    szOut = szOut + OutStr(x)
Next
MsgBox szOut
____________________
********************
VBScript(ASP)
_______________
<%
Set objArray= Server.CreateObject("YWPT.UnRealDraw") 
InVar=Array("lava_sdb"," nihao")
'InVar(1)="lava_sdb"
'InVar(2)=" nihao"
'Dim filesize
Dim OutStr
OutStr = objArray.GetProData(1, InVar)
  
    for x= LBound(OutStr) to UBound(OutStr)
      Response.write "<BR>"&x&": "&OutStr(x) 
    next 
 Set objArray= nothing 
%>
____________________
先谢谢各位了!!!!


解决方案1:

gz

解决方案2:

你不返回VARIANT* 返回 SAFEARRAY*试试

解决方案3:

应该是返回值VARIANT *pReturn出了问题,以前我在调试ASP组件经常出现这些问题,ASP组件采用VB测试,完全正常,但是对于ASP环境下采用脚本调用老是pReturn返回出错.于是我就发现,如果是返回的VARIANT 类型变量是一个BSTR类型,就单独为它采用SysAllocString分配一个空间,VT采用BSTR
pReturn->bstrVal=SysAllocString("....");
pReturn->VT=VT_BSTR;
对于VARIANT是其他类型的情况.干脆定义一个VARIANT成员变量.这个变量的初始化放在构造函数中.变量的释放放在析构函数中.方法调用时把这个变量的地址直接赋值给pReturn;
pReturn=&m_vValue;

解决方案4:

VBScript(ASP)
_______________
<%
Set objArray= Server.CreateObject("YWPT.UnRealDraw") 
InVar=Array("lava_sdb"," nihao")
'InVar(1)="lava_sdb"
'InVar(2)=" nihao"
'Dim filesize
Dim OutStr
OutStr = objArray.GetProData(1, InVar)
Set objArray= nothing 
%>
看看这样是否正常

解决方案5:

>>Response.write "<BR>"&x&": "&OutStr(x) 
改为:Response.write "<BR>"&x&": "&OutStr&x 
试试
不过我估计不是这个原因,依次在每个语句后用Response.End测试是哪个语句出的问题


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用VC生成的组件,VB中可以正常使用,asp+VbScript出错
  • 头要爆老,(关于ASP中用VBSCript,向自编COM传参数的问题??????)

相关文章

  • 2017-06-05 使用导出符号表lib的三种方法。
  • 2017-06-05 我用钩子(Hook)获得的键盘消息,不知道如何区分是按下还是弹起。
  • 2017-06-04 ATL控件中使用文本框控件
  • 2017-06-05 刚建一个基于对话框的含windowsocket的就运行不了,为什么?
  • 2017-06-05 搜集定时启动完成一定功能的方法!
  • 2017-06-04 一个ATL问题。
  • 2017-06-04 大虾们,帮我看看,这个错误和警告是什么原因造成的?
  • 2017-06-05 ATL如何返回两个集合对象?
  • 2017-06-05 谁用过jointhread处理过线程的等待?
  • 2017-06-04 大家好,一个关于进程外服务退出的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VC客户端释放DLL中new的内存时出错,很奇怪
    • 在一个atl的聚合控件里insertactivex后,如何控制这个activex???
    • 新手vs2003创建MFCactivex控件怎样用向导生成一个能传递字符串参数的函数呀???
    • 用VC如何操作安全策略?
    • 如何取得Outlook信件的原始碼
    • 用vc做一个画图dll供asp的createobject调用
    • Win2000SERVER的程序能开多少个线程?
    • 通过IHTMLDocument2接口只能得到body源码,有设呢方法可以到的head的源码?
    • 请问ATL中有没有象CUIArray等类可以直接这样a[10]=10取值啊?
    • VC6+SQLServer+ODBC+5个线程的程序跑起来后,所占内存不断以32K递增?!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有