c# - C++ 这个简单的宏在做什么?

标签 c# c++ macros messaging

我正在用 C# 转换 C++ 应用程序,并设法完成其中的大部分工作。但是我坚持以下声明:

#define GET_SHCALL_ID(L)                           (((L) >> 24) & 0x000000FF)

它由接收窗口消息的应用程序的另一部分调用,并将 lParam 传递给此调用,如下所示:

// We perform and event handling to display state as required here..
LRESULT CShockSampleDlg::OnShockCallEvent(WPARAM wParam, LPARAM lParam)
{
  // Pass events here so that they will be displayed int the m_LogMessages window.
  OnDebugCallEvents(wParam, lParam);

  UINT callID = GET_SHCALL_ID(lParam);
  UINT chanID = GET_SHCHAN_ID(lParam);
  UINT info   = GET_SHCHAN_INFO(lParam);

所以我的问题是:

  • 宏/方法在做什么?
  • C# 中的等价物是什么?

最佳答案

考虑 32 位整数由 4 个八位字节(字节)组成:

  zzyyxxww
0x12345678

该操作提取“zz”(0x12)字节。

但这只是实现。用法清楚地写在名称 GET_SHCALL_ID 中 — 它从 lParam getshock call ID

C# 和 C++ 共享许多运算符,在这种情况下功能完全相同。

uint GET_SHCALL_ID(uint lParam) { return (lParam >> 24) & 0xFF; }

关于c# - C++ 这个简单的宏在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3298309/

相关文章:

c++ - Boost::serialization - 如何序列化需要数据分配但没有默认构造函数的数据结构?

c# - 使用 C# 通过具有嵌入式图像的 Windows 服务发送自动电子邮件

c# - StreamWriter 和 UTF-8 字节顺序标记

c++ - 如何正确使用可变参数模板的引用

c++ - 如何检测关键函数中调用的后台函数

c - C 中的宏问题

macros - Clojure 的宏——定义一个名称由参数组成的绑定(bind)

c - 使用嵌套结构数组进行结构初始化

c# - net5 自包含 exe 缺少一些系统 DLL

c# - 在 form1.cs 和 program.cs 之间传递数据