1

代わりに LPCTSTR を使用し、LPstr 変換で呼び出すように DllImport を設定することで、CString を必要とするメソッドを PInvoke する方法を知っています。

ただし、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 に答える