私のアプリケーションは 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;
};