【问题标题】:C++ Boost::thread invoking a c function - Facing compilation errorC ++ Boost :: thread调用c函数 - 面临编译错误
【发布时间】:2020-08-22 01:28:52
【问题描述】:

必须调用 C 静态函数作为我的 boost 工作线程函数的一部分。C 静态函数作为其他 C++ 代码的一部分工作,但是,它在作为工作线程函数的一部分时无法编译。

以下是我的 C++ 头文件中包含的头文件列表。

#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/asio/io_service.hpp>
#include <string>
#include <queue>

和c代码头开始如下

    #ifdef __cplusplus
    extern "C" {
    #endif

    #if defined(MS_WINNT) || defined(WIN32)

    #include <windows.h>
    typedef BSTR     ARG;

我无法控制 C 代码,但可以控制我正在调用的 C++ 代码。

我遇到的错误信息如下

错误 C2146:语法错误:缺少 ';'

但是,如果我颠倒包含文件的顺序,我会收到不同的错误消息。

错误 C1189: #error : WinSock.h 已包含

使用带有 boost 1.62 库的 Visual Studio 2010。这种东西可以编译运行吗?

添加 C++ 代码的主要部分。

#ifndef  _THREADS
#define  _THREADS
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/asio/io_service.hpp>
#include <string>
#include <queue>

namespace testThreads
{


    class boostthreads
    {
            boost::asio::io_service _io_service;
            boost::asio::io_service::work _work;
            boost::thread_group _Threads;
            std::queue<std::string> _queueOfRequests;
            boost::mutex _mutex;

            void handleCurrentRequest();
            unsigned long getThreadId ( std::string& currentThreadIdA);


    public:
            boostthreads();
            ~boostthreads();
    };

}
#endif

【问题讨论】:

  • 你能显示出现 C2146 的代码 sn-p 吗?
  • 添加了代码。那是 C++ 头文件。 C 头文件开头已经给出。任何一个命令都不起作用。 (C++ 头文件后跟 C 头文件,反之亦然)。
  • 我需要查看出现“语法错误:缺少';'”的行来猜测是什么问题。
  • typedef BSTR ARG 出现语法错误; (它包含在交付的库的头文件中)。我不允许修改库的头文件。
  • 看起来库头假定 windows.h 包含在它之前。尝试在 C 标头之前包含 WTypes.h。

标签: c++ multithreading visual-studio-2010 boost boost-asio


【解决方案1】:

在帖子 cmets 的讨论中,我们发现发生 C2146 错误,因为您的 C 标头中需要 BSTR typedef 定义。由于 Windows.h 和 boost/asio.hpp 双重包含 WinSock.h,在 C 标头之前包含 Windows.h 会导致冲突。但是 BSTR 是您的库从 Windows.h 中唯一需要的东西,因此解决方案是仅包含定义 BSTR 的标头。这个头文件是 WTypes.h。仅供参考,Microsoft 文档上的 BSTR:https://docs.microsoft.com/en-us/previous-versions/windows/desktop/automat/bstr

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 2013-11-26
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多