【问题标题】:Failure to compile "hello world" web server app with Poco无法使用 Poco 编译“hello world”Web 服务器应用程序
【发布时间】:2016-02-12 02:02:43
【问题描述】:

当我在谷歌搜索“poco web server example”时,它提供给我的第一个链接是this one。现在诚然,它的星级评分为零,谷歌提供了一个来自 Poco 的更官方的例子,它的排名靠后。尽管如此,该示例非常简单,因此我尝试将其添加到现有 (MFC) 项目中并进行编译。当我这样做时,我会收到以下错误:

[...]serverapplication.h(215): error C3646: '_serviceStatus': unknown override specifier
[...]serverapplication.h(215): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
[...]serverapplication.h(216): error C3646: '_serviceStatusHandle': unknown override specifier
[...]serverapplication.h(216): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

错误出现在serverapplication.h的这两行:

static SERVICE_STATUS        _serviceStatus; 
static SERVICE_STATUS_HANDLE _serviceStatusHandle; 

当然,即使我所做的只是包含 Poco 头文件而没有其他任何内容,错误仍然存​​在......所以这并不是 我的代码 有问题,而不仅仅是 我的环境有问题。事实上,如果我将 8 个 Poco 头文件 + 3 个 STL 头的列表替换为 Poco 自己的 HTTPTimeServer 示例中较长的列表(顺便说一下,它作为一个独立项目编译和运行良好),我会得到完全相同的错误。

看起来SERVICE_STATUSSERVICE_STATUS_HANDLE 被#定义为什么都没有。是否有编译器设置或预处理器定义可以做到这一点? Poco 用户应该注意的陷阱是什么? Poco 和 MFC 之间是否存在兼容性问题?

更新:我可以通过下载 this potentially relevant article 引用的 this zipped project 来独立于我的应用程序重现该问题...构建良好...但是当我尝试指定额外包含时文件夹并包含serverapplication.h,就会发生这些错误。 Poco ServerApplication 类文档页面上没有提及任何依赖项。

【问题讨论】:

    标签: mfc poco-libraries


    【解决方案1】:

    SERVICE_STATUS 是在 Windows SDK 中定义的结构。

    SERVICE_STATUS structure documentation 表示

    包括 Windows.h

    你试过#include <Windows.h>吗?

    编辑
    由于您尝试将其添加到 MFC 应用程序中,您是否尝试过添加 #include "stdafx.h"

    【讨论】:

    • 不,我没有尝试过……但这没什么区别。我可以右键单击 SERVICE_STATUS 并转到其定义,这会将我带到我的错误项目和编译良好的 Poco 示例项目中的 winsvc.h。简而言之,Visual Studio 似乎对定义没问题......直到实际编译它们。
    • 检查/比较现有项目和示例项目中的项目配置。可能存在差异,例如使用 MFC 和/或目标平台工具集。
    • 是的 - 使用 MFC 似乎存在问题 - 从我正在阅读的内容来看,这似乎是一个不是特别清楚的关键兼容性问题。我将编辑我的问题以反映它
    • 尝试使用#include "stdafx.h",因为您正在尝试将其添加到 MFC 项目中。
    • 文件"stdafx.h"文件与MFC无关。它是用于预编译头文件的默认文件名。 MFC 应用程序必须#include <afx.h>
    【解决方案2】:

    要在 MFC 项目中包含 POCO 的 ServerApplication.h 头文件,请在 #include "ServerApplication.h" 之前尝试 #include <winsvc.h>。请注意,您不得在 MFC 项目中包含 Windows.h,这通常会包含 winsvc.h

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      相关资源
      最近更新 更多