我得到了一个将非托管 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/