asp向VC++ COM 组件传数组参数的问提?再线 请个小例子,和说明!!!谢谢指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 asp是vbscript,所以不存在数组,全部是变体变量,所以数组需要以变体变量传入,在com中自己判断检查后转换为数组。 [id(1), helpstring("method ExpectArray")] HRESULT ExpectArray([in] VARIANT varArray,[out,retval]BSTR* outstr);STDMETHODIMP CArrayTest::ExpectArray(VARIANT pvarArray,BSTR* outstr){ // accepte array from vbscript _bstr_t bstmp; VARIANT* varArray; if(pvarArray.vt==(VT_VARIANT|VT_BYREF)) { varArray = pvarArray.pvarVal; } else varArray = &pvarArray; if(VT_ARRAY|VT_BYREF|VT_VARIANT==varArray->vt) { VARIANT* strarray; SAFEARRAY* psa = *(varArray->pparray); //SafeArrayCopy( *(varArray->pparray),&psa); SafeArrayAccessData(psa,(void**)&strarray); UINT uDim = SafeArrayGetDim(psa); if(uDim==1) { long lLbound,lRbound; SafeArrayGetLBound(psa,1,&lLbound); SafeArrayGetUBound(psa,1,&lRbound); for(long i=lLbound;i<=lRbound;i++) { if(strarray[i].vt==VT_BSTR) bstmp +=strarray[i].bstrVal; else if(strarray[i].vt==VT_EMPTY) { char buf[64]; wsprintf(buf,"element%d is empty",i); bstmp +=buf; } } } else bstmp = "wrong dimension number"; SafeArrayUnaccessData(psa); } *outstr = bstmp.copy(); return S_OK;}set obj = createobject("AcceptArray.ArrayTest")dim s(3)s(1) = "aaa"s(2) = "bbb"s(3) = "ccc"obj.expectarray(s)set obj = nothing asp中传递参数给ocx控件如何传递?例如:控件中有个方法test(long ss);asp中用<object classid="test" ....>对象加入控件然后调用test.test("hi")却不成功,但未提示什么错误请问一般的参数如何传递啊? to seventhmm(一线飘飘) :<object id=ctrTest classid=clsid:838C58E9-1C5C-409B-AA18-B156DCB65DD9 Width=20 Height=20> </object> ctrTest.test("hi") classid 不是 idid用于在页面中定位具体的控件,classid 用于 在操作系统中定位ocx__________________另外: test(long ss);中参数是个长整型变量,而你调用时,跟的是字符串 >>masterz(MS MVP) ( )谢谢 祝福还在编程的人端午节快乐 图标提示消息的是什么窗口类型? 如何运行带有命令行的程序 如何用VC6编程显示PNG格式的图片? 问一个GSM 模块发短信的问题 为什么图形交叉部分不能显示? 这里有PCI,USB的技术规范,还有MP3的编解码规范。 哪位高手帮帮忙,为什么#include "winuser.h"没有用!我看了好多论坛都没有回答这个问题 DISPID_NEWWINDOW3 无法打开广告页 vc++可以自动为表建立相应的类吗? SOS! 如何改工程名~ ---->如何实现这样的文件格式?
STDMETHODIMP CArrayTest::ExpectArray(VARIANT pvarArray,BSTR* outstr)
{
// accepte array from vbscript
_bstr_t bstmp;
VARIANT* varArray;
if(pvarArray.vt==(VT_VARIANT|VT_BYREF))
{
varArray = pvarArray.pvarVal;
}
else
varArray = &pvarArray;
if(VT_ARRAY|VT_BYREF|VT_VARIANT==varArray->vt)
{
VARIANT* strarray;
SAFEARRAY* psa = *(varArray->pparray);
//SafeArrayCopy( *(varArray->pparray),&psa);
SafeArrayAccessData(psa,(void**)&strarray);
UINT uDim = SafeArrayGetDim(psa);
if(uDim==1)
{
long lLbound,lRbound;
SafeArrayGetLBound(psa,1,&lLbound);
SafeArrayGetUBound(psa,1,&lRbound);
for(long i=lLbound;i<=lRbound;i++)
{
if(strarray[i].vt==VT_BSTR)
bstmp +=strarray[i].bstrVal;
else if(strarray[i].vt==VT_EMPTY)
{
char buf[64];
wsprintf(buf,"element%d is empty",i);
bstmp +=buf;
}
}
}
else
bstmp = "wrong dimension number";
SafeArrayUnaccessData(psa);
}
*outstr = bstmp.copy();
return S_OK;
}set obj = createobject("AcceptArray.ArrayTest")
dim s(3)
s(1) = "aaa"
s(2) = "bbb"
s(3) = "ccc"
obj.expectarray(s)set obj = nothing
例如:控件中有个方法test(long ss);
asp中用<object classid="test" ....>对象加入控件
然后调用test.test("hi")
却不成功,但未提示什么错误
请问一般的参数如何传递啊?
id用于在页面中定位具体的控件,
classid 用于 在操作系统中定位ocx
__________________
另外:
test(long ss);中参数是个长整型变量,而你调用时,跟的是字符串
谢谢