ちょっとやってみました。ちなみにラムダ式とか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 です