怎样用js调用C风格的ocx控件?

owen1759 2013-12-02 02:09:41
最近在做一个B/S架构的项目,用到某硬件厂商的OCX组件,厂家提供的API中有这样一个:

/*************************************************************************/
10、 void vGetDPI(long* DPI_X, long* DPI_Y);
/*************************************************************************/*
函数名称: vGetDPI
* 功能描述: 获取 DPI
* 输入参数: 无
* 输出参数: DPI_X 横向 DPI 默认 96
* DPI_Y 纵向 DPI 默认 96
* 返回值: 无
*/

这应该是一个C风格的函数,传入地址指针,通过给指针指向的区域赋值来充当返回值。
可是js里面没有这样的东西啊,如果我传两个变量进去,浏览器会提示“类型不匹配”。
该怎么办?
...全文
314 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
owen1759 2014-01-10
  • 打赏
  • 举报
回复
引用 10 楼 hxkuse 的回复:
<script language="javascript"> function DetectActiveX() { try { myact= new ActiveXObject("组件.类"); } catch(e) { //alert("请在Internet Explorer 中启用ActiveX"); return false; } //alert("创建成功"); dpis =new Array(3); myact.vGetDPI(dpi[1], dpi[2]); return true; } 看看,行不,要不整两个数组,传个名称进去
刚才把你两个方法都尝试了,结果都是“类型错误”,真是晕倒,js里面本来就没有指针类型嘛 其中,如你写出的方法里,dpi创建了数组后,dpi[1]和dpi[2]都是undefined,最后就等于传入的是两个undefined为参数。 貌似js的所有基本数据类型的传参都是以传值而非传址调用的,只有Object和Functiuon是传址
hxkuse 2013-12-27
  • 打赏
  • 举报
回复
<script language="javascript"> function DetectActiveX() { try { myact= new ActiveXObject("组件.类"); } catch(e) { //alert("请在Internet Explorer 中启用ActiveX"); return false; } //alert("创建成功"); dpis =new Array(3); myact.vGetDPI(dpi[1], dpi[2]); return true; } 看看,行不,要不整两个数组,传个名称进去
fishion 2013-12-24
  • 打赏
  • 举报
回复
引用 8 楼 owen1759 的回复:
[quote=引用 6 楼 fishion 的回复:] 我想可以是ocx接口函数,但是能不能让其它语言调用是另外一回事了,让多语言调用就得用它们通用的参数类型,但如果是out retval类型的参数的话就行,当然这是返回值使用的,也只有一个
这么说它这样的API接口我就没办法在Web上调用了?可是ocx不是专为web开发的么?怎么会有这样的东西出现?
引用 7 楼 worldy 的回复:
lz那个函数就是一个普通的函数,没有任何ocx的影子
[/quote] ocx并不是专门为web开发使用的,其也有封装,方便用户调用等意义
owen1759 2013-12-24
  • 打赏
  • 举报
回复
引用 6 楼 fishion 的回复:
我想可以是ocx接口函数,但是能不能让其它语言调用是另外一回事了,让多语言调用就得用它们通用的参数类型,但如果是out retval类型的参数的话就行,当然这是返回值使用的,也只有一个

这么说它这样的API接口我就没办法在Web上调用了?可是ocx不是专为web开发的么?怎么会有这样的东西出现?



引用 7 楼 worldy 的回复:
lz那个函数就是一个普通的函数,没有任何ocx的影子

worldy 2013-12-23
  • 打赏
  • 举报
回复
lz那个函数就是一个普通的函数,没有任何ocx的影子
fishion 2013-12-23
  • 打赏
  • 举报
回复
我想可以是ocx接口函数,但是能不能让其它语言调用是另外一回事了,让多语言调用就得用它们通用的参数类型,但如果是out retval类型的参数的话就行,当然这是返回值使用的,也只有一个
owen1759 2013-12-23
  • 打赏
  • 举报
回复
引用 1 楼 caoheng520 的回复:
在厂家提供的ocx之上在封装一个你自己的ActiveX,就可以随意按你自己的要求来做了
引用 2 楼 sd__q 的回复:
自己封装成控件,对外提供一个接口函数,在JS中调用即可,在网页中JS向控件传递参数可以使用BSTR类型
引用 3 楼 Erick08 的回复:
自己再用C++封装一下接口,生成一个ActiveX OCX,接口不用参数,只需返回一个字符串BSTR,如“100,100”
我是做Web开发的,对于C/C++或者ActiveX/OCX开发完全一窍不通哦,难道除了自己封装以外没有办法调用了么? ====================================================================
引用 4 楼 worldy 的回复:
C风格的ocx控件 没有这样的说法, 只是可以使用C或C++编写OCX,编译后,OCX都要通过接口进行访问 你那个函数不是ocx的接口函数(接口函数一般都使用HRESULT类型作为返回值),因此无法直接用于浏览器
别说它不是ocx接口函数,厂家提供的确确实实是个ocx控件,并且是带界面的可以放置到Web页面上的OCX控件,怎么会到头来还无法直接用于浏览器呢? 它是某个外设的控制界面ocx,把它嵌到浏览器中使用的(因为我这是个B/S架构的后台管理系统)
worldy 2013-12-07
  • 打赏
  • 举报
回复
C风格的ocx控件 没有这样的说法, 只是可以使用C或C++编写OCX,编译后,OCX都要通过接口进行访问 你那个函数不是ocx的接口函数(接口函数一般都使用HRESULT类型作为返回值),因此无法直接用于浏览器
erick08 2013-12-07
  • 打赏
  • 举报
回复
自己再用C++封装一下接口,生成一个ActiveX OCX,接口不用参数,只需返回一个字符串BSTR,如“100,100”
sd__q 2013-12-06
  • 打赏
  • 举报
回复
自己封装成控件,对外提供一个接口函数,在JS中调用即可,在网页中JS向控件传递参数可以使用BSTR类型
caoheng520 2013-12-06
  • 打赏
  • 举报
回复
在厂家提供的ocx之上在封装一个你自己的ActiveX,就可以随意按你自己的要求来做了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧