【发布时间】:2014-07-03 16:06:38
【问题描述】:
我有一个托管 C++ dll,其中包含以下内容
public value struct StructOuter
{
public:
int m_int_InStructOuter;
};
public ref class ClassContainingStruct : MyBase
{
public:
StructOuter^ m_strucOuter_InClassContainingStruct;
};
从“C#”应用程序中,我尝试访问托管 DLL 的以下内容: 我收到要转换为派生类的基类类型对象 对象如下。
ClassContainingStruct ccs = (ClassContainingStruct)base;
当我尝试打印 ccs 的内容时, ccs.m_strucOuter_InClassContainingStruct 由 Intellisense 向我显示为 ValueType。 这是真的,但如果尝试访问 ValueType 的内容,即 m_int_InStructOuter 即 ccs.m_strucOuter_InClassContainingStruct.m_int_InStructOuter 编译时报如下错误:
错误 1“System.ValueType”不包含“m_int_InStructOuter”的定义,并且找不到接受“System.ValueType”类型的第一个参数的扩展方法“m_int_InStructOuter”(您是否缺少 using 指令或程序集参考?)
当我尝试在 ClassContainingStruct 类的 C# 应用程序上进行定义时 它定义如下(根据元数据):
public class ClassContainingStruct : MyBase
{
public ValueType m_strucOuter_InClassContainingStruct;
....
[HandleProcessCorruptedStateExceptions]
protected override void Dispose(bool value);
}
- 为什么它被称为 ValueType 而不是 StructOuter 类型
- 为什么当我尝试访问 ccs.m_strucOuter_InClassContainingStruct.m_int_InStructOuter 时出现编译错误
【问题讨论】: