【发布时间】:2011-01-27 17:36:18
【问题描述】:
注意:这篇文章代表了我询问的问题 #2。在两个问题中重复介绍部分(直到达到数字为止的所有文本),因为它是回答问题可能需要的背景信息。
问题简介
我有一个非托管 C++ 库,其中包含几个“更高级别”库共有的类和函数。我现在需要为 C#/.Net 应用程序提供对公共库的访问权限。为此,我必须使用 C++/CLI 包装类来包装公共库。
公共库中包含的类可以是包含嵌套类定义和成员变量的复杂类,这些成员变量是其他类对象的集合。集合变量是用于管理集合的自定义列表类的 typedef 实例。公共库还包括表示使用 FLEX/BISON 创建的自定义脚本文件语法的解析结构的类。公共库和“更高级别”库都以允许跨平台(Linux 和 GCC)编译和使用的方式编写。我所做的任何更改都必须允许这样做。
C++/CLI 包装类最初只需要读取能力。但随着项目的推进,我最终也需要能够创建和修改对象。
我了解 C++/CLI,并为其他非托管 C/C++ 项目创建了多个包装器,并为同一个通用库提供了抽象功能。所以我已经掌握了基础知识(和一些高级知识)。
我有两个与执行此任务相关的问题,因为它们都可以产生自己的讨论和解决方案,所以我将我的问题分成不同的帖子。我将在每个帖子中包含指向另一个问题的链接。
实际问题
Wrapping an Unmanaged C++ Class Library with C++/CLI - Question 1 - Project/Code Organization
-
如何有效地包装/处理非托管类中的集合变量?
集合对象是自定义模板列表类 (
CObjectList<T>) 的 typedef,用于处理对象指针集合的管理。集合类提供所有基本的集合功能以及指针管理和解构时对象的清理/释放。所以对于CWidget,代码中会有一个typedef CObjectList<CWidget> CWidgetList;。代码和集合类模板参数中使用的大部分类都是类本身。但在某些情况下,该集合属于基类。这发生在自定义脚本 FLEX/BISON 解析器的解析结构中。例如,所有其他可用命令都继承自
CCommand类。所以会有CSetCommand、CPrintCommand、CIfCommand等。我认为为了做到这一点,我必须创建我的集合包装类,该类为非托管类和 C++/CLI 类维护单独的列表。内部集合对象将管理非托管对象,并且必须有一个托管集合/列表对象来存储项目的包装类。
有没有人可以提供有关如何执行此操作的示例/建议?或者如何编写一个可以同时接受非托管和 C++/CLI 类类型作为参数的泛型类?
【问题讨论】:
-
你应该编辑你的original question(尤其是因为它没有答案)而不是重新发布。
-
什么意思?数字项目是问题。前面的内容是正确回答问题可能需要知道的背景信息。他们都在 5 分钟内发布。
-
您可能想让两个不同问题的标题“更加不同”。为了避免它显示为转发。
-
啊。我明白你的意思了。我认为标题的名称更具层次性。
标签: .net visual-c++ collections c++-cli wrapper