从c#中看不到托管c ++ dll中的公共结构

时间:2013-03-24 02:17:09

标签: c# c++-cli

我有一个c#应用程序。它引用了一个c ++ - cli dll。在c ++ dll的命名空间中,声明了一个公共结构:

namespace Wrapper {

  public struct maxs
  {
     public:
      char Name[255];
      int num;
  };
etc

c ++ dll中有一个函数,它返回一个指向struct的指针。

Wrapper::Maxs** Wrapper::Class1::CallMax();

C#应用程序引用c ++ dll并声明struct的一个实例(不安全的代码)

 Wrapper.Class1 oMax = new Wrapper.Class1()
 Wrapper.Maxs** maxs; 
 maxs= oMax.CallMax();
 int num = oMax.m_num;

然后我尝试访问maxs的字段,如:

for(int i = 0; i < num; ++i)
 {
    name = maxs[i]->name;
  }

然而,那个名字&#39;字段在c#intellisense中不可见,并且不编译。 有趣的是,我在c ++元数据中看到了struct的定义,结构是空白的。

using System;
using System.Runtime.CompilerServices;

namespaceWrapper
{
    [CLSCompliant(false)]
    [NativeCppClass]
    [UnsafeValueType]
    public struct Maxs
    {
    }
}

这是正常的吗? 所以问题是:为什么c#不能看到公共结构Maxs的字段?为什么元数据信息显示空白结构? 感谢。

1 个答案:

答案 0 :(得分:1)

这是AFAIK的正确答案:

因为它不是托管结构。您需要将其声明为公共值结构。 - Hans Passant 3月24日2:33