佚名通过本文主要向大家介绍了javascript activex,activex控件下载,activex控件,activex控件被阻止,activex控件下载xp等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ActiveX接口返回VARIANT ,VC调用成功,javascript调用异常,为什么?
描述:
在一个.html 页面里,用 javascript 调用,异常:
是我的ActiveX接口写的不对呢,还是javascript 调用方式不对?
或者,因为是有指针的缘故么?
而SAFEARRY里面也有指针啊,
VARIANT 里面既然可以存SAFEARRAY,
当把SAFEARRAY 包在VARIANT里面返回的时候,
不也只返回了内存指针及内存描述么,为什么不会出错?
解决方案1:
描述:
ActiveX接口返回VARIANT ,VC调用成功,javascript调用异常,为什么?
我的 ActiveX控件里一个简单接口,返回VARIANT
VARIANT CMyCtrl::GetSomething()
{
VARIANT myVariant;
int nNum=100;
myVariant.vt = VT_INT|VT_BYREF;
myVariant.pintVal = &nNum;
return myVariant;
}
在C++里调用,正常:
VARIANT CMyDlg::OnButton1Clicked()
{
VARIANT myVariant;
myVariant=m_myActiveX.GetSomeThing();
int a=*myVariant.pintVal;}
在一个.html 页面里,用 javascript 调用,异常:
<SCRIPT LANGUAGE="JScript">
function TestActiveFun()
{
var theResult = Feb16.GetSomeThing(); //报错,IE报错,说“类型不匹配”
是我的ActiveX接口写的不对呢,还是javascript 调用方式不对?
或者,因为是有指针的缘故么?
而SAFEARRY里面也有指针啊,
VARIANT 里面既然可以存SAFEARRAY,
当把SAFEARRAY 包在VARIANT里面返回的时候,
不也只返回了内存指针及内存描述么,为什么不会出错?
typedef struct FARSTRUCT tagSAFEARRAY { //SAFEARRAY
unsigned short cDims;
unsigned short fFeatures;
unsigned short cbElements;
unsigned short cLocks;
unsigned long handle;
void HUGEP* pvData; //内存块指针
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY; //SAFEARRAY 结构
解决方案1:
解决方案2:
int nNum=100;
VARIANT CMyCtrl::GetSomething()
{
VARIANT myVariant;
myVariant.vt = VT_INT|VT_BYREF;
myVariant.pintVal = &nNum;
return myVariant;
}
Javascript不支持指针,也没有传值的操作,比如VB的ByRef、ByVal。
解决方案3:用CComVariant效果要好有些。
解决方案4:你返回了局部变量
解决方案5: myVariant.intVal = nNum;
传值吧
Feb16 是否正确创建对象
您可能想查找下面的文章:
- 如何将ActiveX里的数组以Array的形式通过连接点传给javascript
- 用JavaScript调用ActiveX的函数,如何获取函数的返回值
- 在JAVASCRIPT中调用ACTIVEX方法时,传递参数的问题
- javascript调用ActiveX问题
- javascript响应ActiveX事件的问题
- javascript能有方法检测到某个activex是否被disable了么
- 在Javascript中调用activeX的方法为什么老是失败啊???
- JavaScript无法动态为ATL编写的ActiveX控件添加事件
- javascript调用ActiveX控件问题!
- ActiveX与Javascript的问题