2

我想使用 C++/CX 语法编写一个库并在其他项目中使用它。

如您所知,普通的旧数据结构不能有任何方法或运算符,因此我们必须做一些事情,例如在另一个类中编写静态方法来提供行为。

我们也不能这样写代码:

private:
    int _D;
public:
    property int& D { int& get() {return _D;}}

或将此属性传递给这样的方法:

void SampleMethod(int& d);

我不知道为什么 Windows 运行时库有这些限制。

如何在 .lib 文件中编译 C++/CX 和 Windows 运行时扩展?或者如何在另一个项目中预编译整个 WRL 项目的代码文件?

4

2 回答 2

4

WinRT 是一种旨在用于跨语言使用的 ABI - 至少是 C++、C#、VB 和 JS。出于这个原因,它提供的构造仅限于可以用这些语言以直接方式表示的内容 - 例如,如果您通过引用返回,C# 代码将如何使用它?

如果您想在 C++ 中编写一个静态库以仅从 C++ 中使用,我的建议是尽可能避免语言扩展,并且仅将它们保留在您必须传递 WinRT 对象的那些地方。在这种情况下,您不会从完整的 C++/CX 中获得任何好处。

于 2011-12-05T17:35:05.127 回答
3

与 C++ 不同,其中“结构”基本上是“所有成员都是公共的类”,在 Windows 运行时中,“结构”是一种值类型。因此,它不能有任何方法,包括属性访问器(值类型不能有方法)。

此外,由于结构是值类型,它们总是按值传递。这意味着将结构传递给方法需要复制结构的内容(值类型意味着每个使用者都在自己的数据类型副本上进行操作)。因此,结构的大小应该相当小(认为“小于 16 字节”)。

如果您需要传递更大的对象,请改用类 - 类通过引用传递,因此可以保存任意数量的数据。

于 2011-12-06T03:57:00.760 回答