質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Android NDK

Android NDKとは、Android SDKと対を成すツールです。ネイティブコードのアプリ、またはC/C++言語の既存のポートライブラリでパフォーマンスクリティカルな部分を構築できます。ヘッダ、ライブラリを提供して、アクティビティやユーザ入力処理などを構築できます。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

1041閲覧

DXライブラリを使ったAndroidゲームに「C++ REST SDK」を導入したい

hiyokko

総合スコア12

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Android NDK

Android NDKとは、Android SDKと対を成すツールです。ネイティブコードのアプリ、またはC/C++言語の既存のポートライブラリでパフォーマンスクリティカルな部分を構築できます。ヘッダ、ライブラリを提供して、アクティビティやユーザ入力処理などを構築できます。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

1グッド

0クリップ

投稿2019/03/07 08:51

前提・実現したいこと

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

bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

stdio

2019/03/11 00:58

「メンバー○○にアクセスできません」なので、includeしているファイルが原因と思われます。 設定を間違えただけかと思いますが今のままでは情報が不足していますね。 もう少し詳しくエラー内容等を教えて下さい。
hiyokko

2019/03/11 14:35 編集

stdio様 回答ありがとうございます。エラーはこちらの画像(https://d.kuku.lu/9c74da9d4c、https://d.kuku.lu/ab2f763d3a)のようになっております。 別の場所でも同様の質問をさせていただいたのですが(https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4585)、このエラーは「cpprestsdk.android」が現在の「Visual Studio 2017」に対応していないことに起因する可能性があるとのことでした。
stdio

2019/03/12 00:35

対応してないなら対応しているバージョンに落とすしかないんじゃない? そこまでしてDXライブラリを導入しておきながら他のライブラリ入れたいのかね? ゲーム作るだけならDXライブラリオンリーでも何とかなるじゃない。
hiyokko

2019/03/12 11:42

DXライブラリを用いたゲームに、サーバとの簡単なデータ通信機能を実装しようと考えていたところ、「C++ REST SDK」を見つけ、導入しようとした次第です。 こちら(https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4585)の方法で、エミュレータ上ではエラー無く動いたため、一旦この質問は閉めさせていただきます。 お忙しい中お時間を割いていただき、ありがとうございました。
guest

回答1

0

自己解決

こちらを参考に環境設定をやり直したところ、x86エミュレータ上ではうまく動かすことができました。

最低限の動作が再現できたということで、一旦解決とさせていただきます。ありがとうございました。

投稿2019/03/12 11:45

hiyokko

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問