c ++ - Boost Asio seriel port problem

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger CodeBlocks på et Windows-system og har downloadet Boost, overholdt og opsæt mine IDE-variabler og build-muligheder. Jeg har med succes brugt andre boost-biblioteker, og nu skal jeg arbejde på et program, der læser og skriver til en seriel port.


Jeg kan ikke få noget eksempel, som jeg forsøger at kompilere for asio seriel port. Følgende vil for eksempel generere en kompileringsfejl, der følger koden:


#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/serial\_port.hpp>
#include <boost/thread.hpp>



int main()
{


    boost::asio::io\_service io\_service;
    boost::asio::serial\_port port(io\_service);


    return 0;

}


Dette er byggeloggen for ovenstående kode:


Compiling: main.cpp
In file included from C:Devoost\_1\_47\_0/boost/thread/win32/thread\_data.hpp:12,
                 from C:Devoost\_1\_47\_0/boost/thread/thread.hpp:15,
                 from C:Devoost\_1\_47\_0/boost/thread.hpp:13,
                 from C:UsersjuneDocumentsCodeBlockshellowmain.cpp:4:
C:Devoost\_1\_47\_0/boost/thread/win32/thread\_heap\_alloc.hpp:59: warning: inline function 'void* boost::detail::allocate\_raw\_heap\_memory(unsigned int)' declared as  dllimport: attribute ignored
C:Devoost\_1\_47\_0/boost/thread/win32/thread\_heap\_alloc.hpp:69: warning: inline function 'void boost::detail::free\_raw\_heap\_memory(void*)' declared as  dllimport: attribute ignored
C:UsersjuneDocumentsCodeBlockshellowmain.cpp: In function 'int main()':
C:UsersjuneDocumentsCodeBlockshellowmain.cpp:13: error: 'serial\_port' is not a member of 'boost::asio'
C:UsersjuneDocumentsCodeBlockshellowmain.cpp:13: error: expected ';' before 'port'
C:Devoost\_1\_47\_0/boost/system/error\_code.hpp: At global scope:


Nogle forslag ??

Bedste reference


Fra boost/asio/serial\_port\_base.hpp filen (lidt forenklet):


#if defined(BOOST\_ASIO\_HAS\_IOCP) || !defined(BOOST\_WINDOWS)
#  define BOOST\_ASIO\_HAS\_SERIAL\_PORT 1
#endif


Så BOOST\_ASIO\_HAS\_SERIAL\_PORT er kun sandt i Windows, hvis BOOST\_ASIO\_HAS\_IOCP også er sandt.


Derefter fra boost/asio/detail/win\_iocp\_io\_service\_fwd.hpp :


#if defined(BOOST\_WINDOWS)
#if defined(\_WIN32\_WINNT) && (\_WIN32\_WINNT >= 0x0400)

// Define this to indicate that IOCP is supported on the target platform.
#  define BOOST\_ASIO\_HAS\_IOCP 1
#endif
#endif


Så hvis jeg følger det rigtigt, skal du definere \_WIN32\_WINNT til 0x0400 eller derover for at aktivere det.