【问题标题】:ZeroMemory Function giving me errors in windows.h?ZeroMemory 函数在 windows.h 中给我错误?
【发布时间】:2016-03-19 12:25:42
【问题描述】:

基本上我是在 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

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


根据cmets修改部分代码后:

void ZeroMemory(PVOID  Destination, SIZE_T Length);

我收到以下错误:

Unknown type name PVOID
Unknown type name SIZE_T

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

【问题讨论】:

  • 我认为您使用的语法是错误的。您应该使用PVOID Destination[in] 声明它。
  • 我相信[in]是一个文档注释告诉你它是一个输入参数。它不应该是实际代码的一部分。只需将其删除。
  • 我会在完成抓取执行后尝试!哈哈,谢谢。
  • 谢谢 Kaylum 和 AmeyCU。我将删除“in”并将它们保留为 [] 括号。我会及时通知你粉丝们的最新情况!
  • 不,[] 也是文档注释的一部分。也删除那些。只需void ZeroMemory(PVOID Destination, SIZE_T Length);

标签: c windows macos dummy-data


【解决方案1】:

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

【讨论】:

  • 这个项目的目标是让我能够从 USB xbox 360 控制器实现操纵杆输入,所以是的,我正在使用特定于平台的东西,因为我相信输入确实必须通过操作系统。老实说,不久前我确实将我的代码转移到了一台 Windows 机器上,但是我不得不从 Xcode 转换为 Codeblocks,并且试图获取我需要的所有库时遇到了很大的麻烦。这就像我现在被困在 OS X 和 Windows 中间 =/
  • @CollegeStrugs:要么 OS X 已经将其视为操纵杆(在这种情况下,您 也许 能够使用交叉编译器 + wine 侥幸逃脱)或者这是根本无法工作(特别是,如果您正在编写内核模式驱动程序,它将永远无法工作)。
  • 我把自己挖进了一个大坑。令我惊讶的是,网上没有关于如何做到这一点的教程。我正在通过开放框架库对我的游戏进行编程,即使是开放框架也没有太多建议,除了一个非常令人困惑的插件..
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2019-05-17
    • 2015-12-11
    • 1970-01-01
    相关资源
    最近更新 更多