C++ Boost::thread 调用 c 函数 - 面临编译错误

C++ Boost::thread invoking a c function - Facing compilation error

必须调用 C 静态函数作为我的 boost 工作线程的一部分 function.The 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++ 代码。

我遇到的错误信息如下

error C2146: syntax error : missing ';'

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

error C1189: #error : WinSock.h has already been included

使用 visual studio 2010 和 boost 1.62 库。是否可以编译和 运行 这类东西?

添加 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

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