递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 93|回复: 0
打印 上一主题 下一主题

[视窗] 【求助】COM封装翻译

[复制链接]

5

主题

10

帖子

209

积分

中级会员

Rank: 3Rank: 3

积分
209
跳转到指定楼层
楼主
一开始只是想封装Illustrator的。然后看到了COM对象有个查看接口的方法,就做了个从接口窗口复制COM代码再翻译到中文的功能。但每次复制粘贴太麻烦了,逛论坛时才知道工具菜单下有个COM封装器,所以又做成翻译火山代码。发现使用 寻找文本 竟然找不到"<"(207行),于是就想着自己解释COM接口。所以代码有些乱。 Illustrator.zip (542.01 KB, 下载次数: 1)

请教各位大佬以下代码是结构(876行)声明有问题,还是双星指针的代码(1020行)有问题呢?
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 类 TLIBATTR结构体2 <基础类 = 结构基础类 折叠>
  3. {

  4.     # @ @m<DECLARE_STRUCT_CLASS> (TLIBATTR)

  5.     方法 类型标识 <公开 属性读 类型 = GUID类>
  6.     {
  7.         变量 GUID <类型 = GUID类>
  8.         @ @<GUID>.m_guid = pdata()->guid;
  9.         返回 (GUID)
  10.     }

  11.     方法 硬件平台 <公开 属性读 类型 = 变整数 注释 = "SYSKIND syskind; 目标硬件平台。" @嵌入式方法 = "">
  12.     {
  13.         @ (INT_P)(@sn<this>.pdata()->syskind)
  14.     }

  15.     方法 主版本号 <公开 属性读 类型 = 短整数 注释 = "WORD wMajorVerNum; 主版本号" @嵌入式方法 = "">
  16.     {
  17.         @ @sn<this>.pdata()->wMajorVerNum
  18.     }

  19.     方法 次版本号 <公开 属性读 类型 = 短整数 注释 = "WORD wMinorVerNum; 次版本号" @嵌入式方法 = "">
  20.     {
  21.         @ @sn<this>.pdata()->wMinorVerNum
  22.     }

  23.     #
  24. }

  25. 类 TLIBATTR结构体 <注释 = "https://learn.microsoft.com/zh-cn/windows/win32/api/oaidl/ns-oaidl-tlibattr" 折叠
  26.         折叠2 @别名 = "TLIBATTR" @别名类型 = 本地类 @视窗.结构类 = 0>
  27. {
  28.     变量 类型标识 <公开 类型 = "字节 [16]" 注释 = "GUID    guid;         类型信息的 GUID" @输出名 = "guid">
  29.     变量 区域标识 <公开 类型 = 短整数 注释 = "LCID    lcid;         成员名称和文档字符串的区域设置" @输出名 = "lcid">
  30.     变量 硬件平台 <公开 类型 = 变整数 注释 = "SYSKIND syskind;      目标硬件平台。" @输出名 = "syskind">
  31.     变量 主版本号 <公开 类型 = 短整数 注释 = "WORD    wMajorVerNum; 主版本号。" @输出名 = "wMajorVerNum">
  32.     变量 次版本号 <公开 类型 = 短整数 注释 = "WORD    wMinorVerNum; 次版本号。" @输出名 = "wMinorVerNum">
  33.     变量 库标志 <公开 类型 = 短整数 注释 = "WORD    wLibFlags;    库标志。" @输出名 = "wLibFlags">
  34. }

  35. <火山程序 类型 = "通常" 版本 = 1 />

  36. 方法 获取库属性 <公开 类型 = 逻辑型
  37.         注释 = "https://learn.microsoft.com/zh-cn/windows/win32/api/oaidl/nf-oaidl-itypelib-getlibattr"
  38.         返回值注释 = "成功返回假,失败返回真" 折叠>
  39. 参数 TLIBATTR结构 <类型 = TLIBATTR结构体>
  40. {
  41.     变量 结构地址 <类型 = 变整数>
  42.     结构地址 = 取变量地址 (TLIBATTR结构)
  43.     调试输出 (当前时间 (), 取源行号 (), 取源类名 (), 取源方法名 (), 结构地址)
  44.     @ hresult = iTypeLib->GetLibAttr((TLIBATTR**)&@<结构地址>);
  45.     返回 (执行失败)
  46. }

  47. 方法 释放库属性 <公开
  48.         注释 = "https://learn.microsoft.com/zh-cn/windows/win32/api/oaidl/nf-oaidl-itypelib-releasetlibattr">
  49. 参数 TLIBATTR结构 <类型 = TLIBATTR结构体>
  50. {
  51.     变量 结构地址 <类型 = 变整数>
  52.     结构地址 = 取变量地址 (TLIBATTR结构)
  53.     调试输出 (当前时间 (), 取源行号 (), 取源类名 (), 取源方法名 (), 结构地址)
  54.     @ iTypeLib->ReleaseTLibAttr((TLIBATTR*)&@<TLIBATTR结构>);

  55. }
复制代码
运行后报以下错误:
  1. 错误: 接收到未经处理的严重异常,代码为: 0xC0000374
  2. 被调试程序已经退出,退出码为0xC0000374.
复制代码

另外请教要如何自定义调试数据格式呢?尝试了以下都不成功(405行),或者 取当前语句位置() 中的文件名改为无路径文件名也可以。
  1. <火山程序 类型 = "通常" 版本 = 1 />

  2. 方法 调试信息 <公开 静态 类型 = 文本型 注释 = "行号 类名 方法" @嵌入式方法 = "">
  3. {
  4.     @  _CT(@sn<current_source_line>) + @sn<nbsp> + _CT(@sn<current_source_class>) + _CT(@sn<current_source_method>)
  5. }

  6. 方法 "//调试" <公开 静态 @嵌入式方法 = "">
  7. 参数 被调试数据 <@匹配类型 = 通用型 @可扩展 = "">
  8. {
  9.     // 调试输出 (当前时间 (), 取源行号 (), 取源类名 (), 取源方法名 (),被调试数据)
  10.     @ _DEBUG_STATMENT (DebugTrace (FALSE, 0, 0, _T (@sn<pm_types>),@<当前时间>(),_CT (@sn<current_source_line>),_CT (@sn<current_source_class>),_CT (@sn<current_source_method>), @<被调试数据>))
  11.     // 取源行号() = @ _CT (@sn<current_source_line>)
  12.     // 取源类名() = @ _CT (@sn<current_source_class>)
  13.     // 取源方法名() = @ _CT (@sn<current_source_method>)

  14. }
复制代码

4fa53f0f2fd04c7ea5f9871e9e839fc4.jpg (34.31 KB, 下载次数: 0)

4fa53f0f2fd04c7ea5f9871e9e839fc4.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2026-1-17 18:33 , Processed in 0.090625 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表