如何将这两个非托管结构转换为托管类型?

时间:2013-02-14 19:40:20

标签: c# c++-cli

我的c ++名称空间中的第一个是

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

我不知道在管理

时应该变成什么样的空虚*

第二个是

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项目中。 谢谢, SB

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果你要转向c#所有类在功能上都与指针相同。它们几乎以相同的方式运行,因为它们可以指向一个类或null

void*有点棘手。这可以指向任何事物。在c#中,所有对象都从基类object类继承。所以用void*替换所有object并且你应该没问题,因为你需要一个强制转换来从虚空*和对象中取出。

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