在网页中调用C++接口

    最近在公司做一个关于在网页中调用C++接口的项目,现在项目已经做完。在这期间花了一段时间去学了关于这方面的知识,和大家一起分享下。

    首先是在windows客户端中网页的生成,在这期间需要用到IWebBrowser2接口。早期, IWebBrowser2 继承自 IWebBrowser 和 IWebBrowserApp, 还提供不包含在着两个接口中的功能. 所以你应当使用 IWebBrowser2 接口替代 来操纵WebBrowser 控件或者 Internet Explorer.该块知识用到了windows的COM 技术,具体可查看MSDN。IWebBrowser2 接口有4个方法和8个属性,其中最终要的方法就是Navigate2,Navigate2的功能基于Navigate 方法,不同在于 Navigate2 允许你导航到飞URL表达的地方,例如Windows shell folder. (Windows shell folder 是指向标示符指针, 或者windows shell命名空间中的 PIDL,)。该方法最终的参数是第一个,本地HTML文件所在的位置。

   在调用方法后,你就可以看到你自己写的WEB页面了。下面的代码是我的测试页面:

<html>
<script>
function onBtn1(obj)
{
    var aaaa    = external.closeApp();
}
</script>
<body>
<input type="button" name="btn1" value="btn1" onClick="onBtn1(this)" />
</body>
</html>
WEB页面上只有一个Button,点下按钮调用C++里面的closeApp()函数。
那在客户端中CloseApp这个函数如何写?下面会有详细的说明:

1.首先在头文件中声明函数:

void_closeApp();

2.在CPP文件中写函数的具体实现。

3.对函数进行DISP_FUNCTION。代码如下:

DISP_FUNCTION(CHxBrowser, "closeWindow", _closeWindow, VT_NULL, VTS_NONE);

DISP_FUNCTION参数:

theClass 类的名字。

pszName 函数的外部名字。

pfnMember 成员函数的名字。

vtRetVal 指定了函数返回类型的值。

vtsParams 指定了函数参数表的一个或多个常量的用空格分隔的列表。

说明:

DISP_FUNCTION宏被在调度映射中使用,用来定义一个OLE自动化函数。

vtRetVal参数属于VARTYPE类型。这个参数的可能取值来自VARENUM枚举,如下:

符号 返回类型

VT_EMPTY void

VT_I2 short

VT_I4 long

VT_R4 float

VT_R8 double

VT_CY CY

VT_DATE DATE

VT_BSTR BSTR

VT_DISPATCH LPDISPATCH

VT_ERROR SCODE

VT_BOOL BOOL

VT_VARIANT VARIANT

VT_UNKNOWN LPUNKNOWN

 

vtsParams参数是VTS_ 常量中取值的用空格分隔的列表。有空格分隔的一个或多个取值的列表指定了函数的参数列表。例如:

VTS_I2 VTS_PI2

指定了包含一个短整数以及后面的短整数指针的列表。

VTS_ 常量及其含义如下:

符号 参数类型

VTS_I2 short

VTS_I4 long

VTS_R4 float

VTS_R8 double

VTS_CY Const CY or CY*

VTS_DATE DATE

VTS_BSTR LPCSTR

VTS_DISPATCH LPDISPATCH

VTS_SCODE SCODE

VTS_BOOL BOOL

VTS_VARIANT Const VARIANT* or VARIANT&

VTS_UNKNOWN LPUNKNOWN

VTS_PI2 short*

VTS_PI4 long*

VTS_PR4 float*

VTS_PR8 double*

VTS_PCY CY*

VTS_PDATE DATE*

VTS_PBSTR BSTR*

VTS_PDISPATCH LPDISPATCH*

VTS_PSCODE SCODE*

VTS_PBOOL BOOL*

VTS_PVARIANT VARIANT*

VTS_PUNKNOWN LPUNKNOWN*

OK,所有的步骤已经完成,你就可以在你自己写的网页上调用客户端里面的函数对客户端进行操作了!

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/767.html

发布者

王志强也叫王骏晖

负责C++版块的撰写

《在网页中调用C++接口》有2个想法

发表评论