0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

駄文:久しぶりのC++

Posted at

久しぶりに

大昔いじっていたソフトのエンハンスをしてみた。
最初出したのが2003年だったらしい。
そのころ、Windows CEなるOSのものがあってWindows APIでコーディングをしていた。
Win32APIをクラスラップしたり、http周りもWinSockをやったりして実装してた。
2017年あたりまで修正したりしていたものだけど、

  • httpsまでは実装してられない。
  • CE自体も死んでるんで使っている人もおらんだろう

ってことで、放置してた。

ふと最近同じようのものをAndroid向けにKotlin+WebView+React実装してみた。
その際、画面デザインとか機能を調べるために古いソースを引っ張り出してビルドしてみる気になった。

今更https周りをたたくのはやってられないので、C++のhttpsクライアントを探してみたところ、libcurlがVisual Studio 2019でもビルドできるらしいということなので早速入手してみた。
プロジェクトファイルでちょっと警告されたような気もするが、サクッとビルドできた。

後は、元のソースのhttp周りのクラスをWinSockからlibcurlにサクッと置き換えて完成。
#途中、置換するたびにSJISのコードがUTF-8に変換されてビルドが通らんとかいろいろあったが。

完成したってことで興味本位で行数を調べてみたら、こんな感じ。
結構書いているもんだ。
今だとできないだろうね。

行数 ファイル数
C++ 22,225 101
C 726 9
H 7,554 104

libcurlをざっくり眺めたらWINDOWS_WCEとか使っていてWindows CEでもビルドができなくはないかも。
ただ、ビルド環境が手元にないしで未着手。どうしたもんかね。

これだけだとあれなので、libcurlのざっくり使うものを書いておこう。

libcurl関数概要

関数名 概要
curl_global_init 初期化
curl_easy_init CURLを取得
curl_easy_setopt パラメターを指定
curl_easy_perform http処理を実行
curl_easy_cleanup CURLを解放

curl_easy_setoptパラメーター概要

パラメーター 概要
CURLOPT_CUSTOMREQUEST httpメソッドを指定
CURLOPT_URL URLを指定
CURLOPT_HTTPHEADER httpヘッダーを指定
CURLOPT_POSTFIELDS request-bodyを指定
CURLOPT_WRITEFUNCTION 受信関数
CURLOPT_WRITEDATA 受信関数のユーザーデータ
CURLOPT_HEADER httpヘッダーも受信関数で受け取る

// 呼び出し
Writer writer;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &writer);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeToUserData);
//受信関数
static size_t writeToHandle(char* ptr, size_t size, size_t nmemb, void* userdata)
{
    // NOTE: CURLOPT_WRITEDATAで渡した情報をキャストで取得
    Writer* writer = (Writer*)userdata;
    // NOTE: メンバー関数を呼び出して......
    return handle->write(ptr, size * nmemb);
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?