前提・実現したいこと
DXライブラリを使ったAndroidゲームアプリ開発において、「C++ REST SDK」を利用したGET/POST機能を導入しようと考えています。
こちらの手順通りプロジェクトを作成、NuGetで「cpprestsdk」をインストールし、こちらの通りにプロパティにて変更を行いました。
発生している問題・エラーメッセージ
ビルド・実機で実行しようとすると、画像の様な例外が発生し、解決策が分かりません。
また、例外が発生しているファイル(openssl_init.ipp)内では、「thread_id_」「mutexes_」にて「メンバー○○にアクセスできません」とエラーが出ていました。
C++
1// 2// ssl/detail/impl/openssl_init.ipp 3// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4// 5// Copyright (c) 2005 Voipster / Indrek dot Juhani at voipster dot com 6// Copyright (c) 2005-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com) 7// 8// Distributed under the Boost Software License, Version 1.0. (See accompanying 9// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 10// 11 12#ifndef BOOST_ASIO_SSL_DETAIL_IMPL_OPENSSL_INIT_IPP 13#define BOOST_ASIO_SSL_DETAIL_IMPL_OPENSSL_INIT_IPP 14 15#if defined(_MSC_VER) && (_MSC_VER >= 1200) 16# pragma once 17#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 18 19#include <boost/asio/detail/config.hpp> 20#include <vector> 21#include <boost/asio/detail/assert.hpp> 22#include <boost/asio/detail/mutex.hpp> 23#include <boost/asio/detail/tss_ptr.hpp> 24#include <boost/asio/ssl/detail/openssl_init.hpp> 25#include <boost/asio/ssl/detail/openssl_types.hpp> 26 27#include <boost/asio/detail/push_options.hpp> 28 29namespace boost { 30namespace asio { 31namespace ssl { 32namespace detail { 33 34class openssl_init_base::do_init 35{ 36public: 37 do_init() 38 { 39 ::SSL_library_init(); 40 ::SSL_load_error_strings(); 41 ::OpenSSL_add_all_algorithms(); 42 43 mutexes_.resize(::CRYPTO_num_locks()); 44 for (size_t i = 0; i < mutexes_.size(); ++i) 45 mutexes_[i].reset(new boost::asio::detail::mutex); 46 ::CRYPTO_set_locking_callback(&do_init::openssl_locking_func); 47 ::CRYPTO_set_id_callback(&do_init::openssl_id_func); 48 49#if !defined(SSL_OP_NO_COMPRESSION) \ 50 && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 51 null_compression_methods_ = sk_SSL_COMP_new_null(); 52#endif // !defined(SSL_OP_NO_COMPRESSION) 53 // && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 54 } 55 56 ~do_init() 57 { 58#if !defined(SSL_OP_NO_COMPRESSION) \ 59 && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 60 sk_SSL_COMP_free(null_compression_methods_); 61#endif // !defined(SSL_OP_NO_COMPRESSION) 62 // && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 63 64 ::CRYPTO_set_id_callback(0); 65 ::CRYPTO_set_locking_callback(0); 66 ::ERR_free_strings(); 67 ::ERR_remove_state(0); 68 ::EVP_cleanup(); 69 ::CRYPTO_cleanup_all_ex_data(); 70 ::CONF_modules_unload(1); 71#if !defined(OPENSSL_NO_ENGINE) 72 ::ENGINE_cleanup(); 73#endif // !defined(OPENSSL_NO_ENGINE) 74 } 75 76#if !defined(SSL_OP_NO_COMPRESSION) \ 77 && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 78 STACK_OF(SSL_COMP)* get_null_compression_methods() const 79 { 80 return null_compression_methods_; 81 } 82#endif // !defined(SSL_OP_NO_COMPRESSION) 83 // && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 84 85private: 86 87 88 89 90 static unsigned long openssl_id_func() 91 { 92#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) 93 return ::GetCurrentThreadId(); 94#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) 95 void* id = instance()->thread_id_; /////// ここでエラー 96 if (id == 0) 97 instance()->thread_id_ = id = &id; // Ugh. /////// ここでエラー 98 BOOST_ASIO_ASSERT(sizeof(unsigned long) >= sizeof(void*)); 99 return reinterpret_cast<unsigned long>(id); 100#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__) 101 } 102 103 104 #if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__) 105 // The thread identifiers to be used by openssl. 106 boost::asio::detail::tss_ptr<void> thread_id_; 107 #endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__) 108 109 110 // Mutexes to be used in locking callbacks. 111 std::vector<boost::asio::detail::shared_ptr<boost::asio::detail::mutex> > mutexes_; 112 113 static void openssl_locking_func(int mode, int n, 114 const char* /*file*/, int /*line*/) 115 { 116 if (mode & CRYPTO_LOCK) 117 instance()->mutexes_[n]->lock(); /////// ここでエラー 118 else 119 instance()->mutexes_[n]->unlock(); /////// ここでエラー 120 } 121 122 123#if !defined(SSL_OP_NO_COMPRESSION) \ 124 && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 125 STACK_OF(SSL_COMP)* null_compression_methods_; 126#endif // !defined(SSL_OP_NO_COMPRESSION) 127 // && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 128}; 129 130boost::asio::detail::shared_ptr<openssl_init_base::do_init> 131openssl_init_base::instance() 132{ 133 static boost::asio::detail::shared_ptr<do_init> init(new do_init); 134 return init; 135} 136 137#if !defined(SSL_OP_NO_COMPRESSION) \ 138 && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 139STACK_OF(SSL_COMP)* openssl_init_base::get_null_compression_methods() 140{ 141 return instance()->get_null_compression_methods(); 142} 143#endif // !defined(SSL_OP_NO_COMPRESSION) 144 // && (OPENSSL_VERSION_NUMBER >= 0x00908000L) 145 146} // namespace detail 147} // namespace ssl 148} // namespace asio 149} // namespace boost 150 151#include <boost/asio/detail/pop_options.hpp> 152 153#endif // BOOST_ASIO_SSL_DETAIL_IMPL_OPENSSL_INIT_IPP 154
該当のソースコード
GET/POST機能を担当するクラスのヘッダファイル
C++
1#pragma once 2#include "DxLib.h" 3#include <cpprest/http_client.h> 4 5class クラス名 6{ 7public: 8 クラス名(); 9 ~クラス名(); 10}; 11
試したこと
例外について色々調べてみたものの、何が原因か見当が付きませんでした。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2017
回答1件
あなたの回答
tips
プレビュー