I tried the 1.1.0 version of the SDK with Visual Studio 2013 Preview and it does not work because of the way the PPL library is used.
I get the following error when I write the code below:
> error LNK2019: unresolved external symbol "__declspec(dllimport) public: class Concurrency::task<void> __thiscall web::http::details::_http_request::reply(class web::http::http_response)" (__imp_?reply@_http_request@details@http@web@@QAE?AV?$task@X@Concurrency@@Vhttp_response@34@@Z) referenced in function "public: class Concurrency::task<void> __thiscall web::http::http_request::reply(class web::http::http_response)const " (?reply@http_request@http@web@@QBE?AV?$task@X@Concurrency@@Vhttp_response@23@@Z)
```
#include <cpprest\http_listener.h>
#pragma comment(lib, "cpprest110_1_1")
using namespace web;
using namespace web::http;
using namespace web::http::experimental::listener;
int _tmain(int argc, _TCHAR* argv[])
{
http_listener listener(L"http://localhost/restdemo");
listener.support(
methods::GET,
[](http_request request) {
request.reply(http::status_codes::OK, L"Hello world!");
});
return 0;
}
```
The files have the following include:
```
#if defined(_MSC_VER) && (_MSC_VER >= 1800)
#include <ppltasks.h>
namespace pplx = Concurrency;
#else
#include "pplx/pplxtasks.h"
#endif
```
So if VS2013 is used, then the PPL deployed with it is used. So the the linker is looking for method.
```
__imp_?reply@_http_request@details@http@web@@QAE?AV?$task@X@Concurrency@@Vhttp_response@34@@Z
```
However, the C++ REST library is not built with that version so the actual method found in cpprest110_1_1.lib is
```
__imp_?reply@_http_request@details@http@web@@QAE?AV?$task@X@pplx@@Vhttp_response@34@@Z.
```
I was able to make it work by simply including __pplx/pplxtasks.h__ regardless of which VS is used.
Of course, one has to also comment this directives in the distributed PPL files:
```
#if (defined(_MSC_VER) && (_MSC_VER >= 1800))
#error This file must not be included for Visual Studio 12 or later
#endif
```
Obviously this was intentional. Why?
Comments: Correct the binaries with '110' are for VS 2012. Right now we don't produce binaries for VS 2013, however we will start in our next release. For now if you need support for VS 2013 it can be built manually from the sources using the project files for 2013.
I get the following error when I write the code below:
> error LNK2019: unresolved external symbol "__declspec(dllimport) public: class Concurrency::task<void> __thiscall web::http::details::_http_request::reply(class web::http::http_response)" (__imp_?reply@_http_request@details@http@web@@QAE?AV?$task@X@Concurrency@@Vhttp_response@34@@Z) referenced in function "public: class Concurrency::task<void> __thiscall web::http::http_request::reply(class web::http::http_response)const " (?reply@http_request@http@web@@QBE?AV?$task@X@Concurrency@@Vhttp_response@23@@Z)
```
#include <cpprest\http_listener.h>
#pragma comment(lib, "cpprest110_1_1")
using namespace web;
using namespace web::http;
using namespace web::http::experimental::listener;
int _tmain(int argc, _TCHAR* argv[])
{
http_listener listener(L"http://localhost/restdemo");
listener.support(
methods::GET,
[](http_request request) {
request.reply(http::status_codes::OK, L"Hello world!");
});
return 0;
}
```
The files have the following include:
```
#if defined(_MSC_VER) && (_MSC_VER >= 1800)
#include <ppltasks.h>
namespace pplx = Concurrency;
#else
#include "pplx/pplxtasks.h"
#endif
```
So if VS2013 is used, then the PPL deployed with it is used. So the the linker is looking for method.
```
__imp_?reply@_http_request@details@http@web@@QAE?AV?$task@X@Concurrency@@Vhttp_response@34@@Z
```
However, the C++ REST library is not built with that version so the actual method found in cpprest110_1_1.lib is
```
__imp_?reply@_http_request@details@http@web@@QAE?AV?$task@X@pplx@@Vhttp_response@34@@Z.
```
I was able to make it work by simply including __pplx/pplxtasks.h__ regardless of which VS is used.
Of course, one has to also comment this directives in the distributed PPL files:
```
#if (defined(_MSC_VER) && (_MSC_VER >= 1800))
#error This file must not be included for Visual Studio 12 or later
#endif
```
Obviously this was intentional. Why?
Comments: Correct the binaries with '110' are for VS 2012. Right now we don't produce binaries for VS 2013, however we will start in our next release. For now if you need support for VS 2013 it can be built manually from the sources using the project files for 2013.