3

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

namespace Wrapper {

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

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

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

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

 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;
  }

但是,该“名称”字段在 c# intellisense 中不可见,并且无法编译。有趣的是我去看了c++元数据中结构的定义,结构是空白的..

using System;
using System.Runtime.CompilerServices;

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

这正常吗?那么问题来了:为什么c#看不到public struct Maxs的字段呢?为什么元数据信息显示一个空白结构?谢谢。

4

1 回答 1

1

这是AFAIK的正确答案:

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

于 2013-05-10T18:55:11.563 回答