VC开发支持ActiveX控件工程
2012-11-29 16:49
218 查看
近日使用VC开发一个带对话框的ActiveX控件第一步:创建ActiveX控件,正常使用
第二步:ActiveX控件添加对话框,正常,参见http://blog.csdn.net/ljz9425/article/details/7192786
第三步:对话框添加常用控件,测试正常
第四步:对话框添加ActiveX控件,测试错误:debug assertion failed f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp,经分析得原因是因为VC在创建ActiveX是不支持嵌入其它OLE对象,修改工程初始化方法
[cpp] view
plaincopyprint?
BOOL CrApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();
CoInitialize(NULL);//添加支持OLE
AfxEnableControlContainer();//添加支持OLE
if (bInit)
{
// TODO: 在此添加您自己的模块初始化代码。
}
return bInit;
}
原因是VC在创建应用程序向导时会提示是否支持(包含)ActiveX控件,而在创建ActiveX时向导中没有此项选择
附:
[plain] view
plaincopyprint?
CoInitialize
CoInitialize是 Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。
语法:HRESULT CoInitialize(_in_opt LPVOID pvReserved);
参数被保留,且必须为NULL。
返回值S_OK : 该线程中COM库初始化成功S_FALSE 该线程中COM库已经被初始化 CoInitialize () 标明以单线程方式创建。
使用 CoInitialize 创建可以使对象直接与线程连接,得到最高的性能。
CoInitialize并不装载COM 库,它只用来初始化当前线程使用什么样的套间。使用这个函数后,线程就和一个套间建立了对应关系。线程的套间模式决定了该线程如何调用COM对象,是否需要列集等。
CoInitialize ()并不会干扰客户和服务器之间的通信,它所做的事情是让线程注册一个套间,而线程运行过程中必然在此套间。
CoInitialize和CoUninitialize必须成对使用。
创建新的就手程序用该调用CoInitializeEx代替CoInitialize。
[plain] view
plaincopyprint?
fxEnableControlContainer()函数是:允许应用程序作为控件容器来使用,也就是说你可以在这个应用程序中使用ocx之类的控件。对于用MFC向导自动生成的单文档框架程序的C...APP::InitInstance()函数中自动加了这一句 AfxEnableControlContainer();
转自: http://blog.csdn.net/ljz9425/article/details/7193654
第二步:ActiveX控件添加对话框,正常,参见http://blog.csdn.net/ljz9425/article/details/7192786
第三步:对话框添加常用控件,测试正常
第四步:对话框添加ActiveX控件,测试错误:debug assertion failed f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\winocc.cpp,经分析得原因是因为VC在创建ActiveX是不支持嵌入其它OLE对象,修改工程初始化方法
[cpp] view
plaincopyprint?
BOOL CrApp::InitInstance()
{
BOOL bInit = COleControlModule::InitInstance();
CoInitialize(NULL);//添加支持OLE
AfxEnableControlContainer();//添加支持OLE
if (bInit)
{
// TODO: 在此添加您自己的模块初始化代码。
}
return bInit;
}
原因是VC在创建应用程序向导时会提示是否支持(包含)ActiveX控件,而在创建ActiveX时向导中没有此项选择
附:
[plain] view
plaincopyprint?
CoInitialize
CoInitialize是 Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。
语法:HRESULT CoInitialize(_in_opt LPVOID pvReserved);
参数被保留,且必须为NULL。
返回值S_OK : 该线程中COM库初始化成功S_FALSE 该线程中COM库已经被初始化 CoInitialize () 标明以单线程方式创建。
使用 CoInitialize 创建可以使对象直接与线程连接,得到最高的性能。
CoInitialize并不装载COM 库,它只用来初始化当前线程使用什么样的套间。使用这个函数后,线程就和一个套间建立了对应关系。线程的套间模式决定了该线程如何调用COM对象,是否需要列集等。
CoInitialize ()并不会干扰客户和服务器之间的通信,它所做的事情是让线程注册一个套间,而线程运行过程中必然在此套间。
CoInitialize和CoUninitialize必须成对使用。
创建新的就手程序用该调用CoInitializeEx代替CoInitialize。
[plain] view
plaincopyprint?
fxEnableControlContainer()函数是:允许应用程序作为控件容器来使用,也就是说你可以在这个应用程序中使用ocx之类的控件。对于用MFC向导自动生成的单文档框架程序的C...APP::InitInstance()函数中自动加了这一句 AfxEnableControlContainer();
转自: http://blog.csdn.net/ljz9425/article/details/7193654
相关文章推荐
- 今天才明白VC++.net的含义: VS系列的c++编译器可以支持托管C++(类似于C#,具体请看MS在线文档),当然包括winform界面开发。
- VC++开发的ActiveX如何加入安全机制,避免IE中提示“在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗?”
- VC开发多语言国际化界面支持的简单方法
- vc6 0 atl工程开发的com组件输出事件到VB,VB接收不到中件响应
- VC2005开发ActiveX控件把属性页和属性关联
- VC开发多语言界面支持的简单方法
- 直接使用默认设置进行打印:(3)使用VC开发ActiveX控件实现打印中文字符串
- vc开发ActiveX控件
- VC开发多语言界面支持的简单方法
- VC开发ActiveX控件指引
- ffmpeg 转换VC工具 V1.1.2 支持android.mk工程文件生成
- VC开发多语言界面支持的简单方法
- VC开发多语言界面支持的简单方法
- VC2005开发MFC ActiveX控件基础教程
- 在VC工程中添加多语言支持[转]
- 在VC++中利用ActiveX控件开发串行通信程序
- VC开发多语言界面支持的简单方法
- ffmpeg 转换VC工具 V1.1.2 支持android.mk工程文件生成
- VC开发多语言界面支持的简单方法
- VC++开发Activex控件以及签名发布