使用C#的结构调用C 代码
Calling C++ Code with a struct from C#
i获得了一个第三方库,将未管理的C 代码包装到C#API中,其中一个函数具有一个参数,该参数似乎是本机全局名称空间的struct,我们如何创建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*)
我有一个名为group info
的课程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类中默认构造函数的默认保护级别而遇到错误。如果它与您尝试使用的文件不同的文件中定义了它,则可以这样定义它:
class GroupInfo
{
public GroupInfo() {}
public int cMembers;
public sbyte saMembers[cMaxMembers][cMaxLoginID + 1];
};
相关文章:
- 函数从唯一代码调用正确的子类方法
- 只允许授权代码调用库中的例程
- Android 无法从本机代码调用 Java 方法 JNI
- 如何从反应原生代码调用 C 函数?
- 如何在C++代码中使用 SVM Light?(可能无需从C++代码调用可执行文件)
- 如何从C代码调用PowerShell脚本
- 从 C 代码调用C++函数时出现问题
- 从 ObjC 代码调用 .mm 类方法时编译错误
- 代码调用反向函数不会在Ubuntu 18上的G 或Clang 上编译,但神秘地在Mac OSX上使用
- 如何使用C 代码调用MATLAB自定义函数
- 该代码调用副本或移动构造函数
- 无法在不同类上编译代码调用静态功能
- 如何从可从C++代码调用的 Ada 源代码构建静态库?
- 从 CPP 代码调用 Objective-C 方法
- 如何从C++代码调用 PL/pgSQL 函数
- C++如何判断static.lib是否有效,是否可从外部代码调用
- 当C代码调用Fortran子程序时,子程序顶部会出现分段错误
- JavaScript:从浏览器和 Node.js 中的 JavaScript 代码调用C++库
- C#到C代码P/调用多个std:字符串声明导致堆栈损坏
- 使用 Visual Studio 从C++代码调用程序集过程