在C#中使用Windows API调用是否有任何危险?

时间:2015-06-01 14:01:05

标签: c# unmanaged sendmessage

我想为文本框添加水印,并找到了几种不同的方法,但我喜欢使用SendMessage和外部DLL。但是,我想我听说过这样做会导致BSOD,因为它没有被管理。这是真的,还是只是听到 - 说。

http://vidmar.net/weblog/archive/2008/11/05/watermarked-textbox-in-windows-forms-on-.net.aspx

private const uint ECM_FIRST = 0x1500;
private const uint EM_SETCUEBANNER = ECM_FIRST + 1;

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);

1 个答案:

答案 0 :(得分:0)

简短的回答是否定的。它不会导致BSOD,虽然它可能会导致程序崩溃。

WinForms基本上是建立在Windows API调用之上的,所以如果做得好,自定义API调用也应该运行良好。

要记住的另一件事是,如果您确实调用了Windows API,它可能会产生可移植性问题,例如移植到Mono时,因为这些DLL很可能无法使用。