【问题标题】:CLR C++ VS C++ (pstsdk)CLR C++ 与 C++ (pstsdk)
【发布时间】:2011-06-03 01:38:45
【问题描述】:

考虑到 Simon Mourier 对这个问题的回答:
Processing Microsoft Office Outlook 2003/2007 email messages…

我打算使用用 C++ 编写的PST File Format SDK

我会借此机会了解更多关于 C++ 的知识并更新它,因为距离我上次使用它已经 15 年了。我已经下载并配置了Boost 1.45,这是使用pstsdk所必需的。

现在,我正在使用 CLR C++ 编写一个 Windows 窗体应用程序,并计划使用 pstsdk 来读取 PST 文件。

我同时使用 CLR C++ 和纯 C++ 有什么关系吗?

我应该考虑以不同的方式使用它,还是这样可以吗?

【问题讨论】:

  • 不知道重点是什么,C++/CLI 是一种不同的语言,它不是 C++。但是,是的,它将编译到 IL。有问题时回帖。
  • 事实上,我不知道任何支持 Windows 窗体的 C++,除了 Win32,它实际上是 C。此外,pstsdk 是一个原生 C++ 库,所以我认为我应该做一个 C++ Windows Forms 应用程序,同时使用pstsdk,所以我会为尝试使pstsdk 库在.NET 中工作而头疼,我认为这是完全不可行的。然后,我提出了这个混合托管和非托管 C++ 解决方案。

标签: c++ visual-studio-2010 visual-c++ c++-cli clr


【解决方案1】:

如果您想使用 .NET(Windows 窗体,甚至可能是较新的 WPF)用户界面,最简单的方法是在 C++/CLI 中构建对象模型,根据本机代码实现,但具有 . NET 接口。

然后用 C# 编写 UI 并调用 C++/CLI 对象模型(这与使用 .NET 基类库仅在一种方式上不同——您必须添加对 C++/CLI 程序集的引用...但是C++/CLI 编译器将创建 C# 使用的所有元数据)。

【讨论】:

  • 请原谅我的无知,但我该怎么做呢?我的意思是,我创建了一个将 C++ 指定为语言的 Windows 窗体。我包含了来自pstsdk 库的pst.h 头文件。我只使用 .NET,因为这是我所知道的唯一足以构建 Windows 应用程序的东西。在编写 Windows GUI 时,我不知道要创建什么样的项目才能原生 C++。出于这个原因,我想到了 .NET。此外,我不介意不使用 .NET,因为这会进一步推动我对 C++ 的学习。尽管如此,能够通过 .NET C# GUI 访问 C++/CLI 看起来很有趣
  • 简而言之,您创建一个“.NET 类库 (C++)”项目并确保它有一些公共 ref classes。然后创建“.NET Windows Forms Application (C#)”并添加对 C++/CLI 项目的引用。
【解决方案2】:

您可以mix managed and unmanaged code,但是跨边界编组除内置类型之外的所有内容会很痛苦。使用更强大的非托管 C++ 更容易。例如,您可以使用 CodeGear C++ Builder(或 QT)。 CodeGear 的问题是编译器不是很好,所以你不能从 Boost 编译所有东西,但你可能不需要。

【讨论】:

  • +1 提供了一些链接,展示了如何完全使用托管和非托管代码。
【解决方案3】:

C++/CLI 旨在与非托管 C++ 互操作——这几乎就是它的全部目的。但是,我觉得如果您需要 .NET 来实现 WPF(这是一项出色的技术)并且只需使用 C++/CLI 进行互操作,那么用 C# 编写可能会更容易。

【讨论】:

  • 如果我想在我的 C# GUI 代码中使用pstsdk 库和boost 1.45,因为pstsdk 需要它怎么办?添加引用或其他内容就足够了吗?实际上,如何在 C# 中引用 pstsdk 这样的库,因为它是一个使用 boost 的头库,并且没有生成任何 DLL?
  • p/invoke 对于像 boost 这样的模板繁重的 API 绝对不是一个可行的选择。 C++ 互操作是从 .NET 使用这些东西的唯一方法,当然用 C++(非 .NET)编写整个应用程序也是一种可能。
猜你喜欢
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多