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. canvas画圆又毛边

    canvas使用arc()画园有毛边,如图:,只需给其添加width,height即可,直接上代码 <!DOCTYPE html> <html lang="en" ...

  2. 【JavaWeb】之Servlet

    一.Servlet简介 1.1 什么是Servlet(server applet): 是一种独立于平台和协议的服务器端Java应用程序,通过Servlet可以生成动态web页面.还可以在服务器端对客户 ...

  3. python_多线程多进程

    多线程,适用于IO密集型任务 IO,input,output缩写,包括网路io(比如上传下载),磁盘io,(比如数据库读写),CPU操作不频繁 多进程,适用于CPU密集型任务 数据分析,算法,依赖CP ...

  4. 51 nod 1127最短的包含字符串(尺取法)

    1127 最短的包含字符串   收藏  关注 给出一个字符串,求该字符串的一个子串S,S包含A-Z中的全部字母,并且S是所有符合条件的子串中最短的,输出S的长度.如果给出的字符串中并不包括A-Z中的全 ...

  5. 我不熟悉的list

    其实在日常中,链表的题目做的比较多,但是使用STL自带链表的还是比较少,所以里面的一些API不大熟悉.这边也简要介绍一些. 基本的一些API 先列举的这些和上面几篇用法几乎一样,所以不再累述. 赋值相 ...

  6. unittest详解(五) 引入装饰器@classmethod

    我们知道setUp()和setDown()的作用是在每条测试用例执行前准备测试环境以及用例测试结束后恢复测试环境,如果我们执行的测试类下所有测试用例的环境准备和环境复原的操作都是一样的,那么我们就没必 ...

  7. BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386 (luogu) https://www.luogu.org/pro ...

  8. shell编程连接postgres数据库(数据备份)

    第一步:通过xshell或者其他工具连接到linux服务, 第二步:创建一个脚本:touch se.sh 第三步:输入i,代表开始输入内容 输入以下命令: 脚本如下:(sql语句可以是任何复杂的sql ...

  9. hibernate entitymanager的理解

    hibernate EntityManager是围绕提供JPA编程接口的Hibernate Core的一个包装,支持JPA实体实例的生命周期,并允许你用标准的JavaPersistence查询语言编写 ...

  10. JAVA基础面试汇总

    一.基础知识:1.JVM.JRE和JDK的区别:    JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性.                  java ...