1

我知道如何通过使用 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);
4

1 回答 1

5

您可以像这样简单地声明它:

[DllImport("user32.dll", SetLastError=true)]
static extern IntPtr SendMessage(
    IntPtr hWnd, uint Msg, IntPtr wParam, string lParam);

默认编组是作为指向以空字符结尾的字符数组的指针。如果您真的想要 ANSI 版本,那么这是默认设置。SetLastError如果您想在失败的情况下捕获错误代码,您应该使用它。

我相信您知道,如果窗口处于不同的进程中,它将无法工作。

于 2012-05-11T18:01:16.147 回答