c# - 在 C# 中使用(复杂的)C 结构

标签 c# c

我有一些简单的方法和一个基本如下所示的 C struct:

struct A
{
   B* b;
   C* c;
   int d;
}

void createA(A** a);
void freeA(A** a);
int doCrazyStuff(A* a);

在某种程度上,我不关心 C# 代码中的结构。我只想创建 A 的指针并通过 C 方法在 C# 代码中使用此指针。

有没有人给我举个最简单的例子?

最佳答案

您使用的是“不透明”指针……或句柄。您的 C# 程序不知道 A* 是什么,也不想知道它。

您可以像这样直接使用 IntPtr:

void createA(out IntPtr a);
void freeA(ref IntPtr a);
int doCrazyStuff(IntPtr a);

为了类型安全你可以:

[StructLayout(LayoutKind.Sequential)]
public struct MyA
{
    public IntPtr Ptr;
}

void createA(out MyA a);
void freeA(ref MyA a);
int doCrazyStuff(MyA a);

它不会改变任何东西,但如果你有多个不透明的引用,那么你将无法混合它们(如果你有两组方法,一组使用 A* 和另一个使用 B*,第一种“方式”可以混合使用 IntPtr,而第二种则不能)

关于c# - 在 C# 中使用(复杂的)C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29653013/

相关文章:

c - Arduino远程控制-奇怪的串行输出

c - Ubuntu 上 makefile 编译 C 源文件

c# - 从 asp.net web 应用程序打开本地系统上的文本文件

c# - 在 Sitecore 中获取媒体库项目的内容

C# 使用 SHA-1 和 Base64 编码 wsse 安全 password_digest 不匹配服务器 password_digest

我可以排除SIGBUS由 "minor page fault"引发吗? (内核日志没有分配失败)

c - Linux 不允许我访问固定的内存区域

c - C语言数组计算时如何打印带符号的结果

c# - 用于 C# POCO 的简单撤消/重做系统

c# - 清理 .net 中的用户 HTML