2012-05-11 25 views
1

代わりにLPCTSTRを使用してCStringを必要とするメソッドをPInvokeし、DllImportを設定してLPstr変換を呼び出す方法を知っています。SendMessageを介してC#からMFCに文字列を送信

ただし、LPARAMがIntPtrであるSendMessageではどうすればよいですか?

これは機能しますか?

[DllImport("user32.dll", CharSet = CharSet.Ansi)] 
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, 
     [MarshalAs(UnmanagedType.LPStr)] String lParam); 
+0

最も簡単な解決策は、LPARAMを 'String'として宣言することです:-) –

+0

[IntPtr](http://msdn.microsoft.com/en-us/library/system.intptr.aspx) ? – scottm

+0

@CodyGray別のDllImportメソッドを作成しますか? –

答えて

4

あなたは、このように、単にそれを宣言することができます。

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

デフォルトのマーシャリングは、nullで終わる文字列へのポインタとしてです。 ANSIバージョンが本当に必要な場合は、これがデフォルトです。また、エラーが発生した場合にエラーコードをキャプチャする場合は、SetLastErrorを使用してください。

私は、ウィンドウが別のプロセスにある場合は機能しないことを知っています。

+0

簡単な質問ですが、WndProcが呼び出されると、lParamは常にIntPtrです。 lParamから文字列値をどのように取得しますか? –

+0

'Marshal.PtrToStringAnsi'または' Marshal.PtrToStringUni' –

+0

デーヴィッドに感謝します。私はあなたのソリューションを使用しています。 – Yargicx

関連する問題