从JavaScript转换对象数组到COM变体数组

时间:2017-03-15 12:03:49

标签: javascript arrays vbscript activex comobject

我目前正在讨论有关ActiveX接口和特别是变体数组的问题。我找到了一些如何实现转换的答案,但不幸的是到目前为止我没有任何作用。也许你可以帮助我。这是我的问题:

我有一些通过ActiveXInterface检索的对象。现在,一个ActiveX方法需要在数组中包含其中两个对象。

在VB中,这是你基本上做的事情

Dim aVar1(1)
Set aVar1(0) = oReferenceLine1
Set aVar1(1) = oReferenceLine2

之后你将这个数组传递给像这样的函数

Set oNewJoint = oNewMechanism.AddJoint("CATKinCylindricalJoint",aVar1)

使用我通过界面检索的每一个工作正常,但我无法创建一个数组来传递该功能。我发现解决这个问题的一种方法是

var vbArray = new ActiveXObject('Scripting.Dictionary');
$.each(JSArray, function(index){
    vbArray.add(index, JSArray[index]);
});

return vbArray.Items();

但是如果我这样做的话。我刚回来一个未定义的。创建了vbArray,我可以访问例如vbArray.Item(1)但vbArray.Items()只是保持返回undefined并调用函数

var joint = mechanism.ActiveXObject.AddJoint('CATKinCynlindricalJoint', vbArray);

只是不断返回TypeConflict

如果有人知道如何将这两个对象放在一个数组中并将它们作为变量数组传递给我的应用程序,那就太棒了。

1 个答案:

答案 0 :(得分:-1)

我经常看错误的方向。即使我不能(并且仍然)无法读取vbArray的内容,它也不是空的。在我纠正了'CATKinCynlindricalJoint'中的拼写错误之后

我注意到当我使用vbArray.Items()作为参数时,我得到了AddJoint-Method失败的错误。如果我刚尝试使用undefined的方法,我会返回一个TypeConflict。很显然,vbArray.Items()并没有真正未定义。

之后我注意到我使用了错误的参数来构建我的引用并转换为vbArray确实有效。我做的错误与Catia非常详细,所以我不会深入研究它。