可能重复:
__in __out __in_opt __allowed() 的目的是什么,它们是如何工作的?我应该在自己的代码中使用类似的结构吗?
我在下面看到了一个 C 代码:
DWORD GetFileVer(__in LPTSTR FileName, __out LPTSTR lpVersion, __in DWORD nSize)
{
...
}
我试图编译它但失败了。谁能告诉我是什么__in
意思__out
?我咨询了 MSDN,但找不到任何有用的信息。谢谢。
可能重复:
__in __out __in_opt __allowed() 的目的是什么,它们是如何工作的?我应该在自己的代码中使用类似的结构吗?
我在下面看到了一个 C 代码:
DWORD GetFileVer(__in LPTSTR FileName, __out LPTSTR lpVersion, __in DWORD nSize)
{
...
}
我试图编译它但失败了。谁能告诉我是什么__in
意思__out
?我咨询了 MSDN,但找不到任何有用的信息。谢谢。
__in
并且__out
是Microsoft源代码注释语言(SAL ) 的一部分。
通过使用源代码注释,您可以明确代码背后的意图。这些注释还使自动化静态分析工具能够更准确地分析您的代码,显着减少误报和漏报。
Microsoft 工具使用它们来分析代码中的简单错误。您可以在此处查看标题中使用的大多数简单原始注释:
_in
该函数从缓冲区中读取。调用者提供缓冲区并对其进行初始化。
...
_out
该函数写入缓冲区。如果用于返回值或 with
_deref
,则该函数提供缓冲区并对其进行初始化。否则,调用者提供缓冲区并且函数对其进行初始化。
可以在此处阅读更复杂的注释,这是建议 Windows 8 开发人员坚持的内容。
正如詹姆斯指出的那样,您可以只使用预处理器定义来忽略它们:
#define _in
#define _out
... 等等。
他们在那里告诉程序员如何使用参数。__in
表示参数是只读的,即调用者不会看到对它的任何更改,__out
表示参数由函数填充,数据由调用者使用。你可以做
#define __in
#define __out
让你的程序编译。
也阅读文档。