0

我的应用程序托管 jscript ( IActiveScript, IE9)。它向它导出一个接口(对偶,IDispatch)(见下文)。我可以从 jscript 调用它:

host.my_method(42);

但将其传递给另一个函数(或分配给变量)不起作用:

function foo(f) { f(42); };
foo(host.my_method); // error 0x800a138f - Unable to get property 'my_method'

问题:如何让我的原生函数看起来像属性?

界面:

[
    object,
    dual,
    uuid(whatever),
    pointer_default(unique)
]
__interface IMyInterface
{
    [id(1), helpstring("My method")]
    HRESULT my_method([in] VARIANT * value);
};

这是该接口的实现:

[
    coclass,
    event_source(com),
    threading(apartment),
    uuid(guid),
    noncreatable,
    aggregatable(never),
    default(IMyInterface)
]
class MyClass :
    public CComObjectRootEx<....>,
    public CComCoClass<MyClass>,
    public IDispatchImpl<IMyInterface>,
    public IProvideClassInfo2Impl<....>
{
    ...
    STDMETHOD(my_method)(/*[in]*/ VARIANT * value) override;
};
4

1 回答 1

0

foo(host.my_method)在纯 JavaScript 中也不能正常工作;my_method将无法访问hostvia this。在 JavaScript 中执行此操作的正确方法是使用捕获:

foo( function (x) { return host.my_method(x); } );
于 2015-06-26T01:55:50.863 回答