我获得了第三方库,它将非托管C ++代码包装到C#api中,其中一个函数有一个参数,它看起来是来自本地全局命名空间的结构,我们如何在C#中创建该结构的实例?
这是c ++ Struct:
struct GroupInfo
{
int cMembers; // Current # of members in the group.
char saMembers[cMaxMembers][cMaxLoginID + 1]; // Members themselves.
};
当我们尝试在C#中声明它的实例时,编译器认为global :: GroupInfo由于其保护级别而不可用。
c ++签名
int QueryGroup(char* sGroupName,
GroupInfo& gi);
C#签名
VMIManaged.QueryGroup(sbyte*, GroupInfo*)
我有一个名为组信息的课程
class GroupInfo
{
public int cMembers;
public sbyte[,] saMembers;
}
当我尝试使用此代码实现它时,我得到一个无法转换错误
GroupInfo gi = new GroupInfo();
unsafe
{
sbyte* grpName;
fixed (byte* p = groupNameBytes)
{
grpName = (sbyte*)p;
}
return vmi.QueryGroup(grpName, gi); // cannot convert from class GroupInfo to GroupInfo*
}
答案 0 :(得分:2)
由于GroupData类的C#中默认构造函数的默认保护级别,您很可能会收到错误。如果它是在与您尝试使用它的文件不同的文件中定义的,那么定义它应该有效:
class GroupInfo
{
public GroupInfo() {}
public int cMembers;
public sbyte saMembers[cMaxMembers][cMaxLoginID + 1];
};