如何传递自定义结构--MFC ActiveX ControlWizard建立的工程

BruceLin2008 BruceLin2008 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大侠们,帮帮忙,已经折腾了一个月了,找了很多资料,问了很多人,还是没有搞定,网上真的没有人能搞定??都说这里高手多,我就来了!
问题是这样的:我用MFC ActiveX ControlWizard建立了一个工程,想弄一个.OCX的控件,供其他语言调用,如JavaScript、VB、JAVA等,我需要在事件中传递一个自定义的结构数组指针,让调用者在响应到事件的地方调用该数组指针,自定义数组如下:
typedef struct YSMEMBER 
{
int nOnline; //0-离线;1-上线;
int nStatus; //0-在线;1-在线免打扰
TCHAR pszExtno[10]; // 分机号码
TCHAR pszName[20]; // 名字

}YSMEMBER, *LPYSMEMBER;

之前找了很多资料,都说是用安全数组SAFEARRAY弄成VARIANT指针进行传递,可是在VB中尝试在事件中响应调用该VARIANT指针,结构显示“变量使用了 Visual Basic 不支持的自动化类型”,在JavaScript也是没有效果。
用安全数组,小弟是这样弄的:

void CMyVariantCtrl::ExportMember()
{
YSMEMBER *pMember = NULL;
HRESULT hr;
SAFEARRAY* pSAMember = NULL;
SAFEARRAYBOUND rgbounds = {10,0};


pSAMember = SafeArrayCreate(VT_VARIANT, 1, &rgbounds);// 1为数组的维数
hr = SafeArrayAccessData(pSAMember, reinterpret_cast<PVOID*>(&pMember));

for(int i = 0; i < 10; i++){
pMember[i].nOnline = 1;
pMember[i].nStatus = 2;
_tcscpy(pMember[i].pszExtno, _T("1408"));
_tcscpy(pMember[i].pszName, _T("软件"));
}
hr = SafeArrayUnaccessData(pSAMember);

VARIANT var;
VariantInit(&var);
var.vt = VT_ARRAY|VT_UI1;
var.parray = pSAMember;
FireOnExportMember(10, &var);// 事件原型为FireOnExportMember(long nCount, VARIANT FAR* pVarMember)
VariantClear(&var);
}

网上和书中举例的都是传递简单的几个int型结构,几乎没有传递char或者TCHAR类型的元素,有的说需要在.odl文件加入数组的定义,这些没试过,有弄过ActiveX的高手们,出来帮帮忙吧。

希望大家能帮我解决这个问题,不胜感激,因为无权限发更多分的帖子,如果分数不够的话,我可以再加,高手接分吧!!
...全文

相关推荐

基于springboot+vue的摄影作品社区(项目源码)

基于springboot+vue的摄影作品社区(项目源码) 系统采用前后端分离的 B/S 架构。后端基于 Spring Boot 2.7.2 与 Java 1.8 构建,以 MyBatis-Plus 完成数据访问、PageHelper 实现分页,用 MySQL 8 存储业务数据;身份认证采用 Sa-Token 轻量级框架并整合 JWT 令牌,配合 Redis 实现图形验证码缓存与会话存储;前端使用 Vue 3 与 Naive UI 构建界面,由 Vite 完成构建,看板统计图表基于 ECharts 渲染。系统面向普通用户与管理员两类角色:用户端提供注册登录、作品上传与归档、多条件检索浏览、作品集管理、分类与标签管理、摄影圈专题、回收站、个人设置与公告查看等功能;管理端提供数据看板、用户管理与公告管理等功能。

加辣椒了吗?

Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库.zip

Vue基于springboot的乡村生态旅游平台_k2864o48毕业设计源码数据库

源码论文专家

Python3 datetime时区避坑指南

原生datetime.now()获取本地时间,不带时区属性,属于 naive时间,跨服务器比对会报错。带时区时间使用datetime.astimezone,强制绑定东八区时区。禁止手动加减8小时修改时差,夏令时更新会导致时间错误。时间计算:timedelta直接实现天数、小时增减,无需手动换算秒数。字符串解析使用strptime,格式化使用strftime,格式符号严格区分大小写,%Y四位年份、%y两位年份极易写错。线上时间异常大多源于时区不统一。 yc.ahsalar.com qsvsnks.yihucx.com tongjiang.xilaohan.com lq.aasmile.com xj.banutech.net

2601_97221268

前端开发基于history.js的HTML5与HTML4浏览器兼容方案:单页应用无刷新历史状态管理技术实现-jcbbroJ3l1792421687

内容概要:本文系统介绍了如何利用history.js实现单页应用(SPA)在HTML5c与HTML4浏览器间s草错发的无缝历史状态管理。通过封装原生History API并在不支持的浏览器中自动降级为哈希路由,history.js解决了因浏览器兼容性导致的后退按钮失效、URL混乱等问题。文章详细讲解了其核心机制,包括状态对象管理、自动模式切换(HTML5 pushState vs HTML4 哈希)、状态数据持久化以及针,对Safari、IE等浏\览器的兼容性修复方案,并提供了从入门到实战的完整示例,涵盖初始化、事,件监听、页面加载及性能优化技巧。;jcbbroJ3l1792421687 www.kfshiye.com www.wap.kfstjx.com www.kuaicai-mro.com lianyingjs.com www.kdd888.com

2601_97196180

MATLAB实现了约束感知混合水波和灰狼优化,用于作物规划。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

海神之光
评论 22
收藏 已收藏
分享
返回顶部
BruceLin2008
ATL 3,248 成员 48,530 内容