Pet*_*ger 1 c# c++ macros messaging
我正在用C#转换一个C++应用程序,并设法通过大部分工作.但是我坚持以下声明:
#define GET_SHCALL_ID(L) (((L) >> 24) & 0x000000FF)
Run Code Online (Sandbox Code Playgroud)
它由应用程序的另一部分调用,它接收一个Window消息,并将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);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
考虑32位整数由4个八位字节(字节)组成:
zzyyxxww
0x12345678
Run Code Online (Sandbox Code Playgroud)
该操作提取"zz"(0x12)字节.
但那只是实施.用法显然是写在名字GET_SHCALL_ID -它获得 S中的SH玉珠呼叫 ID从lParam.
C#和C++共享许多运算符,在这种情况下函数是一样的.
uint GET_SHCALL_ID(uint lParam) { return (lParam >> 24) & 0xFF; }
Run Code Online (Sandbox Code Playgroud)