使用C#中的结构调用C++代码

use*_*915 6 c# c++ struct

我得到了第三方库,它将非托管C++代码包装到C#api中,其中一个函数有一个参数,它看起来是来自本地全局命名空间的结构,我们如何在C#中创建该结构的实例?

这是c ++ Struct:

struct GroupInfo
{
    int                 cMembers;                                           // Current # of members in the group.
    char                saMembers[cMaxMembers][cMaxLoginID + 1];            // Members themselves.
};
Run Code Online (Sandbox Code Playgroud)

当我们尝试在C#中声明它的实例时,编译器说由于其保护级别,global :: GroupInfo不可用.

c ++签名

int QueryGroup(char* sGroupName,
    GroupInfo& gi);
Run Code Online (Sandbox Code Playgroud)

C#签名

VMIManaged.QueryGroup(sbyte*, GroupInfo*)
Run Code Online (Sandbox Code Playgroud)

我有一个叫做组信息的课程

class GroupInfo
{
    public int cMembers;
    public sbyte[,] saMembers;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此代码实现它时,我得到一个无法转换错误

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*
}
Run Code Online (Sandbox Code Playgroud)

mni*_*tic 2

您很可能会因为 GroupData 类的 C# 中默认构造函数的默认保护级别而收到错误。如果它是在与您尝试使用它的文件不同的文件中定义的,则像这样定义它应该可以工作:

class GroupInfo
{
  public GroupInfo() {}
  public int cMembers;
  public sbyte saMembers[cMaxMembers][cMaxLoginID + 1];
};
Run Code Online (Sandbox Code Playgroud)