bool CCollectDataDlgDlg::CreateMyCtrl(LPRECT lpRect, UINT nID, CWnd *pParent)

{

 CLSID clsid;

 wstring strClsid = _T("{126983A5-3415-4A3F-B2C6-D18DDF6E43B9}"); // 控件id号

CCOMHelper  COMHelper;

 COMHelper.clsid_from_string(&clsid, strClsid.c_str());

BOOL bSucc = false;

 TCHAR szMsg[1024] = {0};

try

 {

// MyCtrl必须是全局的CWnd类对象

  bSucc = m_MyCtrl.CreateControl(

   clsid, 

   _T("CollectData"),

   WS_CHILD | WS_VISIBLE| WS_CLIPSIBLINGS | WS_CLIPCHILDREN,

   CRect(lpRect),

   pParent,

   nID,

   NULL, FALSE, NULL);

 }

 catch (CMemoryException* e)

 {

  e->GetErrorMessage(szMsg, 1024);

  e->Delete();

 }

 catch (CFileException* e)

 {

  e->GetErrorMessage(szMsg, 1024);

  e->Delete();

 }

 catch (CException* e)

 {

  e->GetErrorMessage(szMsg, 1024);

  e->Delete();

 }

if (!bSucc)

 {

  AfxMessageBox(_T("创建CollectData.ocx控件失败\r\n请检查CollectData.ocx控件是否安装并注册"));

  return false;

 }

IUnknown *pUnk = m_MyCtrl.GetControlUnknown();

 CComQIPtr<_DCollectData> spDCollectDataCtl(pUnk);

 if (spDCollectDataCtl == NULL)

 {

  AfxMessageBox(_T("无法从CollectData.ocx中获取_DCollectData接口"));

  return false;

 }

return true;

}

注意:必须在工程的app文件的InitInstance()中加入如下代码,否则动态创建控件不会成功

AfxEnableControlContainer();

上述只是动态创建了ocx控件,但控件的接口函数等还是不能用,必须按下面的步骤,控件的接口等才会被识别:
在你加载该ocx控件的主工程节点中单击鼠标右键,在弹出的菜单中选择“添加---->类”菜单,在弹出的对话框中选择如下红色圈圈中的项:
单击“添加”按钮,弹出如下对话框
上面对话框罗列出了注册表中所有的ocx控件,找到你要添加的控件,单击“完成”,此时会生成一个封装该ocx的cpp和.h文件,在主程序中包含该.h即可使用该ocx控件中的接口了

【VS开发】动态创建ActiveX控件的更多相关文章

  1. 用ATL和MFC来创建ActiveX控件

    摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发.MFC代表了创建独立的Windows应用的一种简单.一致的方法:ATL提供了一种框架来实现创建COM客户机和服务器所 ...

  2. 袁创:使用反射动态调用ActiveX控件

    ■■■■前言 目前的基于.NET平台的软件研发中仍然存在大量的对COM及ActiveX控件的调用.使用C#调用ActiveX控件时一般是使用vs.net工具自动生成的互操作性程序集.这种方法操作简单, ...

  3. 使用反射动态调用ActiveX控件

    使用反射动态调用ActiveX控件 袁永福 2018-3-2 ■■■■问题描述: 目前的基于.NET平台的软件研发中仍然存在大量的对COM及ActiveX控件的调用.使用C#调用ActiveX控件时一 ...

  4. 如何用ATL创建ActiveX控件

    演示截图: 代码简介或代码解析: 如何用ATL创建ActiveX控件 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部 ...

  5. winform 用户控件、 动态创建添加控件、timer控件、控件联动

    用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...

  6. WinForm用户控件、动态创建添加控件、timer控件--2016年12月12日

    好文要顶 关注我 收藏该文 徐淳 关注 - 1 粉丝 - 3       0 0     用户控件: 通过布局将多个控件整合为一个控件,根据自己的需要进行修改,可对用户控件内的所有控件及控件属性进行修 ...

  7. winform用户控件、动态创建添加控件、timer控件、控件联动

    用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...

  8. VS2010 开发 VB6.0 activeX控件 dll

    项目源码 https://download.csdn.net/download/csdn_z_s/10427764 开发环境 操作系统: win7 64位 旗舰版 Java语言开发环境:  Eclip ...

  9. 开发ActiveX控件调用另一个ActiveX系列1——开发一个MFC ActiveX控件

    ActiveX开发的教程有很多,我也从中受益匪浅,例如以下这几篇: 基本教程:http://www.cnblogs.com/guenli/articles/1629915.html 注意事项:http ...

随机推荐

  1. k8s资源需求及资源限制

    在k8s上,可由容器或pod请求或消费的计算资源时指cpu和内存,这也是目前仅有的受支持的两种类型.相比较来说,cpu属于可压缩资源,即资源额度可按需收缩,而内存则是不可压缩型资源,对其执行收缩操作可 ...

  2. 零拷贝的原理及Java实现

    在谈论Kafka高性能时不得不提到零拷贝.Kafka通过采用零拷贝大大提供了应用性能,减少了内核和用户模式之间的上下文切换次数.那么什么是零拷贝,如何实现零拷贝呢? 什么是零拷贝 WIKI中对其有如下 ...

  3. python fc21~fc29踩坑记录

    最近在公司的linux fc21上安装python和anaconda, 直接mintmenu给挂掉了. 真是弱爆了. 后来,升级终于来了, 升到了fc29.好,再看看, python2.7还在, py ...

  4. SpringCloud使用feign时的复杂参数传递(转)

    Feign传参注意 最近在用SpringCloud尝试重构以前的项目,使用Feign客户端组件来调用微服务,经常出现参数传不过去变成null的问题,网上查了一下发现feign在参数上的使用还是有一定的 ...

  5. 使用CEfSharp之旅 前后端访问代码

    1.引入CEfSharp newget包 2.把平台配置为X86或X64,any cpu不支持此控件 3.引入命名空间 using CefSharp; using CefSharp.WinForms; ...

  6. C#写入文件内容时提示:文件正被另一个人或程序使用

    创建文件后未将文件关闭 string sTransLogFile = sTransLogPath + "\\" + DateTime.Now.ToString("yyyy ...

  7. javascript中的原型和原型链(五)

    Array.prototype 先记住一句话——每一个函数,都有一个prototype属性——每一个函数,无论是你自定义的,还是系统内置的 var fn = function() {} console ...

  8. [LibreOJ 3124]【CTS2019】氪金手游【容斥原理】【概率】【树形DP】

    Description Solution 首先它的限制关系是一个树形图 首先考虑如果它是一个外向树该怎么做. 这是很简单的,我们相当于每个子树的根都是子树中最早出现的点,概率是容易计算的. 设DP状态 ...

  9. [CF666E]Forensic Examination:后缀自动机+线段树合并

    分析 用到了两个小套路: 使用线段树合并维护广义后缀自动机的\(right\)集合. 查询\(S[L,R]\)在\(T\)中的出现次数:给\(T\)建SAM,在上面跑\(S\),跑到\(R\)的时候先 ...

  10. springCloud 搭建eureka服务之天坑

    这里我是采用gradle来管理jar包的. 1.使用idea创建一个gradle项目. 2.编辑settings.gradle文件 rootProject.name = 'jtm' //include ...