Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ActiveX调用Javascript函数_C++_Plugins_Activex_Atl - Fatal编程技术网

C++ ActiveX调用Javascript函数

C++ ActiveX调用Javascript函数,c++,plugins,activex,atl,C++,Plugins,Activex,Atl,我正在尝试从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]

我正在尝试从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);
    };
添加到我的class.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()
class ATL\u NO\u VTABLE测试:
公共CComObjectRootEx,
公共课程,
公共IConnectionPointContainerImpl,
公共卫生设施,
具有SiteImpl的公共对象,
公共IObjectSafetyImpl,
公共IProvideClassInfo2Impl,
公共场所
{
公众:
开始COM映射(Clnaxprt)
COM_接口_条目_IMPL(IConnectionPointContainer)
COM_接口_条目(Ilnaxprt)
COM_接口_条目(IDispatch)
COM_接口_条目(IConnectionPointContainer)
COM_接口_条目(IObjectWithSite)
COM_接口_条目(IObjectSafety)
COM_接口_条目(IProvideClassInfo)
COM_接口_条目(IProvideClassInfo2)
END_COM_MAP()
开始连接点地图(Clnaxprt)
连接点入口
结束连接点地图()
在VisualStudio中,“实现了一个新的连接点”,该连接点在_ITestEvents_CP.h中生成代码,该代码是使用名为Fire_Cancel(char*x,char*y)的方法创建的。这就是我被卡住的地方。我尝试调用Fire_Cancel,调试生成的代码时没有连接,因此无法从IDispatch调用。如何创建连接

仍然不确定javascript是如何工作的,但我想在开始之前理解这一部分。
谢谢

我的例子中的HTML和Javascript是错误的。如果您使用的符号是“id::function\u name”,请确保它位于对象标记之后。如果符号是“for=id event=cancel”然后可以在前后找到它

我找到了一些关于连接点的教程,我已经实现了,但我不确定这如何允许我与JavaScript对话。因为当事件触发时,我没有连接。你的HTML是什么样子的?你如何实现JS处理程序以及如何将它连接到事件?我肯定我会拉我从stackoverflow.com上的某个地方找到了这个问题,我几乎可以肯定Taxlian已经给出了答案。但是我的JavaScript引用了Html.Html示例中ActiveX的id:.JS示例:alert(“hello”);。myActiveXMethod将成为您ActiveX中的一个事件。希望这就是您所寻找的。