OCX--VC2005开发OCX

各种数据结构:

BSTR:与MFC的CString可以相互转换,BSTR = CString .AllocSysString();

VARIANT_BOOL:/* 0 == FALSE, -1 == TRUE */    typedef short VARIANT_BOOL;

 

碰到的问题如下:

vc2005+IE7的环境下,OCX不能添加成员变量

 原因:属于BUG,IE7->IE6解决。

IE8调试OCX无法进入断点

 原因:IE8/IE9默认是多进程工作的,所以默认情况下不能进行调试,解决办法:避免IE用多进程方式打开网页。

方法1:

运行gpedit.msc组策略管理器。在“计算机配置—》管理模板—》windows组件—》Internet Explore”中打开“设置选项卡进程增长”,设置为已启用,选项卡进程增长为0。应用之后IE8就进入单进程模式。

方法2:

1. 点击【开始】->【运行】 命令:regedit.
2. 定位到HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main
3. 在【右边区域】【右键】新建一个名称为TabProcGrowth的DWORD值, 数值数据设置为0.
4.重启电脑。

Project : error PRJ0050: Failed to register output. Please ensure you have the appropriate permissions to modify the registry.

 原因:OCX注册时候,找不到依赖的库。

找不到添加“方法”的地方

以CxxxOCX的工程为例,打开“Class View”,找到"CxxxOCXLib“,找到"_DCxxxOCX",即可添加。

Object "xxx" already exists

删除工程的ncb文件。

OCX注册失败,错误码0x80040200

需要以管理员身份运行CMD。

OCX在IE上加载失败

以IE为例,

1 点“工具”,点“Internet选项”,点“高级”,选中下面两项:

允许活动内容在我的计算机的文件中运行*   //允许一些脚本文件在此计算机上运行,比如一些网页上的javascript编写的脚本
允许运行或安装软件,即使签名无效*

2  点“安全”,点“可信站点”,点“站点”,添加要访问的地址,如“http://172.16.200.25”,点“关闭”。

再点“自定义级别”,对于“ActiveX控件和插件”这一栏,全部选启动。

3 如果还是不能加载,手动注册下控件。

更改函数名或参数,需要修改地方

除了消息定义,消息映射,消息声明,还有个隐蔽的地方需要修改,idl文件里的dispinterface _D(工程名),如果是函数名改变,还需更改dispidxxx的定义(在XXCtrl.h里)。

如何在OCX中调用OCX

首先在XXApp::InitInstance()中加入AfxEnableControlContainer(); 其次添加一个对话框资源,修改属性为:Border:None,Style:Child,然后在对话框上添加另一个OCX。

DISP_FUNCTION_ID(CVideoGeneralCtrl, "xx", dispidxx, xx, VT_I2, VTS_BSTR VTS_UI2,VTS_UI2) 编译提示:“DISP_FUNCTION_ID”宏的实参太多
符号写多了,DISP_FUNCTION_ID(CVideoGeneralCtrl, "xx", dispidxx, xx, VT_I2, VTS_BSTR VTS_UI2,VTS_UI2) 改成DISP_FUNCTION_ID(CVideoGeneralCtrl, "xx", dispidxx, xx, VT_I2, VTS_BSTR VTS_UI2 VTS_UI2) 。

你可能感兴趣的:(OCX--VC2005开发OCX)