一次在VS 2005编的一个程序上无法使用MSHFLXGD.OCX控件(具体症状是当要使用该控件时出现程序崩溃)。开始以为MSHFLXGD.OCX控件没有注册,使用regsvr32进行注册,但是注册成功后依然无法使用。于是上网搜索资料,大致知道了原因:原来是微软的OCX控件大多需要许可证,有了分发许可证的控件才可以正常运行。
按照网上的说法是:mshflxgd.dep 和mshflxgd.srg 都编译到windows/system32目录下(这两个文件可以在安装过VC的Windows系统下找到),然后还要导入一个注册表项目
[HKEY_CLASSES_ROOT/Licenses/1F3D5522-3F42-11d1-B2FA-00A0C908FB55]
@="gcfjdjecpchcncdjpdejijgcrdoijjfcieod"
当时我不知道如何导入一个注册表项目,就采用一个苯办法:安装VC6.0(只要安装了VC 6.0都能使用)。现在我知道了,就是可以用该控件的机子的注册表的HKEY_CLASSES_ROOT/Licenses项导出为一个reg文件,然后将其拷贝到要用控件的机子上进行授权(具体是双击该reg文件将其加入到注册表),这样估计就能用了。我甚至怀疑“将mshflxgd.dep 和mshflxgd.srg 都编译到windows/system32目录下”这一步是否有作用。照我的设想:首先是使用regsvr32进行注册,然后使用reg文件将其加入到注册表。不过我没有试过,有兴趣的朋友可以试一下。
看来使用了OCX控件的程序在别的电脑上不能运行,如果既不是缺ocx文件,也不是因为控件没有注册,那么就有可能是缺少许可证引起的,可以用类似的手法解决。