in char 转换为 char*,但 out char 转换为 char* 吗?

in char translates to char*, but does out char translate to char*?

所以我被告知编译器将带有签名 in char 的参数转换为 char*:

Also, if it's an in, you should not specify the pointer. in makes it a reference type. in float is equivalent to const float*.

这让我开始思考。 out char 也可以翻译成 char* 吗?为什么编译器会这样做?这与 [In][Out] 属性的用法相比如何?

I've been told that the compiler translates parameters with a signature in char to char*

谁告诉你的,都没有很好地说明情况。也许他们试图类比C? C# 引用类似于 C 中的指针,但它们并不相同。更好的类比是 C++ 引用,但它们也不完全相同。与其尝试通过类比另一种语言来理解该功能,不如尝试根据其文档来理解该功能。

正确的思考方式是inoutref都要求形参对应的实参是变量,正式成为变量参数的 别名 。这是您应该考虑的抽象级别。

实际上,inoutref 是通过使用 指向变量 的托管指针实现的。但是,您应该 将此视为char*。这是指向变量的 unmanaged 指针的类型。托管指针有许多不是非托管指针的属性;例如,它们在垃圾收集器压缩区域时非常健壮。例如,您可以创建指向托管类型的托管指针,但不能创建指向托管类型的非托管指针。等等。

Why does the compiler do this?

因为这样做正确地实现了规范。

How does this compare to the usage of [In] and [Out] attributes?

我不明白你想比较的是哪两件事。问题不清楚。

将这些属性用于 COM 互操作。如果您不清楚这些属性的用途,请阅读这些属性的文档。