vs2005下使用boost::asio出现问题

liuka 2009-05-19 03:29:45
错误信息:
1>C:\boost_1_39_0\boost_1_39_0\boost/asio/detail/win_thread.hpp(151) : error C2664: 'QueueUserAPC' : cannot convert parameter 1 from 'void (__stdcall *)(unsigned long *)' to 'PAPCFUNC'
1> None of the functions with this name in scope match the target type

请问是什么原因?



...全文
163 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuka 2009-05-19
  • 打赏
  • 举报
回复
原因找到了
是因为我使用GDI+时加了这个

#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif

去掉就可以了
98440622 2009-05-19
  • 打赏
  • 举报
回复
下面代码在 VS2008 + Boost 1_36_0 下编译运行没问题,预编译宏:
_WIN32_WINNT=0x0501
_UNICODE
UNICODE
BOOST_ASIO_HAS_SERIAL_PORT
BOOST_ASIO_HAS_IOCP
BOOST_WINDOWS


#include <boost/asio/serial_port.hpp>

void do_serial_test(int argc, char* argv[]) {
using namespace boost::asio;

io_service isvr;
serial_port port(isvr);

if (argc != 3) {
std::cout << "Usage : Asio [COM1] [client/server]\n";
return;
}

try {
//
// Open COM1.
//
port.open(argv[1]);

//
// Set parameter with 9600bps,8,1,1,none.
//
port.set_option<serial_port_base::baud_rate>(
serial_port_base::baud_rate(9600));
port.set_option<serial_port_base::character_size>(
serial_port_base::character_size(8));
port.set_option<serial_port_base::stop_bits>(
serial_port_base::stop_bits(serial_port_base::stop_bits::one));
port.set_option<serial_port_base::flow_control>(
serial_port_base::flow_control(serial_port_base::flow_control::none));
port.set_option<serial_port_base::parity>(
serial_port_base::parity(serial_port_base::parity::none));

std::string par(argv[2]);
if (par == std::string("client")) {
std::cout << "Client mode started...\n";

//
// Send a plain text.
//
char* text = "Hello Boost::asio::serial_port:)";
port.write_some<boost::asio::mutable_buffers_1>(
boost::asio::buffer(text, ::strlen(text) + 1));
} else if (par == std::string("server")) {
std::cout << "Server mode started...\n";

for (;;) {
//
// Waitting for a plain reply text.
//
char reply[128] = {0};
size_t reply_size = port.read_some<boost::asio::mutable_buffers_1>(
boost::asio::buffer(reply, 128));
std::cout << reply;
}
} else {
std::cout << "Unknow mode, pls read usage carefully.\n";
}

//
// Close port.
//
port.close();
} catch (std::exception& exp) {
std::cout
<< exp.what()
<< ".\n";
::exit(0);
}
}

int main(int argc, char* argv[]) {
do_serial_test(argc, argv);
return 0;
}
liuka 2009-05-19
  • 打赏
  • 举报
回复
难道是因为我的项目中支持Unicode 的原因?
liliangbao 2009-05-19
  • 打赏
  • 举报
回复
好像是参数使用不正确~
帮顶~

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧