可能是一个菜鸟问题,但互操作不是我的优点之一.
除了限制重载次数之外,有任何理由我应该声明我的DllImports:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);
Run Code Online (Sandbox Code Playgroud)
并像这样使用它们:
IntPtr lParam = Marshal.AllocCoTaskMem(Marshal.SizeOf(formatrange));
Marshal.StructureToPtr(formatrange, lParam, false);
int returnValue = User32.SendMessage(_RichTextBox.Handle, ApiConstants.EM_FORMATRANGE, wParam, lParam);
Marshal.FreeCoTaskMem(lParam);
Run Code Online (Sandbox Code Playgroud)
而不是创建目标重载:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref FORMATRANGE lParam);
Run Code Online (Sandbox Code Playgroud)
使用它像:
FORMATRANGE lParam = new FORMATRANGE();
int returnValue = User32.SendMessage(_RichTextBox.Handle, ApiConstants.EM_FORMATRANGE, wParam, ref lParam);
Run Code Online (Sandbox Code Playgroud)
by ref重载最终更容易使用,但我想知道是否存在我不知道的缺点.
编辑:
到目前为止,有很多很棒的信息.
@P爸爸:你有一个基于抽象(或任何)类的结构类的例子吗?我将签名改为:
[DllImport("user32.dll", SetLastError = true)]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, [In, …Run Code Online (Sandbox Code Playgroud)