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

标签 c# c++ struct

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

这是 C++ 结构:

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

最佳答案

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

class GroupInfo
{
  public GroupInfo() {}
  public int cMembers;
  public sbyte saMembers[cMaxMembers][cMaxLoginID + 1];
};

关于c# - 使用 C# 中的结构调用 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47583424/

相关文章:

c# - DataSet 不会在新表中生成更新命令

c# - 在 Linq-SQL 查询上添加不确定数量的 AND?

c - 如何让 SWIG 自动将模拟的 "this"指针包装到 C 结构?

c - 在 C 中将 malloc 与结构体和指针一起使用

c# - 创建一个将一种类型的函数转换为另一种类型的函数

c# - Environment.UserName 在 Windows 7、Windows 8.x 和 Windows 10 中会返回相同的结果吗?

c# - 设备和模拟器上的 UWP 异常

c++ - 声明 const 成员函数的语法返回一个裸函数指针,没有 typedefs?

C++ 模板 : create an object of a typename same as of an existing object

c - 节点创建 C