mfc中调用c 语言函数,如何在HTML JavaScript中调用mfc C函数以及如何在mfc C中调用JavaScript函数?...

这是从MFC应用程序调用javascript函数的方法

假设这是你的html文件中的一个javascript函数.

JAVSCRIPT功能

可能有不同类型的javascript函数

类型1:无参数,无返回值

function myfunction()

{

Alert('Hey I am Here');

}

类型2:具有无返回值的参数

function myfunction1(value)

{

Alert(value);

}

类型3:参数可能有也可能没有返回值

function myfunction2(value)

{

return value;

}

此函数用于调用javascript函数

BOOL CMyDlg::CallClientScript(LPCTSTR pStrFuncName, CStringArray* pArrFuncArgs, CComVariant* pOutVarRes)

{

BOOL bRes = FALSE;

CComVariant vaResult;

CComPtr pIDoc2;

if(SUCCEEDED(this->GetDHtmlDocument(&pIDoc2))) //Uses CDHtmlDialog as 'this'

{

//Getting IDispatch for Java Script objects

CComPtr spScript;

if(SUCCEEDED(pIDoc2->get_Script(&spScript)))

{

//Find dispid for given function in the object

CComBSTR bstrMember(pStrFuncName);

DISPID dispid = NULL;

if(SUCCEEDED(spScript->GetIDsOfNames(IID_NULL, &bstrMember, 1, LOCALE_USER_DEFAULT, &dispid)))

{

const int arraySize = pArrFuncArgs ? pArrFuncArgs->GetSize() : 0;

//Putting parameters

DISPPARAMS dispparams;

memset(&dispparams, 0, sizeof dispparams);

dispparams.cArgs = arraySize;

dispparams.rgvarg = new VARIANT[dispparams.cArgs];

dispparams.cNamedArgs = 0;

for( int i = 0; i < arraySize; i++)

{

CComBSTR bstr = pArrFuncArgs->GetAt(arraySize - 1 - i); // back reading

bstr.CopyTo(&dispparams.rgvarg[i].bstrVal);

dispparams.rgvarg[i].vt = VT_BSTR;

}

EXCEPINFO excepInfo;

memset(&excepInfo, 0, sizeof excepInfo);

UINT nArgErr = (UINT)-1; // initialize to invalid arg

//Call JavaScript function

if(SUCCEEDED(spScript->Invoke(dispid, IID_NULL, 0, DISPATCH_METHOD, &dispparams, &vaResult, &excepInfo, &nArgErr)))

{

//Done!

bRes = TRUE;

}

//Free mem

delete [] dispparams.rgvarg;

}

}

}

if(pOutVarRes)

*pOutVarRes = vaResult;

return bRes;

}

如何使用?

单击任何按钮,您可以调用此功能

onbuttonclickOk()

{

CStringArray arrArgs;

CComVariant varRes;

//arrArgs.Add(_T("1"));//you can add value to CStringArray

//arrArgs.Add(_T("2"));//if your javascript function having any arguments

CallClientScript(L"myfunction",&arrArgs,&varRes);

}

如何获取javaScript函数的返回值?

如果你的javascript函数返回任何值,它将被存储为invarRes变量.

你可以得到像这样的回报价值

CString strTmp;

if(CallClientScript(L"myfunction3",&arrArgs,&varRes))

{

if(varRes.vt == VT_BSTR){

strTmp = varRes.bstrVal;// return value of javascript function.

}

}

编辑:

使用编辑控件

假设您有这样的编辑控件

在DoDataExchange中添加一行

void CMyDlg::DoDataExchange(CDataExchange* pDX)

{

CDHtmlDialog::DoDataExchange(pDX);

DDX_DHtml_ElementInnerText(pDX, _T("MyEdit"), m_strMyEdit);// add this line

}

m_strMyEdit是一个CString变量,可以在.h文件中声明.

OnInitDialog,您可以在编辑控件中显示任何值,例如:

m_strMyEdit = _T("Enter anything");

如果您想稍后在程序中更新editbox值,只需添加这些行

UpdateData();

m_strMyEdit =_T("Hello World");// give new value

UpdateData(FALSE);

如果要访问editbox值,可以直接使用m_strMyEdit变量.我想这会对你有帮助.. !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值