我的应用程序正在托管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;
};
答案 0 :(得分:0)
foo(host.my_method)
在纯JavaScript中也无法正常工作; my_method
无法通过host
访问this
。在JavaScript中执行此操作的正确方法是使用捕获:
foo( function (x) { return host.my_method(x); } );