ActiveX 调用 Javascript 函数

ActiveX calling Javascript functions

本文关键字:函数 Javascript 调用 ActiveX      更新时间:2023-10-16

我正在尝试从我的ActiveX(ATL C++(dll调用Javascript。 从我所做的研究中,你应该连接点。

已添加到我的 idl 文件

[
uuid(BDBFA5F9-B2CB-43b1-A414-CB6E3B15C6C2),
("Event interface for Test")
]
_ITestEvents
    {
    properties:
    methods:
    [id(1), helpstring("method Cancel")] void Cancel([in] char* x, [in] char* y);
    };

已添加到我的类 .h 文件

class ATL_NO_VTABLE CTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CTest, &CLSID_Test>,
public IConnectionPointContainerImpl<CTest>,
public CProxy_ITestEvents<CTest>,
public IObjectWithSiteImpl<CTest>,
public IObjectSafetyImpl<CTest,INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>,
public IProvideClassInfo2Impl<&CLSID_Test, &__uuidof(_ITestEvents), &LIBID_Test3Lib>,
public IDispatchImpl<ITest, &IID_ITest, &LIBID_Test3Lib, /*wMajor =*/ 1, /*wMinor =*/ 0>
    {
    public:

    BEGIN_COM_MAP(Clnaxprt)
    COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
    COM_INTERFACE_ENTRY(Ilnaxprt)
    COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(IConnectionPointContainer)
    COM_INTERFACE_ENTRY(IObjectWithSite)
        COM_INTERFACE_ENTRY(IObjectSafety)
        COM_INTERFACE_ENTRY(IProvideClassInfo)
        COM_INTERFACE_ENTRY(IProvideClassInfo2)
    END_COM_MAP()
    BEGIN_CONNECTION_POINT_MAP(Clnaxprt)
        CONNECTION_POINT_ENTRY(__uuidof(_ITestEvents))
    END_CONNECTION_POINT_MAP()

在Visual Studio中"实现了一个新的连接点",该连接点在_ITestEvents_CP.h中生成代码,该代码是使用方法名称Fire_Cancel(char * x,char * y(创建的。这就是我被困住的地方。我尝试调用Fire_Cancel,在调试生成的代码时,没有连接,因此没有从 IDispatch 调用。如何创建连接?

仍然不确定javascript是如何工作的,但希望在我转向之前理解这部分。谢谢

在我的情况下,HTML和Javascript是错误的。如果使用符号"id::function_name",请确保它在对象标签之后。如果符号是"for=id event=cancel",那么它可以位于之前/之后