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

Win*_*ner 19 .net c c# pinvoke interop

有没有办法从ac头自动创建.net的p/invoke包装?

当然我可以手工创建它们,但维护它们会很痛苦,而且我可能在某个地方犯了一个错误,导致很难调试崩溃.

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

我更喜欢输出也适用于单声道,但这不是必需的.

我可以使用的另一件事是一个解析c头的程序,并以一个漂亮的中间格式(如xml)创建一个输出,我可以自己创建C#包装器.

编辑:
PInvoke Interop助手是我需要的.
但它有一些小问题:
*它将"unsigned char*"转换为我更喜欢IntPtr的字符串
*它假设size_t = int = long = 32bit.这对我来说是正确的,但在每个平台上可能都不是这样.
有没有一个干净的方法来解决这个问题?否则我会在转换之前在c代码上使用一些查找和替换.

Han*_*ant 12

的PInvoke互操作助理应该是对你更合适,它是专门设计的C代码工作.

只是要注意,没有工具,让你100%保证的解决方案,C声明的方式过于模糊,以保证完全无故障的结果.由指针引起的麻烦,在C代码中无处不在.没有办法告诉指针用于读取或写入内存.或两者.或谁负责释放正在指向的内存.

对于静态代码分析器来说,这也是一个主要的问题,如果他们不知道如何使用指针,他们就无法做得很好.他们只能从使用中推断它,但这是一个鸡和蛋的问题,使用可能是错误的.Microsoft使用SAL注释在自己的头文件中解决了这个问题,这些额外的标记对编译器来说是中立的,但可以由代码分析器解析.它们明确说明了指针的用途.

Pinvoke Interop助手也使用它,这就是为什么它可以在winapi声明上做得更好.但这当然只适用于Microsoft头文件,这些SAL注释通常在繁忙的C程序员编写的代码中缺失.