使用可选输入设置ActiveX属性

时间:2014-11-06 19:33:09

标签: javascript internet-explorer com activex

我正在尝试通过javascript设置activeX属性。我正在使用OLE / COM对象查看器,设置如下所示:

[id(0x0000001e), propput, helpstring("property Param")]
void Param(
                [in] ParamCodes Params, 
                [in, optional, defaultvalue(1)] long lRec, 
                [in, optional, defaultvalue(1)] long lEntry, 
                [in] VARIANT rhs);

我可以通过var channel = mvc.Param(0x2004001a)访问参数。但是,如果我尝试使用mvc.Param(0x2004001a) = 100设置属性,则javascript会停止运行。我也无法使用mvc.Param(0x2004001a,4,5)使用可选参数访问或设置任何其他记录。我是否使用了不正确的语法,或者我必须调用mvc.Invoke()道路?

1 个答案:

答案 0 :(得分:0)

该方法错误地使用了optional / defaultvalue属性,我认为这不会或预计会有效。 MSDN

  

MIDL编译器接受以下参数排序(从左到右):

     
      
  • 必需参数(没有[defaultvalue]或[optional]属性的参数),
  •   
  • 带或不带[defaultvalue]属性的可选参数
  •   
  • 具有[optional]属性且没有[defaultvalue]属性的参数
  •   
  • [lcid]参数,如果有的话,
  •   
  • [retval]参数
  •   

您假设最后[in]参数将是属性赋值,并且可以从上面的列表中排除,使您可以使用可选的访问器参数,但它不是记录的行为,然后 - 甚至可能更重要的是 - JS引擎几乎不支持这一点,JS引擎对自动化属性有自己的限制。

取出可选参数,不清楚ParamCodes是什么以及接口属性/定义,这可能会导致问题本身阻止您在JS中使用该属性。