-1

我的 C++ 命名空间中的第一个是

      public struct channel_vars {
      int fetch_data;    /* Boolean flag */
      void * data;       /* (malloc'd) address of data */
      unsigned int lines;    /* Number of lines returned */
}

我不知道 void* 在管理时应该变成什么

第二个是

public struct hdf_call_vars_t {
 struct channel_vars p_vars;
   struct channel_vars s_vars; 
  enum FILE_VERSION file_vers;   /* Set in top level sub. used in lower */
  int fetch_n;    /* Boolean flag */
  s_line_header_t * n_addr; /* malloc'd address of ndata */
  unsigned int n_lines;
  csdt_file_header_t hdr;   
};

在上面的一个中, s_line_header_t 本身就是一个结构,它由双精度和整数组成,另一个结构也由整数等基本类型组成。

由于托管代码不允许指针,我如何将这些结构转换为托管类型?所有这些代码都在我的 c++ -cli 项目中。谢谢,某人

4

2 回答 2

0

如果您要迁移到 c# 所有类在功能上都与指针相同。它们的操作方式几乎相同,既可以指向一个类,也可以是null

void*有点棘手。这可以指向任何东西。在 c# 中,所有对象都继承自基object类。因此,将所有替换void*object您应该没问题,因为您将需要强制转换才能从 void* 和对象中恢复。

public struct ChannelVars {
      public bool FetchData; 
      public object Data;   
      public uint Lines;    
}

public struct HDFCallVarsT {
      public ChannelVars PVars;
      public ChannelVars SVars; 
      //enum FILE_VERSION file_vers;  //you will need to get the enum set here correctly
      public bool FetchN;
      public SLineHeaderT NAddr; //SLineHeaderT must be a class somewhere
      public uint NLines;
      public CSDTFileHeaderT HDR; //CSDTFileHeaderT must be a class somewhere   
};
于 2013-02-14T19:50:24.837 回答
0

您可以在托管代码中使用 IntPtr 类来映射使用指针的字段

于 2013-02-14T19:49:36.093 回答