ocx编写及注意点

本文旨在帮助初学者完成编写ocx的工作,另外说一些ocx使用过程中的经验。


ocx的编写

其实ocx的初步编写步骤,直接参考codeproject上的一篇文章,此文章说得很清楚了。

A Complete ActiveX Web Control Tutorial

主要关注此篇文章的以下章节

ActiveX Control Properties, Methods, and Events 

此章节讲述了怎么给ocx控件添加属性,方法及事件。在实际应用中,方法用得最多。

Building a Safe ActiveX Control

此章节讲述了怎么创建一个安全的active控件,添加此功能后,网页脚本就不会在每次调用ocx的方法时都出现控件不安全的提示。


注意点

1、参数类型

如果编写的ocx控件是给javascript脚本等非vc程序调用,那么在添加方法时,参数及返回值类型使用LONG及BSTR,不要使用CHAR及CHAR*等。

如果编写的ocx控件是给vc等程序使用,则CHAR及CHAR*可以作为参数或返回值。

在实际应用中ocx控件编写完成后,主要是给javascript脚本使用。

2、字符集问题

ocx控件在编译时可以填写多字节字符集和unicode字符集。当参数为BSTR时,如果选择多字节字符集,那么传递到ocx控件时BSTR内容是本地操作系统对应的区域的多字节字符集。如中文操作系统,那么BSTR内容为GB。如果选择unicode,那么BSTR的内容为utf-16编码。这事不是很简单吗?有什么必要说明?在实际应用中我遇到这样的问题,ocx控件使用的是多字节字符集,我的同事(java编程人员)将utf-8字符内容传递给了ocx控件对应的函数,而我在调试ocx控件时,在函数入口处收到的字符串是gb格式。推测可能原因是ie将utf-8内容转换成gb然后再给的ocx。站在ie的角度,这样的转换是合理的。同理如果字符集是unicode的,那么ie会将utf-8内容转换成utf16再给ocx。那么ie又怎么知道参数内容串是utf8呢,猜测ie是通过网页中html脚本中的语言类型来得知此参数内容串是什么字符集类型的。也就是说,如果语言类型是gb,而参数内容串实际是utf8,那么ie会将此utf8串认为成gb,直接给ocx控件(多字节)或转utf16给ocx控件(unicode)。两个 猜测有待后续用最简单的例子再次确认

结论

i)最好是将ocx编写成unicode版本。对于ocx而言,在ocx接口处进来的是utf16,出去也是utf16。

ii)如果觉得ocx的BSTR参数内容不会脱离GB字符集范围,那么可使用多字节字符集。

iii)如果用了多字节字符集并且希望传入进来的又是utf8,则建议约定BSTR的内容是经过BASE64的串,那么ocx接口函数处需要先将串解base64,再当成使用。

3、测试ocx

使用工具

ocx控件调试器





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值