我正在用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获取电击 call ID。

    C#和C++共享许多运算符,在这种情况下,功能是相同的。
    uint GET_SHCALL_ID(uint lParam) { return (lParam >> 24) & 0xFF; }
    

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

    10-11 21:51