c# - 需要 RegisterWindowMessage 和 SendMessage 从 c++ 到 c# 的帮助

标签 c# c++ pinvoke

我在 C# 中有这段代码:

[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern uint RegisterWindowMessage(string lpProcName);

[DllImport("user32.dll")]
private static extern IntPtr SendMessage(
   IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

我需要将其从 C++ 转换为 C#:

UINT UWM_UART_CTRL_TRS = ::RegisterWindowMessage(_T("BT_UARTCTRL_TRANSFER"));
::SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, 0, 0);

还有这个:

UINT UWM_UART_CTRL_TRS = ::RegisterWindowMessage(_T("BT_UARTCTRL_TRANSFER"));
::SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, 1, 0);

提前致谢

最佳答案

应该很简单。您需要在包含它们的类中将 PInvoke 定义更改为 public:

public class Win32Api
{
   [DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
   public static extern uint RegisterWindowMessage(string lpString);

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

然后对于调用,它们看起来像这样:

uint UWM_UART_CTRL_TRS = Win32Api.RegisterWindowMessage("BT_UARTCTRL_TRANSFER");
Win32Api.SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, (IntPtr)0, (IntPtr)0);

还有这个:

uint UWM_UART_CTRL_TRS = Win32Api.RegisterWindowMessage("BT_UARTCTRL_TRANSFER");
Win32Api.SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, (IntPtr)1, (IntPtr)0);

关于c# - 需要 RegisterWindowMessage 和 SendMessage 从 c++ 到 c# 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7284974/

相关文章:

c++ - Linux 上的 .NET Core - 编码(marshal)结构

c# - 用于指定属性或字段的显示格式的属性

c++ - C++中的递归(生成二进制代码)

c++ - XCode5 使用 iPhone 进行开发

c++ - 使用从 0 开始的值初始化 long long 会导致奇怪的值

c# - setforegroundwindow setactivewindow 有什么区别(pinvoke)?

c# - 如何使用选择框扩展身份用户属性

c# - 将 List 拆分为 N 大小的较小列表

c# - HttpClient post 在 c# 中返回错误的请求,在 postman 中工作

.net - C#如何在不编码对象的情况下将对象固定在内存中?