相关疑难解决方法(0)

.NET Interop IntPtr与ref

可能是一个菜鸟问题,但互操作不是我的优点之一.

除了限制重载次数之外,有任何理由我应该声明我的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)

.net c# winapi interop intptr

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×1

c# ×1

interop ×1

intptr ×1

winapi ×1