我可以使用VS08的MFC/ActiveX模板來創建一個C++ ActiveX對象,我可以使用Javascript將它加載到HTML頁面和腳本中。但我不知道如何創建一個接口,允許我用Javascript調用組件的自定義方法。如何在C++中使用Javascript腳本編寫ActiveX對象
你能告訴我如何做到這一點?我在google上花費了兩個多小時,但沒有運氣。
謝謝。
我可以使用VS08的MFC/ActiveX模板來創建一個C++ ActiveX對象,我可以使用Javascript將它加載到HTML頁面和腳本中。但我不知道如何創建一個接口,允許我用Javascript調用組件的自定義方法。如何在C++中使用Javascript腳本編寫ActiveX對象
你能告訴我如何做到這一點?我在google上花費了兩個多小時,但沒有運氣。
謝謝。
我不是非常熟悉MFC ActiveX包裝,但我可以回答一般意義的問題:
與從IDispatch接口派生可以通過自動化語言調用的接口的COM對象(如:Javascript)。這些方法還必須是「自動化兼容的」,這意味着參數可以轉換爲VARIANT類型,或者顯式爲VARIANT類型。請注意,對於輸入/輸出參數,類型必須爲VARIANT *,以使自動化「連接」起作用。我不知道如何使ActiveX對象在客戶端腳本中可訪問(例如:將其嵌入到頁面中),但是如果它具有從IDispatch派生的單個接口,則可以從Javascript(和其他自動化語言)。我希望幫助...
這適用於在HTML頁面中嵌入您的ActiveX容器,並調用一個方法:
<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>
如果您使用的是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(),這也可能是你想要的。
一個微不足道的糾正,DECLARE_DISPATCH_MAP()應該遵循函數聲明。 – 2009-06-08 12:33:31