ActiveForm的OCX注册不成功

kingxu 2003-10-28 09:44:06
我开发的ActiveForm的OCX在注册时出现提示,
pM->hInst != 0@c:\program files\borland\cbuilder6\include\atl\atlbase.h/5911
press[Y]to terminate, [N]to continue and [C]to Debug
...全文
42 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjuliang 2003-10-28
  • 打赏
  • 举报
回复
OCX控件的注册问题,需要分两部实现
一 用代码在ocx中实现脚本安全和初始化安全,很简单,在*impl.h文件中在class ATL_NO_VTABLE...中添加如下语句

//以下为增加的,标记为脚本安全和初始化安全
BEGIN_CATEGORY_MAP(TSaftTestImpl)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()

一 实现数字签名,如果你有钱,你可以申请正式的数字签名,否则可以采用如下做法,虽然下载安装控件时会警告无信任根,但在IE默认安全设置下载和运行完全没有问题,不会有安全警告。

1、创建一个自己的证书文件:
makecert /sv "Record.PVK" /n "CN=SinoWave" dream.cer
这里,Record.PVK表示新创建的私人密钥保存文件名
SinoWave是你想显示的公司名
dream.cer是你创建最后的证书文件名
这些根据你自己的要求填写,最后得到Record.PVK和dream.cer两个文件。其中,运行过程中需要输入私人密钥的保护密码(sw),一定要输入一致,不要出错。

2、转换cer格式为spc格式(可以省略),得到dream.spc文件。

cert2spc dream.cer dream.spc

3、用VS6工具中的 cabarc生成internet分发的CAB包,
cabarc.exe N DataTransfer.cab DataTransfer.ocx

4、同时制作分发代码(.htm,其中包含使IE可以自动下载安装包的代码)。
现在得到了2个文件DataTransfer.CAB和DataTransfer.htm。
.htm中包含类似如下的代码:
<OBJECT ID=" DataTransfer " CLASSID="CLSID: CA466D54-0684-49D2-B0C3-DD7E09EA76D3" CODEBASE="http://192.9.200.8/DataTransfer.CAB#version=1,0,0,0"></OBJECT>


5、给CAB文件签名
运行signcode,signcode运行后会出现数字签名向导,首先选DataTransfer.CAB,下一步后会出现签名选项,一种是典型,一种是自定义。选择自定义,这样才能从文件选择证书,选择前面制作的dream.spc,再下一步是选择私钥文件,选择Record.PVK,输入私人密钥的保护密码,选择散列算法,一般用md5就可以了,下一步是选择其他证书,直接下一步,填写一下这个控件的声明,用户用ie浏览的时候,会弹出证书说明,再下一步是加盖时间戳,例如http://timestamp.sheca.com/timestamp

6、用chktrust检查是否正确
chktrust -v DataTransfer.CAB

7、将签名后的DataTransfer.CAB和DataTransfer.htm复制到IIS的某个目录下。并在IE中打开DataTransfer.htm文件进行测试。

三 如果你用到附加文件,如使用midas,将附加文件和*.inf文件一起打包,对cab签名。htm文件中codebase指向cab。
注意一定要将*.inf文件一起打包。


见http://expert.csdn.net/Expert/topic/2185/2185265.xml?temp=.4656641
huangjuliang 2003-10-28
  • 打赏
  • 举报
回复
我注册都可以的,只要按照步骤就可以了!

菜单
Project->Options
Build with Runtime Packages 的钩去掉
再选择Linker 页,把Use Dynamic RTL 的钩去掉

将C++Builder创建的Activex设定为脚本安全[转帖]
BEGIN_CATEGORY_MAP(CYourComObject)
IMPLEMENTED_CATEGORY(CATID_SafeForScripting)
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing)
END_CATEGORY_MAP()
把这一段话copy到.h文件里,放在什么地方就不用说了,这里的很多的代码与这相似的,放在一起就可以了

实际上就了这一段话,IE里就不用改了!

Save 一下

菜单
Run->Register ActiveX Server

菜单
Project->Web Deployment Options
在Target dir(如果是BCB6的话,双击一下,就可以了)如果你的wwwroot的路径如下
那在Target dir

C:\Inetpub\wwwroot\

Target URL中填
http://计算机名

HTML dir

C:\Inetpub\wwwroot\

下面全部默认就可以了!

最后一步

菜单
Project->Web Deploy

下面就可以在IE中打开了
stwfa 2003-10-28
  • 打赏
  • 举报
回复
我开发的这套系统也需要用到ActiveForm,不过,我目前还没有进行到这里,因为我在CORBA服务器/客服端编程中遇到了困难,如果我的困难解决了,我们一起探讨这个问题!
huangjuliang 2003-10-28
  • 打赏
  • 举报
回复
没有碰到过这种问题!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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