【小沐学C++】C++ MFC中嵌入64位ActiveX控件(VS2017)

news2025/2/23 14:14:12

文章目录

  • 1、简介
    • 1.1 MFC
    • 1.2 ActiveX
  • 2、VS2017添加ActiveX控件
  • 结语

1、简介

1.1 MFC

Microsoft 基础类 (MFC) 库针对大部分 Win32 和 COM API 提供面向对象的包装器。 虽然此包装器可用于创建极为简单的桌面应用程序,但当你需要开发具有多个控件的更复杂的用户界面时,此包装器将最为有用。 可以使用 MFC 创建带有 Office 样式用户界面的应用程序。

https://learn.microsoft.com/zh-cn/cpp/mfc/mfc-desktop-applications?view=msvc-170

用于多字节字符编码 (MBCS) 的 MFC 库 (DLL) 不再包含于 Visual Studio 中,但可用作 Visual Studio 加载项。

  • 下图表示派生自 CObject 的 MFC 类:
    在这里插入图片描述
  • 下图表示派生自 CWnd 和 CCmdTarget 的 MFC 类:
    在这里插入图片描述
  • 下图表示不是从 CObject 派生的 MFC 类:
    在这里插入图片描述

1.2 ActiveX

ActiveX 控件是一种特定的自动化服务器类型;它是可重用组件。 托管 ActiveX 控件的应用程序是该控件的自动化客户端。在 Visual C++ 中,您可以使用 MFC 或 ATL 创建 ActiveX 控件。

  • ActiveX 控件容器与有窗口的 ActiveX 控件之间的交互
    在这里插入图片描述

  • ActiveX 控件容器与 ActiveX 控件之间的通信
    在这里插入图片描述

  • 有窗口的 ActiveX 控件中的 Windows 消息处理(活动时)
    在这里插入图片描述

ActiveX 是旧技术,不应用于新开发。 可以使用 HTML5 和 JavaScript、新式浏览器扩展或 WebAssembly 模块等现代技术,以更简单、更安全的方式执行 ActiveX 控件的许多功能。有关详细信息,请参阅告别过去(第 2 部分):告别 ActiveX、VBScript、attachEvent 和本机消息以及 Microsoft Edge 扩展和 WebAssembly。

https://blogs.windows.com/msedgedev/2015/05/06/a-break-from-the-past-part-2-saying-goodbye-to-activex-vbscript-attachevent/

2、VS2017添加ActiveX控件

QA: MFC dialog web browser activeX Control will not generate class correctly.
https://developercommunity.visualstudio.com/t/mfc-dialog-web-browser-activex-control-will-not-ge/499195

为解决32位IDE中无法找到x64 ActiveX控件的问题,仍采用事先创建并注册好的FxActiveX_MfcListCtrl(ActiveX控件)做测试,不同的是其配置为x64。

Regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。
regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname 其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。

Regsvr32 [/u] [/n] [/i[:cmdline]] <dllname>
%systemroot%\SysWoW64\regsvr32 <full path of the DLL>

参数解释如下:
/u 				#反注册控件,取消注册服务器
/s 				#指定 regsvr32 安静运行,在成功注册/反注册DLL文件的前提下不显示结果提示框。
/n 				#不调用 DllRegisterServer;此选项必须与 /i 一起使用
/i:cmdline 		#调用 DllInstall,为其传递一个可选 [cmdline];当与 /u 一起使用时,可调用 dll uninstall
dllname 		#指定要注册的 dll 文件名。

添加方法与32位控件不同(当然也可以先注册对应的32位控件,添加控件代码之后,再注册64位控件,再编译代码工程),这里采用动态创建控件的方式,成功解决无法添加的问题。

  • (1)新建基于对话框的工程。
    在这里插入图片描述
  • (2)鼠标右键弹出菜单“类向导”
    在这里插入图片描述
  • (3)在窗口“类向导”,点击下拉框“添加类”,选择菜单“ActiveX控件中的MFC类”。

在这里插入图片描述

  • (4)在可用的ActiveX控件里没有找到相关控件FxActiveX_MfcListCtrl(ActiveX控件)的信息。
    如果是32位控件注册的话,是可以看见的。
    在这里插入图片描述
  • (5)选择从文件直接加载。
    在这里插入图片描述
  • (6)导出文件里的控件类。
    在这里插入图片描述
  • (7)自动生成对应的控件类代码文件。
    在这里插入图片描述
  • (8)添加控件对象定义代码。
    在这里插入图片描述
#include "CDXlist0.h"
CDXlist0 m_ctl;
  • (9)添加控件对象实现代码。
    在这里插入图片描述
#define IDC_OCX_CTL 1000
	
	CRect rect;
	GetClientRect(&rect);
	m_ctl.Create(NULL, WS_CHILD | WS_VISIBLE, rect, this, IDC_OCX_CTL);
	m_ctl.ShowWindow(SW_SHOW);

	for (int i = 0; i < 100; i++) {
		CString strText;
		strText.Format(L"hello: %d", i);
		m_ctl.AddTextItem(0, strText);
	}
  • (10)编译和运行工程。
    在这里插入图片描述
    成功加载ActiveX控件!

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你真的懂ArrayList吗?

ArrayList底层原理 ​ 1.ArrayList动态扩容的方法&#xff1f; 使用空参创建集合&#xff0c;在底层创建一个长度默认为0的数组&#xff1b;添加第一个元素时&#xff0c;底层会创建一个数组长度为10的数组&#xff1b;存满的时候&#xff0c;数组会自动扩容1.5倍&#xff1b;…

【算法思想-排序】按出现频率排序 - 力扣 1636

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

基于STM32+华为云IOT设计的智能车库管理系统

一、项目介绍 随着城市化进程和汽车拥有率的不断提高&#xff0c;停车难的问题也日益凸显。在城市中&#xff0c;停车场是一个非常重要的基础设施&#xff0c;但是传统的停车场管理方式存在很多问题&#xff0c;比如车位难以管理、停车费用不透明等。为了解决这些问题&#xf…

基于Vue+ELement搭建登陆注册页面实现后端交互

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

C语言入门Day_24 函数与指针

目录 前言&#xff1a; 1.指针和数组 2.函数和指针 3.易错点 4.思维导图 前言&#xff1a; 我们知道数组是用来存储多个数据的&#xff0c;以及我们可以用指针来指向一个变量。那么我们可以用指针来指向一个数组中的数据么&#xff1f; 指针除了可以像指向一个变量一样指…

【C++心愿便利店】No.6---C++之拷贝构造函数

文章目录 一、拷贝构造函数的引入二、拷贝构造函数 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;拷贝构造函数 记得 评…

python安全工具开发笔记(四)——python网络编程

一、C/S架构 什么是C/S架构 C : Client S : Server。客户机和服务器结构。 Server 唯一的目的就是等待Client 的请求&#xff0c;Client 连上 Server 发送必要的数据&#xff0c;然后等待Server端完成请求的反馈。 C/S网络编程 Server端进行设置&#xff0c;首先创建一个通信…

怎么选择AI伪原创工具-AI伪原创工具有哪些

在数字时代&#xff0c;创作和发布内容已经成为了一种不可或缺的活动。不论您是个人博主、企业家还是网站管理员&#xff0c;都会面临一个共同的挑战&#xff1a;如何在互联网上脱颖而出&#xff0c;吸引更多的读者和访客。而正是在这个背景下&#xff0c;AI伪原创工具逐渐崭露…

ReadPaper论文阅读工具

之前看文献一直用的EndNote嘛&#xff0c;但是突然发现了它的一个弊端&#xff0c;就是说每次没看完退出去之后&#xff0c;下次再接着看的时候它不能保留我上一次的位置信息&#xff0c;又要重头开始翻阅&#xff0c;这让我感到很烦躁哈哈。&#xff08;当然也不知道是不是我哪…

6条优势,anzo capital昂首资本相信MT5替代MT4的原因

投资者都知道MT5是在MT4基础上升级换代的多资产平台&#xff0c;MT5于2010年6月首次发布。anzo capital昂首资本认为MT5将完全取代MT4&#xff0c;就像MT4取代之前版本一样&#xff0c;因为有以下6条优势&#xff1a; 一.市场深度(DOM)数据。在MT4中&#xff0c;DOM几乎没有用…

GoAccess实时分析Nginx日志

GoAccess 是一个基于终端的实时 Web 日志分析仪。用 C 语言编写&#xff0c;它是快速&#xff0c;互动的&#xff0c;并以优雅而直观的方式显示日志。它提供了各种 Web 日志文件的支持&#xff0c;包括 Apache&#xff0c;Nginx&#xff0c;Caddy&#xff0c;Amazon S3 和 Clou…

c++STL概述

目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…

Python函数绘图与高等代数互融实例(六): 条形图|直方图|饼状图

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…

代码随想录刷题 Day 16

104.二叉树的最大深度 class Solution { public:int get_max(TreeNode* root) {if(root NULL) return 0;int left_depth get_max(root->left);int right_depth get_max(root->right);int depth max(left_depth, right_depth) 1;return depth;}int maxDepth(TreeNod…

Kafka的消息传递保证和一致性

前言 通过前面的文章&#xff0c;相信大家对Kafka有了一定的了解了&#xff0c;那接下来问题就来了&#xff0c;Kafka既然作为一个分布式的消息队列系统&#xff0c;那它会不会出现消息丢失或者重复消费的情况呢&#xff1f;今天咱们就来一探。 实现机制 Kafka采用了一系列机…

Node2Vec实战---《悲惨世界》人物图嵌入

1. pip各个包后导入 import networkx as nx # 图数据挖掘 import numpy as np # 数据分析 import random # 随机数# 数据可视化 import matplotlib.pyplot as plt %matplotlib inline plt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.uni…

ArtifactResolveException

bug描述 Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration :app:debugCompileClasspath. 产生原因 一般可能是更换了新AndroidStudio导致的。依赖库未能成功…

关于Safari浏览器报错:Failed to load resource: 发生SSL错误,无法建立到该服务器的安全连接

报错信息&#xff1a; Failed to load resource: 发生SSL错误&#xff0c;无法建立到该服务器的安全连接 XMLHttpRequest cannot load https://xxxxxxx due to access control checks. 具体如图下&#xff1a; 原因是&#xff1a;页面上的http请求变了https请求 解决办法…

【校招VIP】产品思维创意之活动推广

考点介绍&#xff1a; 对于活动新手来说&#xff0c;策划出一个活动创意不是难事。但是如何把做活动考虑周详&#xff0c;理清运营活动的思路和流程&#xff0c;避免重复工作却是需要沉淀的。运营活动有一个很重要的思路方法&#xff0c;就是倒推。九维这次来和你们讲述倒推的思…

day31多线程01

1.实现多线程 1.1简单了解多线程【理解】 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 1.2并发和并行【理解】 并行&#xff1a;在同一时刻&#xff0c;有多个指令在多个CPU上…