我正在尝试使用从 NativeWindow 继承的类从我的托管 COM 服务器子类化一个非托管状态栏窗口,并且正在尝试理解如何正确编组 lParam 的内容。
http://msdn.microsoft.com/en-us/library/bb760757%28VS.85%29.aspx说这个 lParam 的内容是 type (LPARAM)(LPINT) aWidths
,这个变量的内容实际上是一个“指向整数数组。”
我想不出一种正确编组的方法。目标是读取 lParam,将我们的值添加到数组中,然后通过base.wndProc(ref m)
.
如果我能做到这一点会很好int[] array = (int[])m.*lParam
,但生活并不是那么简单(而且我不会使用不安全的代码)。我笨拙地试图强迫编组器给我一些东西,Marshal.PtrToStructure()
但我知道这从一开始就注定了,因为 C 数组不是结构,而且我试图制作的结构显然不是 blittable。
现在我们让原始调用通过,然后进行额外的 WinAPI 调用来获取数组,格式化它,然后在状态栏重新绘制之前重新发送它。这运作良好,但还不够好。
有任何想法吗?
谢谢!
汤姆
PS-我在 C# 中如何使用 lParams 时遇到了很多麻烦,文档很混乱:-/