我正在用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);
所以我的问题是:
最佳答案
考虑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/