MFC控件开发总结
2012-12-05 09:12
309 查看
最近几天在开发控件,因为初次开发,期间遇到了不少问题,下面是我的遇到的问题以及有用的帖子.
我的开发环境是vs2008,IE8.0,MFC控件,C++,WINXP
在IE里加载一个带socket通信的控件,控件和自己开发的原程序差不多,把该用的都从原程序复制过来,再处理一下.
/content/4065385.html 这篇帖子详细介绍了MFC控件开发的所有过程
http://www.codeproject.com/Articles/14533/A-Complete-ActiveX-Web-Control-Tutorial 这里是MFC控件的一个列子,里面有批处理.
我在 https://www.wosign.com/index.htm 申请的微软数字代码.
主要问题是控件加载的时候遇到红叉,这个问题搞了2天.主要是把clsid搞错了,在.idl文件中,
我认为是CBE9E0B0-95DB-4495-8BE8-E4CB416EF07D 这个是clsid,结果怎么弄都是红叉,不能加载,但是查看regeit,对应的的控件已经存在,后面看了找到http://www.codeproject.com/Articles/14533/A-Complete-ActiveX-Web-Control-Tutorial这个列子,仔细看了一下其实clsid应该是:36299202-09EF-4ABF-ADB9-47C599DBE778,改好网页,再数字签名,正确显示程序界面.
在后面又遇到新的问题,我的控件是要与服务器通信的,有一个模式对话框,用于用户登入,一个非模式对话框,用于主界面显示,在TstCon32.exe中测试的时候,正确显示,模式和非模式对话框正确打开,通过IIS服务器,在IE里运行的时候,只显示登入界面的对话框,非模式对话框总是显示红叉,折腾了一天无果,后面重新弄了个工程,在控件新建的时候"控件设置->创建的控件基于->STATIC"(原先是按默认的"控件设置->创建的控件基于->none"),,红叉没有啦,正常运行.happy.
遇到的问题:
1.控件开发的时候由于是有2个网卡,不同网卡切换出现好几次蓝屏.
2.控件开发的时候,下载网上的其他例子控件也试一下,有时候打开IE的时候系统会要求重新启动,重新启动后正常登入,但WINDOW界面打不开,好像是加载某个控件出现问题explorer.exe出现问题,重新打开explorer.exe就好啦,然后用360扫描无效的控件,清除就好啦.
3.要用到数字证书,太麻烦啦.重新签名,打包,唉,记得要用到MyActive下面的批处理,方便点.
4.在TstCon32.exe和本地IE中测试通过,但通过IIS服务器,总是出现红叉,不知道是不是控件类型的缘故(STATIC).
以下是几个注意点:
1.clsid不要弄错,要不会出红叉
2.控件安全请参照(http://www.codeproject.com/Articles/14533/A-Complete-ActiveX-Web-Control-Tutorial) MyActiveX.cpp, CLSID_SafeItem,还有CreateComponentCategory下面的东西都要弄到自己的工程(虽然不知道为什么).
3.由于我的工程要用到GDI+,SOCKET,由于一开始没有加GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL),Bitmap读图片的时候读不进来,所以,不要忘了在InitInstance里面加入
在结束的时候
4.控件在TstCon32.exe中调试,vs2008中,"工具->外部工具->添加",如图
![](http://img.my.csdn.net/uploads/201212/07/1354843953_3618.jpg)
(这里我的安装目录是D盘)
命令(D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\TstCon32.exe)
初始目录(D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools)
![](http://img.my.csdn.net/uploads/201212/07/1354844181_5366.jpg)
命令(D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\TstCon32.exe)
5.控制在本地IE中调试
请见(http://hi.baidu.com/shanghaocool/item/6fe942e0d28ea42e6dabb859)
6.控件通过IIS服务器在IE中运行(http://127.0.0.1/index.html),注意数字签名哦,
我的开发环境是vs2008,IE8.0,MFC控件,C++,WINXP
在IE里加载一个带socket通信的控件,控件和自己开发的原程序差不多,把该用的都从原程序复制过来,再处理一下.
/content/4065385.html 这篇帖子详细介绍了MFC控件开发的所有过程
http://www.codeproject.com/Articles/14533/A-Complete-ActiveX-Web-Control-Tutorial 这里是MFC控件的一个列子,里面有批处理.
我在 https://www.wosign.com/index.htm 申请的微软数字代码.
主要问题是控件加载的时候遇到红叉,这个问题搞了2天.主要是把clsid搞错了,在.idl文件中,
// MyActiveX.idl : type library source for ActiveX Control project. // This file will be processed by the MIDL compiler tool to // produce the type library (MyActiveX.tlb) that will become a resource in // MyActiveX.ocx. #include <olectl.h> #include <idispids.h> [ uuid(CBE9E0B0-95DB-4495-8BE8-E4CB416EF07D), version(1.0), helpfile("MyActiveX.hlp"), helpstring("MyActiveX ActiveX Control module"), control ] library MyActiveXLib { importlib(STDOLE_TLB); // Primary dispatch interface for CMyActiveXCtrl [ uuid(98AF8A06-7DFE-472D-A713-A0C6F22FDC3D), helpstring("Dispatch interface for MyActiveX Control")] dispinterface _DMyActiveX { properties: [id(1) , helpstring("property InputParameter")] BSTR InputParameter; [id(2) , helpstring("property OutputParameter")] BSTR OutputParameter; methods: [id(3), helpstring("method LoadParameter")] void LoadParameter(void); }; // Event dispatch interface for CMyActiveXCtrl [ uuid(78099343-A8FF-4867-A537-06F31034F22B), helpstring("Event interface for MyActiveX Control") ] dispinterface _DMyActiveXEvents { properties: // Event interface has no properties methods: [id(1)] void ParameterLoaded(void); }; // Class information for CMyActiveXCtrl [ uuid(36299202-09EF-4ABF-ADB9-47C599DBE778), helpstring("MyActiveX Control"), control ] coclass MyActiveX { [default] dispinterface _DMyActiveX; [default, source] dispinterface _DMyActiveXEvents; }; };
我认为是CBE9E0B0-95DB-4495-8BE8-E4CB416EF07D 这个是clsid,结果怎么弄都是红叉,不能加载,但是查看regeit,对应的的控件已经存在,后面看了找到http://www.codeproject.com/Articles/14533/A-Complete-ActiveX-Web-Control-Tutorial这个列子,仔细看了一下其实clsid应该是:36299202-09EF-4ABF-ADB9-47C599DBE778,改好网页,再数字签名,正确显示程序界面.
在后面又遇到新的问题,我的控件是要与服务器通信的,有一个模式对话框,用于用户登入,一个非模式对话框,用于主界面显示,在TstCon32.exe中测试的时候,正确显示,模式和非模式对话框正确打开,通过IIS服务器,在IE里运行的时候,只显示登入界面的对话框,非模式对话框总是显示红叉,折腾了一天无果,后面重新弄了个工程,在控件新建的时候"控件设置->创建的控件基于->STATIC"(原先是按默认的"控件设置->创建的控件基于->none"),,红叉没有啦,正常运行.happy.
遇到的问题:
1.控件开发的时候由于是有2个网卡,不同网卡切换出现好几次蓝屏.
2.控件开发的时候,下载网上的其他例子控件也试一下,有时候打开IE的时候系统会要求重新启动,重新启动后正常登入,但WINDOW界面打不开,好像是加载某个控件出现问题explorer.exe出现问题,重新打开explorer.exe就好啦,然后用360扫描无效的控件,清除就好啦.
3.要用到数字证书,太麻烦啦.重新签名,打包,唉,记得要用到MyActive下面的批处理,方便点.
4.在TstCon32.exe和本地IE中测试通过,但通过IIS服务器,总是出现红叉,不知道是不是控件类型的缘故(STATIC).
以下是几个注意点:
1.clsid不要弄错,要不会出红叉
2.控件安全请参照(http://www.codeproject.com/Articles/14533/A-Complete-ActiveX-Web-Control-Tutorial) MyActiveX.cpp, CLSID_SafeItem,还有CreateComponentCategory下面的东西都要弄到自己的工程(虽然不知道为什么).
3.由于我的工程要用到GDI+,SOCKET,由于一开始没有加GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL),Bitmap读图片的时候读不进来,所以,不要忘了在InitInstance里面加入
BOOL CHXCWApp::InitInstance() { BOOL bInit = COleControlModule::InitInstance(); if (bInit) { GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); WSADATA WSAData = {0}; if ( 0 != WSAStartup( WSA_VERSION, &WSAData ) ) { if ( LOBYTE( WSAData.wVersion ) != LOBYTE(WSA_VERSION) || HIBYTE( WSAData.wVersion ) != HIBYTE(WSA_VERSION) ) AfxMessageBox(_T("网络初始化失败")); WSACleanup(); return FALSE; } } return bInit; }
在结束的时候
int CHXCWApp::ExitInstance() { // TODO: 在此添加您自己的模块终止代码。 WSACleanup(); GdiplusShutdown(gdiplusToken); return COleControlModule::ExitInstance(); }
4.控件在TstCon32.exe中调试,vs2008中,"工具->外部工具->添加",如图
![](http://img.my.csdn.net/uploads/201212/07/1354843953_3618.jpg)
(这里我的安装目录是D盘)
命令(D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\TstCon32.exe)
初始目录(D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools)
![](http://img.my.csdn.net/uploads/201212/07/1354844181_5366.jpg)
命令(D:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\TstCon32.exe)
5.控制在本地IE中调试
请见(http://hi.baidu.com/shanghaocool/item/6fe942e0d28ea42e6dabb859)
6.控件通过IIS服务器在IE中运行(http://127.0.0.1/index.html),注意数字签名哦,
相关文章推荐
- WinForm控件开发总结(十二)-----让控件处理导航键
- Office控件开发总结-开发Windows 窗体控件简单概述
- MFC控件关联变量总结(EDIT编辑框)
- MFC一些基本控件操作的总结
- vc++中利用ado和listcontrol控件进行数据库应用开发的一点总结
- MFC总结(4)---MFC中如何使用子控件向父控件发送自定义消息
- 【IOS 开发学习总结-OC-40】★★ios开发之事件机制——控件获取方式与事件处理方式
- WinForm控件开发总结(九)-----为属性提下拉式属性编辑器
- MFC采用VS2008开发,如何将变量关联到控件上?
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- 改变mfc控件焦点的方法的总结
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- [原创]银行MIS系统前台开发总结(3)-dataTable控件应用2
- 标准 MFC WinSock ActiveX 控件开发实例(II)高级篇
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- MFC .ocx控件开发
- MFC控件:listctrl使用方法总结
- MFC基础,MFC自绘控件学习总结.
- DevExpress控件开发常用要点(项目总结版)
- c# WinForm开发 DataGridView控件的各种操作总结(单元格操作,属性设置)