我的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
答案 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
};