【问题标题】:Which parts of the Windows API are not accessible from ANSI C code?ANSI C 代码无法访问 Windows API 的哪些部分?
【发布时间】:2012-11-09 09:01:40
【问题描述】:

在 2000 年之前,我一直在使用 ANSI C 进行 Windows 编程。后来我改用 C++ 和 MFC,然后改用 Delphi,现在我更喜欢 C#,但我很好奇是否仍然可以使用纯 C 来访问现代版 Windows 的每个 API。

例如,even COM/OLE objects can be dealt with from C

【问题讨论】:

  • 考虑到 Windows 真正的 api 是 C 开头(现在仍然是),我会选择 yes。其他所有内容都只是叠加在它之上(大部分情况下)。
  • @WhozCraig 谢谢。这是我所期望的,但是微软是否有任何官方声明他们是否会在未来保留 C API?
  • 查找“GDI+”作为反例。
  • 官方?不是我见过的,但我不会为此屏住呼吸。我想每次他们发布 Windows SDK 时都会再次确认它,并且由于他们继续堆积其中,我会说它永远不会消失(至少在我们的有生之年)。我向你保证,如果他们曾经考虑过这个想法,即使是顺带一提,神圣的愤怒也会在他们身上盛行。确实有 数十亿 行代码需要它,而让所有这些过时的代码将有助于更快地通向 Linux/Mac,但它们已经在大出血了。
  • @librik GDI+ 有一个所谓的“平面 API”,可以从 ANSI C 访问。但是,MSDN 说“微软产品支持服务不会为直接调用平面 API 的代码提供支持。 " msdn.microsoft.com/en-us/library/windows/desktop/…

标签: c winapi ansi


【解决方案1】:

Windows API 列表描述为here

大多数 API 都是基于 C 的(结构和函数)。但是,很少有基于 C++ 的(类):

【讨论】:

  • +1,并指出:所有这些仍然可以从 C 中访问(如果您从未在 C 中编写过 COM 接口,那么您不知道自己缺少什么)。
  • 我同意@WhozCraig。 “基于 C++”仅表示存在类,但仍可从 C 访问 vtable(COM 类的 lpVtbl 成员)。有时也有 C 版本的 API,例如 GDI+ 中的“平面 API”。我想知道的是是否有一个API绝对没有C访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
相关资源
最近更新 更多