Storage.ocx

  cheney

有一个项目中主要使用 ocx 调用本机资源来实现各种功能,这部分我一直没做,现在有个奇葩的新需求,于是就做了这个正常情况下完全没有用的 ocx ,一血就这么交代了.这是一个用来在客户端存储键值型数据的 ocx , cookis 或者 storage 完全能替换它的功能,但是这里就用了 ocx ,算是 ocx 的一个 demo 吧.

工程创建

  • 公司还用的是 VC6.0 其他的应该差不多.
    工程

  • 添加操作方法:
    添加方法

  • 规定参数和返回值
    规定参数和返回值

BSTR 就是返回字符串
LPCTSTR 就是传入字符串

然后把函数实现给写完.

控件注册

直接写成批处理

copy Storage.ocx OcxStorage.ocx
%SystemRoot%\system32\regsvr32.exe  OcxStorage.ocx
copy OcxStorage.ocx %SystemRoot%\system32

js调用ocx

必须用IE浏览器,需要[Internet 选项]->[安全]->[自定义级别],开启所有的控件选项.
做个测试文件:

<!DOCTYPE html>
<html>
	<head>
	<title>test</title>
	</head>
	<body>
	<div style="display:none;">
		<OBJECT id="OcxStorage" name="OcxStorage" classid="clsid:036E915A-3F08-443A-8D34-5166A50EE4F2" data="C:/Windows/System32/OcxStorage.ocx"></OBJECT>
	</div>
	<script type="text/javascript">
		var OcxStorage = document.getElementById("OcxStorage");

		alert(OcxStorage.Get("Hello"));
		alert(OcxStorage.Set("Hello","World"));
		alert(OcxStorage.Set("1","World"));
		alert(OcxStorage.Get("Hello"));
		
	</script>
	</body>
</html>

其中 classid="clsid:036E915A-3F08-443A-8D34-5166A50EE4F2" 在 VC6 工程目录下 *.odl 文件的最后一个.

日志

所有东西都能打 log 是个好习惯,特别是偶发性错误,最后都是靠 log 定位的问题.但是当我把以前的 CLog 类考过来之后却发现不能用.编译阶段没有报错,log 文件也自动创建出来了,但是内容写不进去,反而把浏览器搞死掉了.

到网上看了一圈,认为是权限不够的问题.那就另外想办法吧.调用系统函数来做, system() 函数果然可行,但是有个黑框闪过,于是又换成 WinExec(cmd, SW_HIDE); ,一切 OK.调试中又发现有些命令没出来,发现代 \r\n 的都不行,你妹的,不支持换行.

源码

https://github.com/CheneyWong/OcxStorage