1

我目前正在处理一些调用自定义、本机 dll 的 C# 代码。将数据封送回 C# 时,我需要明确对齐用于封送处理的类/结构的字段。由于对 marshaler 及其规则的不完全理解,我遇到了许多问题。例如,我最近通过一个 SO 问题发现封送拆收器要求数组是 DWORD 对齐的。如果我早点知道这一点,它会省去我的一些头痛。

我的问题有两个:

1) 提供此类信息的编组器是否有任何好的文档?

2) 我应该注意哪些其他类似的限制?(例如,是否所有 DWORD 大小的字段都必须是 DWORD 对齐的)?

4

2 回答 2

2

有一个有用的工具可以为给定的库生成 pinvoke 签名。它有 win32 api 的快捷方式,但你可以传入你自己的文件。

pinvoke 互操作助手

我不确定它对理解映射有多大帮助,但至少它可以为您提供工作示例。我已经用它为我们的一些本机代码生成了一个 C# 接口,它运行良好。

codeplex 站点似乎也有一些有用的诊断工具,我将放弃这些工具。

于 2009-08-20T13:53:11.497 回答
1

http://pinvoke.net有很多很好的信息,包括许多(大多数?)库存 win32 函数以及许多其他函数的精确编组说明。它是基于 wiki 的,因此当您发现新库或现有库的故障时,您可以添加它们。

于 2009-08-20T13:06:06.573 回答