gpt4 book ai didi

c# - 从 C header 自动创建 C# 包装器?

转载 作者:可可西里 更新时间:2023-11-01 03:01:42 26 4
gpt4 key购买 nike

有没有办法从 c header 自动为 .net 创建 p/invoke 包装器?

当然我可以手动创建它们,但维护它们会很痛苦,而且我可能会在某处犯错误导致难以调试崩溃。

我尝试了 SWIG,但它创建了完整的类,其中简单的结构就足够了。SWIG 的另一个问题是它需要在 c 端添加额外的互操作代码。

我希望输出也能在单声道上工作,但这不是必需的。

我可以使用的另一件事是一个程序,它解析 c header ,并以一种很好的中间格式(如 xml)创建输出,我可以从中自己创建 C# 包装器。

编辑:
PInvoke 互操作助手正是我所需要的。
不过它有一些小问题:
* 它将“unsigned char*”翻译成字符串,我更喜欢 IntPtr
* 假定 size_t=int=long=32bit。这目前对我来说是正确的,但可能不适用于每个平台。
有没有一种干净的方法来解决这个问题?否则我会在转换之前对 c 代码使用一些查找和替换。

最佳答案

PInvoke Interop Assistant应该更适合您,它专门设计用于处理 C 代码。

请注意,没有任何工具可以为您提供 100% 有保证的解决方案,C 声明方式过于模棱两可,无法保证完全无故障的结果。指针引起的麻烦,在C代码中无处不在。无法判断指针用于读取或写入内存。或两者。或者谁负责释放指向的内存。

这也是静态代码分析器的一个主要问题,如果他们不知道如何使用指针,他们就无法做好工作。他们只能从用法中推断出来,但这是先有鸡还是先有蛋的问题,用法可能是错误的。微软用 SAL annotations 在他们自己的 header 中解决了这个问题。 ,对编译器来说是中立的但可以被代码分析器解析的额外标记。它们明确说明了指针的预期用途。

也被 Pinvoke Interop Assistant 使用,这就是为什么它可以在 winapi 声明上做得更好的原因。但这当然只适用于 Microsoft header ,忙碌的 C 程序员编写的代码通常缺少这些 SAL 注释。

关于c# - 从 C header 自动创建 C# 包装器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2517557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com