【问题标题】:Introduction version of some Win32 API Call一些Win32 API调用的介绍版本
【发布时间】:2011-02-28 05:18:05
【问题描述】:

我正在使用 Win32 API 的几个函数,但 MSDN 没有告诉我它们源自哪个 Windows 版本,它们的历史范围现在只是 Win2K(如 ReadFile 函数文档中所示)。

由于代码可能必须在 NT4 或 win9x 上运行,我想知道如果系统上不存在这些功能,我是否必须设置一个“优雅”的后备。那么有没有人得到一些关于以下功能的引入日期/版本的信息:

  • 创建管道
  • 设置句柄信息
  • PeekNamedPipe

谢谢

【问题讨论】:

    标签: winapi


    【解决方案1】:

    这些 API 函数自 Win32 API 的第一个版本(大约在 1993 年)就已经存在。无需编写特殊代码。

    如果您打算针对 NT4 和 Win95 等古老的操作系统,则必须访问 Microsoft 博物馆以查找 SDK 和编译器的旧版本。至少过去 6 年的 SDK 和编译器版本仅与 Windows 2000 及更高版本兼容。找到这些版本可能比看起来更难,与 Sun 的和解使微软仍然分发 Visual Studio 版本 5 和 6 是非法的。您必须至少回到 4.2 版。好久没看到有人愿意承担支撑这些古代遗物的成本了。

    【讨论】:

    • @Raoul:即使您需要支持这些古老的操作系统,您也不必在编译器版本上走得太远。 Visual Studio 2005 可以编译将在 NT 4 上运行的二进制文件。您必须回到 2003 才能获得对 Windows 95 的开箱即用支持,尽管有一些 hacks 据称允许 2005 以 95 为目标。
    【解决方案2】:

    以下是随 Visual Studio 2005 安装的 msdn 文档的剪切粘贴。我包含了函数签名,以便您验证我们讨论的是相同的函数。

    -----
    
    BOOL CreatePipe(
      PHANDLE hReadPipe,
      PHANDLE hWritePipe,
      LPSECURITY_ATTRIBUTES lpPipeAttributes,
      DWORD nSize
    );
    
    Client: Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95. 
    
    Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server. 
    
    Header: Declared in Winbase.h; include Windows.h.
    
    Library: Link to Kernel32.lib.
    
    DLL: Requires Kernel32.dll.  
    
    -----
    
    BOOL SetHandleInformation(
      HANDLE hObject,
      DWORD dwMask,
      DWORD dwFlags
    );
    
    Client: Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 3.51 and later. 
    
    Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 3.51 and later. 
    
    Header: Declared in Winbase.h; include Windows.h.
    
    Library: Link to Kernel32.lib.
    
    DLL: Requires Kernel32.dll.  
    
    -----
    
    BOOL PeekNamedPipe(
      HANDLE hNamedPipe,
      LPVOID lpBuffer,
      DWORD nBufferSize,
      LPDWORD lpBytesRead,
      LPDWORD lpTotalBytesAvail,
      LPDWORD lpBytesLeftThisMessage
    );
    
    Client: Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95. 
    
    Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server. 
    
    Header: Declared in Winbase.h; include Windows.h.
    
    Library: Link to Kernel32.lib.
    
    DLL: Requires Kernel32.dll.  
    

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2011-03-23
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多