トップページ > 記事閲覧
Androidゲームに「cpprestsdk」を導入したい
名前:hiyokko 日時: 2019/03/07 17:59

いつもお世話になっております。初めて質問させていただきます。 題名の通り、Androidゲームに「cpprestsdk」を導入しようとしたのですが、うまくいかず、質問させていただきます。 貴HPの手順通りandroidのnative activityプロジェクトを作成、NuGetで「cpprestsdk」をインストールし、こちら(ttps://github.com/Microsoft/cpprestsdk/wiki/How-to-build-for-Android-on-Windows)の通りにプロパティにて変更を行いました。 実行したところ、openssl_init.ipp内で「Illegal instruction」とエラーが出てしまい、解決策が分からず困っています。 ここで質問できる内容の範疇を超えていたらすみません。よろしくお願い致します。
メンテ

Page: 1 |

Re: Androidゲームに「cpprestsdk」を導入したい ( No.1 )
名前:管理人 日時:2019/03/07 23:46

はじめまして、DXライブラリの管理人です DXライブラリ Android版と cpprestsdk を併用しようとしたらエラーが発生されたとのことですが cpprestsdk 単体で使用した場合は正常に動作するのでしょうか? あと、以前 cpprestsdk をコンパイルして実行してみた際のスレッドがありましたので、 よろしければご覧ください、何か参考になるところがあるかもしれませんので… m(_ _)m <Androidの通信について> https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=4312
メンテ
Re: Androidゲームに「cpprestsdk」を導入したい ( No.2 )
名前:hiyokko 日時:2019/03/08 15:41

管理人様 ご返信ありがとうございます。 単体で動かしてみようと、こちら(ttps://devblogs.microsoft.com/cppblog/targeting-android-with-the-c-rest-sdk/)のページを参考に プロジェクトを作成しましたが、画像(ttps://d.kuku.lu/95cb56d478)の様なエラーが出てしまい、うまくいきませんでした。また、 Dxライブラリを導入していたプロジェクトも、再度開きなおすと同様のエラーが出てしまっていました。 ご提示していただいたスレッド<Androidの通信について>も参考にさせていただきましたが、こちら(ttps://github.com/Microsoft/cpprestsdk) からダウンロード、解凍してみたものの、フォルダ内にソリューションファイルが存在せず、設定で躓いてしまいました…。 参考までに、前回の質問の時点で発生していたエラー(例外)は画像(ttps://d.kuku.lu/63ead20e87)のようなものでした。 申し訳ありませんが、よろしくお願いします。
メンテ
Re: Androidゲームに「cpprestsdk」を導入したい ( No.3 )
名前:管理人 日時:2019/03/10 03:32

私も試してみましたが、hiyokkoさんと同様のエラーが発生しました cpprestsdk の最終更新が 2016年11月3日となっているので、恐らく最新の VisualStudio2017 の環境に対応していないのだと思います ( 解説記事も VisualStudio2015 を使用したものですし… ) Android の環境は短い期間でかなり変化しているので、サポートが 止まっているとなると使用するのは難しいと思います お力になれず申し訳ありません m(_ _;m
メンテ
Re: Androidゲームに「cpprestsdk」を導入したい ( No.4 )
名前:NTG 日時:2019/03/10 21:20

ちょっとやってみました。ちなみにラムダ式とかJSONとかさっぱりわかっていないのでご了承ください。 まず https://dxlib.xsrv.jp/use/dxuse_vscom2017_android.html および https://dxlib.xsrv.jp/lecture/Android/Android_Java.html により、DxLib + Javaの実行環境を構築します。 プロジェクト名は MyREST1 にしました。(x86エミュレーターのみで試しました) NuGetにより cpprestsdk.android 2.9.1.1 をインストールします。 AndroidManifest.xml には <uses-permission android:name="android.permission.INTERNET" /> を追加します。 C/C++ / コード生成 / C++の例外を有効にする ⇒ はい C/C++ / 言語 / ランタイム型情報を有効にする ⇒ はい そして、全般 / プラットフォームツールセット ⇒ Clang3.8 にします。(5.0ではない) cpprestsdkで実行する内容は、以下のページから拝借しました。 kagasu.hatenablog.com/entry/2017/10/07/190551 main.cppは以下のようにしました。(例外処理やらなんやらは省略) #include "DxLib.h" #include <string> #include <cpprest/http_client.h> using namespace web; using namespace web::http; using namespace web::http::client; utility::string_t u_str; pplx::task<void> Get() { return pplx::create_task([] { http_client client("https://jsonplaceholder.typicode.com/posts/1"); return client.request(methods::GET); }).then([](http_response response) { if (response.status_code() == status_codes::OK) { return response.extract_json(); } }).then([](json::value json) { u_str = json["title"].as_string(); }); } int android_main(void) { JNIEnv *env; const ANativeActivity *NativeActivity; int InputEnd; char InputString[1024]; SetBackgroundColor(128, 128, 128); if (DxLib_Init() < 0) return -1; SetDrawScreen(DX_SCREEN_BACK); NativeActivity = GetNativeActivity(); cpprest_init(NativeActivity->vm); Get().wait(); { if (NativeActivity->vm->AttachCurrentThreadAsDaemon(&env, NULL) != JNI_OK) { return -1; } jclass jclass_DxLib_AD_2 = env->GetObjectClass(NativeActivity->clazz); jmethodID jmethodID_StartInputDialog = env->GetMethodID(jclass_DxLib_AD_2, "StartInputStringDialog", "()V"); env->CallVoidMethod(NativeActivity->clazz, jmethodID_StartInputDialog); env->DeleteLocalRef(jclass_DxLib_AD_2); NativeActivity->vm->DetachCurrentThread(); } InputEnd = 0; while (ProcessMessage() == 0) { ClearDrawScreen(); if (InputEnd == 0) { if (NativeActivity->vm->AttachCurrentThreadAsDaemon(&env, NULL) != JNI_OK) { return -1; } jclass jclass_MyREST1 = env->GetObjectClass(NativeActivity->clazz); jfieldID jfieldID_InputEnd = env->GetFieldID(jclass_MyREST1, "InputEnd", "I"); InputEnd = env->GetIntField(NativeActivity->clazz, jfieldID_InputEnd); if (InputEnd == 1) { jfieldID jfieldID_InputString = env->GetFieldID(jclass_MyREST1, "InputString", "Ljava/lang/String;"); jstring jstring_InputString = (jstring)env->GetObjectField(NativeActivity->clazz, jfieldID_InputString); const char *chars_InputString = env->GetStringUTFChars(jstring_InputString, NULL); strcpy(InputString, chars_InputString); env->ReleaseStringUTFChars(jstring_InputString, chars_InputString); env->DeleteLocalRef(jstring_InputString); } env->DeleteLocalRef(jclass_MyREST1); NativeActivity->vm->DetachCurrentThread(); } DrawFormatString(0, 100, GetColor(255, 255, 255), "InputEnd:%d InputString:%s", InputEnd, InputString); DrawFormatString(0, 300, GetColor(255, 255, 255), "title = %s", u_str.c_str()); ScreenFlip(); } DxLib_End(); return 0; } "sunt aut facere repellat provident occaecati excepturi optio reprehenderit" という文字を取得、描画します。 ※書き忘れましたが、Visual Studio 2017 です
メンテ
Re: Androidゲームに「cpprestsdk」を導入したい ( No.5 )
名前:管理人 日時:2019/03/11 00:11

私が試してエラーが発生したときの環境はARMエミュレーターでした ですが、先程実機( SO-04J )で試したところエラーが発生しませんでした ( x86エミュレーターは何かの更新以降謎のエラーで起動できなくなってしまったので、試せていません… ) もしかしたら hiyokkoさんの環境でも実機では動作するかもしれません
メンテ
Re: Androidゲームに「cpprestsdk」を導入したい ( No.6 )
名前:hiyokko(解決) 日時:2019/03/11 23:21

管理人様、NTG様 ご返信ありがとうございます。 NTG様の方法に従って環境を設定し、試してみました。 ・「ARM、Sony 602SO(arm64v8a - BH902FER77)」 やはり同じところで例外(d.kuku.lu/63ead20e87)が起こり、止まってしまいました…。 ただ、その状態で無理やり「続行」ボタンをクリックして続行すると"sunt aut facere 〜〜"が表示されました。 ・「x86、Android_Accelerated_x86_Nougat(x86 - emulator-5554)」 上記の例外は発生せず、"sunt aut facere 〜〜"が表示されました。 ただ、状況によっては(kagasu.hatenablog.com/entry/2017/10/07/190551ではなくサーバ上の自作API(〜.php)にアクセスする状況では)、 画像(d.kuku.lu/bd26bc2193)のように別の例外が発生してしまいました(「_M_stdException」ということで文字コード当たりの例外?)。 とりあえず、しばらくはx86エミュレータで試してみることにします。エラーが(x86でのみ)なくなり、最低限の動作が再現できたということで、 一旦解決とさせていただきます。また質問させていただくかもしれませんが、その時はまたよろしくお願い致しますm(_ _)m
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存