0

基本上我是在 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 文件的答案的链接在这里

我感谢所有的意见,所以如果你有什么想法,请把它扔掉!非常感谢大家!


根据注释更改一些代码后:

void ZeroMemory(PVOID  Destination, SIZE_T Length);

我收到这些错误:

Unknown type name PVOID
Unknown type name SIZE_T

我在想可能缺少一些定义,但这些是 TYPE 名称,所以它们一定来自类似 Struct 的东西?如果我错了请纠正我?:D

4

2 回答 2

0

Windows 平台上的开发人员往往会陷入一个非常糟糕的习惯,包括在其他符合标准 C 或 C++ 的简单应用程序中的“windows.h”。

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

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

于 2015-12-14T09:27:03.103 回答
0

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

于 2015-12-14T06:16:13.983 回答