我正在用 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/