| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 刀与剑-COM返回数组 -> 正文阅读 |
|
[游戏开发]刀与剑-COM返回数组 |
????????COM明明是一种编程思想,是一门绝世武功。可时代忽然迈入火器,无数人抛弃掉这晦涩难懂的绝世武功,转身投入速成的技艺时代。 ????????“很多不懂 com 的C++程序员会自行发明一个 com 的子集,而且是蹩脚的多的子集。可惜的是,刀与剑的时代结束了,火器时代,掌握 com 这类武功已经没用了。” ---知乎网友 关于使用COM接口返回数组????????COM处理了未知语言在COM客户之间传递数组,没错。但是这个并不是什么GO之流,而是C#、VB、Delphi、asp之流甚至于py等。它模糊了语言的边界,那模糊边界自然有一个重要的前提,那就是简单易用,否则都是扯犊子。 ? ? ? ? 而Com所支持的类型其中一种十分重要的即是VARIANT?,而其中有一个很重要的类型即是SAFEARRAY?这便是安全数组类型,该类型其实就是对数组进行了一些描述如起始,边界等,但是该类型又可以修饰VARIANT?为元素的数组,简直是互相套娃无穷尽也。 ? ? ? ? 去百度一搜,好家伙。一来就是SAFEARRAY 和 SAFEARRAYBOUND?。好家伙,这TM,你管这叫简单易用?我真滴服了,而且里面的内容弯弯绕绕,晦涩难懂,这些人写的都是什么博客,互相抄互相爬,感觉像在垃圾堆里找吃的。 COM传递数组涉及结构SAFEARRAYBOUND:? ? ? ??指示数组维数,简单来说,一维、2维甚至多维数组。因此在传递多维数组时需要一个结构描述其维度。 ? ? ? ? 结构:
SAFEARRAY:????????用来实际指示数组(因为这玩意不是简简单单的指针,用指示一词),涉及的数组的操作函数的参数主体就是它 ? ? ? ? 结构:
? ? ? ? 主要函数:
? ? ?用法可参考:https://blog.csdn.net/weikangc/article/details/45745551 ????????? 注意事项: ? ? ? ? ? ? ? ? 1、在堆上创建数组 ? ? ? ? ? ? ? ? 2、一方创建、另一方回收 ? ? ? ? ? ? ? ? 3、接收方不能修改数组,只能读取和销毁 上面说的,全是垃圾? ? ? ? 按上面这么用,初始化一个数组填值都得写几十行。我只能称之为“垃圾” ? ? ? ? 而百度去搜索的,大多数都是教你这么用,我简直了 ????????解决办法? ? ? ??CComSafeArray 类和?CComSafeArrayBound?类。 ? ? ? ? ? ? ? ? 天不生这C++,万古图灵如长夜。 ? ? ? ? 这两个类是SAFEARRAY和SAFEARRAYBOUND?结构的装饰模板类,用c++的类可以十分方便的去完成数组的创建,描述,设值,传出。 ? ? ? ? 上代码:? ? ? ? 一维数组创建:
? ? ? ? 多维数组创建:
? ? ? ? 数组设值和取值:
? ? ? ?获得外部数组值:
? ? ? ? 传出数组:
? ? ? ? 多维数组使用实例
? ? ? ??operator []操作符:(一维可用)
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:49:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |