网页 Java script 调用MFC ActiveX ocx控件的函数并传参数给函数

最近项目大致内容是用网页查看摄像头,将摄像头SDK封装ocx控件并打包就不概述了,网页加载ocx控件也不概述了。

今天遇到的主要问题就是,JS调用ocx中的函数并传参的问题,本人也是初次接触MFC,JS更是一窍不通,这次的问题网上雷同的帖子很多,但是能解决问题的比较少,我解决问题后也没有继续深入研究,只是写出来提供一下思路,欢迎交流。

首先问题分两部分:

1 是MFC对外接口函数的定义,并不是所有的函数都可以供对外调用。

2 是参数类型的问题。

首先看第一个问题,ocx提供的对外接口,要定义调度映射和事件映射方法,参考了这个帖子链接,写的比较详细,巧的是这个帖子并没有写带参数的。

然后是第二个问题,以我这次做的程序为例,ocx内C++的函数需要的参数是char*, 看了很多帖子都说js直接传字符串就可以,比如 var hehe = "xxxx";

但是实际上由于js 与C++数据类型的不一样,我一开始写的传进来的参数直接用是不行的

网页代码

	<body>
				<object id="objec" name="axSAM" classid="clsid:746A1AC7-75EA-4D50-8262-380CDFCB7AD2"  style="height:500px;width:1000px;border:1px solid #000;" ></object> 
				 
	</body>
	<script>
			alert("1111111111111111111");
		
			var obj = document.getElementById("objec");
			
			var aa = "at.0cjb8uw662r2be7sd0s2tqpqbeev89fy-8kwwylqv6n-1t8tzmo-zodxnxgl8";
			var bb = "640033347";
			obj.VideoStart(aa ,bb );

			alert("22222222222222222222");
		
	</script>	

MFC ActiveX代码

LONG ChomevideoCtrl::VideoStart(CHAR * accessToken, CHAR * deviceSerial)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    YSY_SDK_Init(accessToken,deviceSerial);
    return 0;
}

后来意识到数据类型出了问题,查资料的时候查到了_bstr_t,头文件comdef.h,具体的我就不细说,有很多帖子资料。

我的理解就是,不同语言对数据类型的处理不太一样,尤其是不同语言中char、String这些字符、字符串等涉及到内存和大小的数据类型。这时候就需要有个统一的类库进行数据转换处理防止出错。

所以再回到第一个问题,进行ocx控件对外接口创建的时候,参数类型就要选对应的,以我的程序字符串为例,就要选BSTR了,如图

然后代码中用 _bstr_t 对传进来的参数进行处理,再给C++的函数使用,如下面的代码:

void ChomevideoCtrl::VideoStart(LPCTSTR accessToken, LPCTSTR deviceSerial)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    _bstr_t a = accessToken;
    _bstr_t b = deviceSerial;
    YSY_SDK_Init(a,b);

    // TODO: 在此添加调度处理程序代码
}

然后就可以运行了



就此实现了MFC ActiveX 封装摄像头的dll库 生成ocx,然后网页进行调用。

过程写的比较随意,解决了我的问题以后没有再研究其他的数据类型,只是分享一下思路以供参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值