1

我想创建一个图片结构,其中一些属性将是图片的路径和图片的位图。问题是,当我添加这些属性时,它会在红色下划线变量名并说

A member of a non-managed class cannot be handled.

是否有某种解决方法?这是我的代码:

typedef struct{
    System::String^ Path;
    BitMap^ image;

}Picture

我知道我可以使用 char* 作为路径,但出于其他原因,我选择使用String^.

4

2 回答 2

2

您不能直接将托管引用嵌入到本机类型中。

您将它们包装到 gcroot 模板中:

typedef struct{
    gcroot<System::String^> Path;
    gcroot<BitMap^> image;
}Picture
于 2013-06-19T19:57:17.907 回答
0

它不起作用,因为您typedef声明了一个本机结构(以及为什么首先typedef struct在 C++ 中使用? struct Whatever同样有效,但这既不是这里也不是那里。)

ref struct MyStruct {}

声明一个 managed struct,尽管它与 C# 不同struct。您还可以使用:

value struct MyStruct {}
// or
value class MyStruct {}

对于 C# 等效项。C++/CLI 程序中的结构/类差异类似于 C++ 结构/类差异,而不是 C# 结构/类差异。重要的是refandvalue修饰符。

于 2013-06-19T19:56:58.523 回答