【问题标题】:Native types, critical section and handles not defined in c++ programC++ 程序中未定义的本机类型、临界区和句柄
【发布时间】:2013-03-16 15:16:55
【问题描述】:

我在 Visual Studio 2012 上的 c++ 程序中有一个无法解释的编译问题。错误出现在程序中的多个位置,这里是一个示例:

#ifndef     __WINMUTEX_H__
# define    __WINMUTEX_H__
# ifdef _WIN32
# include   <windows.h>

namespace Thread
{
class       WinMutex
{
public:
    WinMutex();
    ~WinMutex();
    void    lock();
    void    unlock();
    bool    trylock();
private:
    CRITICAL_SECTION    _mutex;
};

typedef WinMutex Mutex;
}
# endif
#endif

编译器给我一个错误 (C2146)。基本上编译器似乎没有找到 CRITICAL_SECTION 标识符,Intellisense 也没有。正如我所说的,这个错误发生在程序的几个部分,不仅是 CRITICAL_SECTION,还有 HANDLE 甚至 DWORD。

我尝试将 windows.h 包含替换为 windows 8 等效项 (synchapi.h),但添加“无目标体系结构”错误后仍然出现错误。

奇怪的是,当我在 Windows 7 上的 Visual Studio 2010 上的项目中使用该代码时,它仍然有效。

有人知道为什么会这样吗?

谢谢

【问题讨论】:

  • 请编辑您的问题以包含 complete 和 unedited 错误消息。另请指出错误在所提供的来源中的位置。

标签: c++ windows-8 visual-studio-2012 critical-section


【解决方案1】:

如果您的项目是 Windows 应用商店应用项目,则 Win32 API 的某些部分不可用,显然包括 CRITICAL_SECTION 和相关。您必须使用 C++/CX 等价物,请参阅:http://msdn.microsoft.com/en-us/library/windows/apps/hh771042.aspx

【讨论】:

  • 该项目是一个服务器,所以我从一个空项目开始。它不是 Windows 应用商店项目。
猜你喜欢
  • 2022-09-26
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
相关资源
最近更新 更多