ZeroMemory函数给我在windows.h中的错误?

时间:2015-12-14 04:50:50

标签: c windows macos dummy-data

基本上我是在Mac上编程,但是我正在使用包含“windows.h”的学校组中的源代码。

我做了一些研究,显然OSX没有该文件的副本。

我在这里的一个帖子上看到一个答案,说可以制作一个“虚拟”的windows.h文件,只需插入我需要的#includes或函数原型。为此,我刚刚上线并从一些Microsoft目录中获得了我需要的功能。

我继续这样做,一切正常,直到ZeroMemory函数给我错误。

所以,在我的虚拟“windows.h”文件中:

void ZeroMemory([in] PVOID  Destination,[in] SIZE_T Length);

我收到这些错误:

Expected parameter declarator
Use of undeclared identifier 'in'
Expected ')'

现在,我已经搜索了该函数及其错误,并且我一直在寻找一堆代码中只包含这行代码的代码,这实际上并没有多大帮助。

我需要知道的是我从哪里开始?我是否通过创建这个“虚拟”的windows.h文件来做正确的事情?或者还有另一种方法可以使用windows.h吗?

链接我发现使用虚拟windows.h文件的答案是here

我很欣赏所有的意见,所以如果你有任何想法,请把它扔掉!非常感谢大家!

根据评论更改部分代码后:

void ZeroMemory(PVOID  Destination, SIZE_T Length);

我收到这些错误:

Unknown type name PVOID
Unknown type name SIZE_T

我在想可能有一些我缺少的定义,但这些是TYPE名称,所以它们必须来自像Struct这样的东西?如果我错了请纠正我吗? :d

2 个答案:

答案 0 :(得分:0)

如果您的标头有[in]注释,那么您抓取了错误的文件,很可能是IDL文件而不是实际的标头。在标题中,它应该是_In_,这将是一个空宏。在任何情况下,您仍然会遇到问题,因为您会发现SIZE_T之类的定义。除非您想要替换所有依赖项,否则我建议您只使用自己的版本替换调用。对于ZeroMemory(p,s),您应该可以使用memset(p,0,s)轻松替换它。当然,这假设您只在Windows标头中使用了一些简单的功能。如果你正在使用实际的平台特定的东西,如窗口,输入等,那么你可能只需要让一台机器或VM运行Windows。

答案 1 :(得分:0)

Windows平台上的开发人员倾向于陷入非常糟糕的习惯,包括" windows.h"在简单的应用程序中,否则符合标准C或C ++。

最正确的选择是鼓励其他学生/老师?在编写应用程序时仅使用标准c或c ++头文件。这将确保它们不使用任何Windows api特定功能。

当然,您可以创建一个windows.h,并在任何简单的窗口方法中内联(如MooseBoys的答案,ZeroMemory可以通过memset轻松实现),以便能够编译简单的程序而无需更改它们,但迟早一些程序将使用一个没有简单或方便的标准C / C ++或CoreFoundation(在OSX上,等效框架来访问窗口事物)等效的windows api。

相关问题