MFC Activex與JavaScript的介面互動
在Activex的應用中與網頁的JavaScript的互動必不可少,在這裡就簡單的介紹下。
VC 建立的Activex的有兩種類型,MFC Activex與ATL Activex, 在VC建立工程的時候選擇,這篇文章介紹的是針對MFC Activex的,ATL Activex可以繞過了。
測試環境:: VC++ 6.0 SP6
(一) MFC Activex與JavaScript的傳遞參數、傳回值
在JavaScript調用時Activex方法,可以歸分為兩種:
1參數為整型變數,返回為整型變數
long CActivexCtrl::Func(long i)
{
return 0;
}
2 參數為字串變數,返回為字串變數
BSTR CActivexCtrl::Func(LPCTSTR str)
{
CString strResult;
strResult = "TeastString2 ret";
return strResult.AllocSysString();
}
3 ….其它的調用方式參考上述兩種
4 在JavaScript中變數預設都可以是variant類型,這樣我們就可以利用VARIANT傳遞各種類型的參數,在Activex中,先對variant的變數進行類型轉換,再進行調用。當返回結果時,將結果封裝成variant類型的變數再返回。(variant與各種類型變數轉換,不是本文重點,在這裡不進行講解)
VARIANT CActivexCtrl::Func(const VARIANT FAR& para1)
{
VARIANT vaResult;
VariantInit(&vaResult);
return vaResult;
}
(二) MFC Activex非同步呼叫JavaScript事件方法
1 在MFC Activex中註冊回呼函數:
//回呼函數測試
#include <ATLBASE.H>
extern CComModule _Module;
#include <ATLCOM.h>
//回呼函數--全域變數
CComDispatchDriver m_Func1;
//註冊回呼函數
void CActivexCtrl::regfun(LPDISPATCH bstrFun)
{
m_Func1 = bstrFun;
}
//觸發回呼函數
void CActivexCtrl::func_calljs()
{
VARIANT varArg[1];
varArg[0].vt = VT_UINT;
varArg[0].uintVal = 10;
m_Func1.InvokeN((DISPID)DISPID_VALUE, varArg, 1);
}
2 JavaScript的中註冊非同步過程:
//非同步回呼函數過程
function callfun(i)
{
alert("callback function in js, ret=" + i);
}
//註冊回呼函數
obj.regfun(callfun);
from:http://www.cnblogs.com/sding/archive/2012/04/03/2431142.html