【发布时间】:2017-11-13 00:28:20
【问题描述】:
我遇到了这个功能:
DWORD WINAPI GetWindowThreadProcessId(
_In_ HWND hWnd,
_Out_opt_ LPDWORD lpdwProcessId
);
GetWindowThreadProcessId:
hWnd [in](窗口把手)lpdwProcessId[输出,可选]返回:
DWORD。
这是一个将窗口句柄和指针作为输入的函数。
当它返回时,*pointer 保存了 hWnd 所属进程的 PID。
返回值为hWnd所属线程的TID。
是什么让 MS 工程师选择将 TID 作为返回值返回,并将 PID 作为参数写入给定的地址?为什么不反过来呢?返回 PID 并写入 TID?为什么不在指向包含 struct{TID,PID} 的结构的指针中返回两者?
是什么支配了这些选择?这背后有逻辑吗?
【问题讨论】:
-
对这个问题的任何回答都是一种意见,除非做出这个决定的团队中的真正的 MS 工程师碰巧看到了帖子并回答了它。这里没有人可以推测为什么代码是由那个团队设计的。
-
效率目的:返回结构体的效率低于返回值并修改指针传递的单个变量。函数的返回值可以直接放入寄存器,而返回的结构体不能。