【问题标题】:Setting ActiveX property with optional inputs使用可选输入设置 ActiveX 属性
【发布时间】:2015-01-03 10:58:13
【问题描述】:

我正在尝试通过 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() 路?

【问题讨论】:

    标签: javascript internet-explorer com activex


    【解决方案1】:

    该方法错误地使用了可选/默认值属性,我认为这不会或预期会起作用。 MSDN

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

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

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

    去掉可选参数,不清楚ParamCodes是什么以及接口属性/定义,这本身可能会导致您无法在JS中使用该属性。

    【讨论】:

    • 感谢您的回答,我已经解决了这个问题。它与 COM 对象打开文件的方式有关(只读)。我设置了正确的属性并且能够访问mvc.Param(0x2004001a,1,1) = 100所需的ParamCode..
    • 现在说得通了,因为您明确提供了所有参数 - 由于上述原因,您的可选属性可能会被忽略。
    猜你喜欢
    • 2017-02-28
    • 2019-09-24
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多