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
必须调用 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