atl创建avtive

news2024/9/22 13:30:45

activex无窗口问题

控件在编码过程中要检查m_hWnd是否存在,不然vs可能会出现绘制错乱和崩溃
在这里插入图片描述
atl窗体通过CComControlBase的内部变量控制,窗体属性,包括onsize事件对应的m_bRecomposeOnResize变量控制窗体变化事件响应。

可插入的控件

在这里插入图片描述

授权后,IE才能正常显示(某些情况下显示不正常)

在这里插入图片描述
在这里插入图片描述

    第一、二个页面比较重要,主要对idl和类的继承产生影响。第三个页面可以通过对象属性配置
  • 未正确注册错误

c#调用过程中,”未正确注册错误“可能是由于未设置可插入选项或者重复插入后,项目未清理干净,建议新建一个项目试试。winform需要删除obj目录。axHost错误是因为,activex未设置插入属性(见2的设置)

  • atl中指针错误不会异常崩溃,可以通过vs的反汇编查询打印输出提示的异常地址得到具体错误点

在这里插入图片描述
或者通过新建断点中的,函数断点和内存断点定位。

  • mfc的通过ddx可以自动绑定activex为成员变量,生成activex的方法调用文件和对象创建方法。不过vs提供的绑定只能生效一次。控件绑定后就不能修改了,可以通过新建项目重新绑定控件后获取到新的activex对象调用文件。

atl中自定义数据类型


 typedef [v1_enum, helpstring("_WeekDay Enum")] enum  _WeekDay

  {  

    Sunday=0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday  

  }_WeekDay;  

  typedef struct MyStruct 

  {

     int i;

  }MyStruct;

接口的返回值,需要手动修改idl文件等到。参数的最后一位形如[out,retval]代表返回值。

自定义数据类型,不能再接口中传递,而应该传递接口类型指针,例如

struct AccountInfo
{
LPCWSTR pszId;
LPCWSTR pszPassword;
};
HRESULT GetAccountInfo(AccountInfo *pAccountInfo);
 
IDL:
interface IAccountInfo
{
HRESULT get_Id(BSTR *pVal);
HRESULT get_Password(BSTR *pVal);
}
HRESULT get_Account(IAccountInfo **pAccountInfo);
//当用户使用 get_Account 方法获取这个信息的时候,不是返回自定义数据结构,
//返回 IAccountInfo 接口。
//你创建一个实现了 IAccountInfo 接口的实例,返回这个实例的这个接口。
//用户获取到这个接口后,使用这个接口的方法获取数据。
//而不是像 C++ 那样,使用结构的成员来取得数据。
 
这样在JavaScript 中,
var account = XXX.Account;
var id = account.Id;
var password = account.Password;

atl字符串

atl字符串使用BSTR,C++的封装类中_b_str,通过copy方法传出字符串到BSTR。

组建异常(IErrorInfo接口)

 SetErrorInfo抛出异常

连接点

双击类窗口中的接口可以查看编辑的文件,如果双击显示idl文件,就可以在该接口上添加函数接口了。连接点需要atl创建过程中,使用项目支持“连接点”和IPropertyNotifySInk。连接点主要为创建回调函数,类似wcf的双工通信契约。创建成功后,控件本身会增加事件接口。控件端事件的实现可以通过,类窗口中的控件类右键“接口实现”,选择实现的接口和模块自动实现后连接点代码。如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
c#调用过程中,项目obj需要手动删除,否则会有编译错误。MFC调用activex可以ddx绑定控件自动生成接口代码,不过自动生成只能一次,接口有更新,只能重建项目重新绑定,才能自动生成调用activex的代码了。

google对activex的支持需要下载安装插件。随着js和html5的发展,现在已经很少看到activex在互联网中应用,处理一些安全级别比较高的场景,比如银行安装插件。一般的场景中,js和html5前端控件,已经完全可是代替activex的应用,而且绘制和扩展性已经浏览器的安全性,都会比activex更好。

atl访问IDispatch自动化接口

struct __declspec(uuid(“7FA22CB1-D26F-11D0-B260-00A0240CEEA3”)) IObj;
CLSID可以通过__uuidof(IObj)获取
atl使用CComDispatchDriver创建自动化对象(mfc使用COleDispatchDriver)

控件显示

mmc控制台添加,activex控件打开即可
在这里插入图片描述
或者

  • TstCon32.exe可以在开发中启动,附加activex控件

在这里插入图片描述

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

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

相关文章

Hbase基本操作

目录 HBASE 基本操作 hbase shell:进入hbase shell环境 status命令:查看集群状态 version:查看版本信息 create:创建表 drop 删除表 list:查看所有表 desc :查看表结构 exists :查看表…

分布式数据一致性解决方案推理过程

redis是一个极轻量级的进程,单机单线程单进程。 使用redis很容易实现分布式锁:setnx,同一个key,谁设置成功了,谁就抢到了锁,所以就产生了多锁问题。 假设客户端1抢到了锁,redis挂了&#xff0c…

Docker下载、安装

安装docker前,需要安装WSL Linux 内核、Hyper-V Hyper-V 首先确认系统是否安装:Hyper-V 如果没有则安装: pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in (findstr /i . h…

java中的泛型

1.2 泛型的引入 在Java中,我们在声明方法时,当在完成方法功能时如果有未知的数据需要参与,这些未知的数据需要在调用方法时才能确定,那么我们把这样的数据通过形参表示。在方法体中,用这个形参名来代表那个未知的数据…

如何在四维轻云地理空间数据管理云平台中搭建场景?

《四维轻云》是一款轻量化的地理空间数据管理云平台,支持地理空间数据的在线管理、编辑以及分享。平台有项目管理、数据上传、场景搭建、发布分享、素材库等功能模块,支持多用户在线协作管理,实现了轻量化、便捷化的空间数据应用。 目前&…

< 前端性能优化: 资源加载优化 >

文章目录 👉 前言👉 一、路由懒加载> 实现代码> 处理前后各文件大小情况 👉 二、组件懒加载> 实现代码> 适用场景 👉 三、骨架屏优化白屏时长👉 四、JavaScript 的6种加载方式1. 正常模式2. async 模式3. …

云端上的结题报告——凌恩智能交付系统

做组学分析的小伙伴不难发现,在拿到测序分析结果后,经常会需要进行调整,比如:配色不符合自己审美、分组需要重新设置、重复性差需要剔除样本等,面对重新分析或改图的情况,自学生信费时费力,找公…

ClickHouse数据一致性

目录 1 准备测试表和数据2 手动OPTIMIZE(不推荐)3 通过 Group by 去重4 通过 FINAL 查询4.1 老版本测试4.2 新版本测试 1 准备测试表和数据 查询 CK 手册发现,即便对数据一致性支持最好的 Mergetree,也只是保证最终一致性: 我们在使用 Repl…

条码控件Aspose.BarCode入门教程(7):如何在Java 中的 GS1-128 条码生成器

Aspose.BarCode for .NET 是一个功能强大的API,可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能,以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API支持流行文件格式处理&am…

C语言—深度剖析数据在内存中的存储

深度剖析数据在内存中的存储 数据类型介绍类型的基本归类整形在内存中的存储大小端介绍整形在内存中的存储的相关练习浮点型在内存中的存储浮点型在内存中的存储相关介绍 数据类型介绍 内置类型(C语言本身就具有的类型): char //字符…

linux_时序竞态-pause函数-sigsuspend函数-异步I/O-可重入函数-不可重入函数

接上一篇:linux_信号捕捉-signal函数-sigaction函数-sigaction结构体 今天来分享时序竞态的知识,关于时序竞态的问题,肯定会和cpu有关,也会学习两个函数,pause函数,sigsuspend函数, 也会分享什么…

教你轻松申请Azure OpenAI

Azure OpenAI 和 OpenAI 官方提供的服务基本是一致的,但是目前前者还是处于预览版的状态,一些功能还没有完全开放。 优点: 不受地域限制,国内可以直接调用。可以自己上传训练数据进行训练(据说很贵)。Azu…

【原理图专题】Cadence如何导出智能PDF

原理图导出PDF只会使用打印?打印后没有书签还需要手动建立多页面的书签? 其实Cadence支持导出智能pdf,不仅能够在pdf上直接看到料件的各种参数,还可以直接点击连页符跳转到对应的页面和网络上,并且还能根据页面自动建立完整的书签,方便查找。 最终能生成如下所示的页面…

建筑负荷需求响应的介绍

可再生能源发展及电网用电平衡现状 近些年,我国城市建筑的电网供给和需求存在严重的不平衡问题,特别是当受建筑空调季节性负荷的影响时。一方面夏季及冬季电力负荷短缺,而另外一方面全年仍然存在着发电设备过剩、运行小时数不足等问题。以加州为例,夏季高峰用电中 50%左右…

一个对付小孩便秘的指南,让麻麻不再当催屎员

便秘在儿童中很常见。多达30%的儿童患有便秘。据估计,它占所有儿科医生的3%-5%。便秘通常包括排便困难或排便频率降低。正常排便的频率和特征在不同的儿童时期是不同的,因此没有单一的正常定义。●在足月新生儿中,第一次排便通常发生在出生后…

Linux 下 安装多个mysql8.0

1:下载mysql wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar 2:解压下载的mysql压缩包 解压mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar tar -xf mysql-8.0.33-linux-glibc2.17-x86_64-minimal.ta…

2006年真题

数学基础 一、形式化下列语句(共4分) 1.(1分)没有不犯错误的人。 (∀x)(M(x)−>Q(x)) 2.(2 分)虚数既不是有理数也不是无理数。 (∀ x)(W(x)∧P(x)∧Q(x)) 二、填空题(共 9 分) 1.设集合A{a,b,c}, I A I_A IA​…

Jetpack全套

Jetpack全套 一.Jetpack介绍1.特性:2.分类: 二.应用架构三.LifeCycle:1.简介2.简单使用3.实战:Dialog内存泄漏4.Lifecycle的应用(0)activity/fragment上面案例都是(1)Service(2&…

【部署Ruoyi微服务】

IP机器与部署组件 1 安装mysql wget https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022systemctl enab…

Mysql列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结 前言 1)采用26字母和0-9的自然数加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开 2)全部小写命名,尽量避免…