【发布时间】:2012-05-11 17:50:00
【问题描述】:
我知道如何通过使用 LPCTSTR 来 PInvoke 一个需要 CString 的方法,并设置 DllImport 以使用 LPstr 转换进行调用。
但是,如果使用 LPARAM 是 IntPtr 的 SendMessage,我该如何处理?
这行得通吗?
[DllImport("user32.dll", CharSet = CharSet.Ansi)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam,
[MarshalAs(UnmanagedType.LPStr)] String lParam);
【问题讨论】:
-
最简单的解决方案是将 LPARAM 声明为
String:-) -
为什么不直接使用IntPtr?
-
@CodyGray 那么创建另一个 DllImport 方法?
-
@scottm 我想我可以编组为本机字节,但我希望 UnmanagedType.LPStr 更简单
-
是的,您可以重载 P/Invoke 签名。你是对的,有一种方法可以通过编组来实现,但这稍微复杂一些。