我可以使用VS08的MFC / ActiveX模板创建一个C ++ ActiveX对象,我可以使用Javascript将其加载到HTML页面和脚本中。但我无法弄清楚如何创建一个允许我使用Javascript在我的组件上调用自定义方法的接口。
你能告诉我怎么做到这一点吗?我在谷歌上花了两个多小时没有运气。
感谢。
答案 0 :(得分:2)
我不是非常熟悉MFC ActiveX包装器,但我可以回答一般意义上的问题:
可以通过自动化语言(例如:Javascript)调用具有从IDispatch派生的接口的COM对象。这些方法也必须是“自动化兼容的”,这意味着参数可以转换为VARIANT类型,或者显式为VARIANT类型。请注意,对于输入/输出参数,类型必须为VARIANT *才能使自动化“连接”起作用。
我不知道如何在客户端脚本中访问ActiveX对象(例如:将其嵌入到页面中),但如果它具有从IDispatch派生的单个接口,则可以从Javascript(和其他自动化)调用它语言)。我希望有帮助...
答案 1 :(得分:1)
这适用于将ActiveX容器嵌入到html页面中并调用方法:
<html>
<body>
<object height="0" width="0" id="myControl" classid="CLSID:AC12D6F8-AEB7-4935-B3C9-0E4FB6CF7FB1" type="application/x-oleobject">
</object>
<script>
var activexObj = document.getElementById('myControl');
if(activexObj != null)
{
var result = myControl.myMethod();
document.write("Result: " + result + "<br/>");
}
else
{
document.write("ActiveX component not found!<br/>");
}
</script>
</body>
</html>
答案 2 :(得分:1)
如果您正在使用VS08 MFC ActiveX模板,您可能会在控件的.h文件中看到这样的代码段(在类声明中,它受到保护):
afx_msg void AboutBox();
DECLARE_DISPATCH_MAP()
在.cpp文件中有这样的一个:
// Dispatch map
BEGIN_DISPATCH_MAP(CActiveXOutlookCtrl, COleControl)
DISP_FUNCTION_ID(yourCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
我从来没有使用过这个,但这是你的调度界面 - 也就是其他人可以调用的对象上的方法。这意味着什么:
虽然也有DECLARE_MESSAGE_MAP()和DECLARE_EVENT_MAP(),这可能也与你想要的有关。