C++のコメントの書き方を備忘する。
■関数コメント
// 関数:関数名を書く。例:IsHoge(Hoge hoge)
// 引数:引数の意味を書く。例:Hoge hoge:Hoge管理用オブジェクト
// 戻値:戻り値の意味を書く。例:true:hogeが有る、false:hogeが無い
// 詳細:関数の詳細を書く。例:hogeの有無を検証する
参考サイト
https://qiita.com/inabe49/items/23e615649e8539d857a8
2020年4月17日金曜日
2020年3月21日土曜日
OpenSSL1.1.1c(TLS.1.3対応版)のビルド(VisualStudio 2017版)
【ビルド環境】
Visual Studio Pro 2017
【準備】
1)「Visual Studio 2017 Professional」をインストールする。
1-1)
VisualStudioインストーラを起動(vs_professional__515800772.1574310941.exe)
1-2)
インストールコンソールから、「C++によるデスクトップ開発」を選択
1-3)
「全部ダウンロードしてから、インストールする」を選択
1-4)
インストールパッケージを30分程度でダウンロードする
1-5)
ダウンロード後、60分程度でインストールを実行する
2)Perlインストール
2-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads
5.26より新しいのActiivePerlは、VC-WIN32をサポートしていない。
そのため、ActivePerlを使う場合は、5.26以前のActivePerlを使う必要がある。
2-2)コマンドプロンプト上でバージョン確認。
perl --version
3)NASMインストール
3-1)NASMをインストールする。
link:http://www.nasm.us/
3-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。
3-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。
3-4)コマンドプロンプト上でバージョン確認。
nasm --version
4)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source
3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c
3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86
【ビルド手順】
1) スタートメニューから「VS 2017 用 x64_x86 Cross Tools コマンド プロンプト」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL"
→Configure VC-WIN32:Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。
→--prefix:OpenSSLビルド生成物の格納先を指定する。
→--openssldir:後述のエラーメッセージ2対応方法参照。
蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL" "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。
以下のエラーメッセージが出た場合。
>It looks like you don't have either nmake.exe or dmake.exe on your PATH,
>so you will not be able to execute the commands from a Makefile. You can
>install dmake.exe with the Perl Package Manager by running:
> ppm install dmake
ppm install dmakeを実行する。
4) nmake installを実行する。
■エラーメッセージ1
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_x86'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional>cd C:\build_openssl\openssl-1.1.1c
C:\build_openssl\openssl-1.1.1c>perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
Configuring OpenSSL version 1.1.1c (0x1010103fL) for VC-WIN32
Using os-specific seed configuration
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) (@INC contains: C:/build_openssl/openssl-1.1.1c/util/perl C:/Perl64/site/lib C:/Perl64/lib) at C:/Perl64/lib/ActivePerl/Config.pm line 400.
Compilation failed in require at C:/Perl64/site/lib/ExtUtils/MakeMaker.pm line 9.
BEGIN failed--compilation aborted at C:/Perl64/site/lib/ExtUtils/MakeMaker.pm line 9.
Compilation failed in require at C:/Perl64/site/lib/IPC/Cmd.pm line 235.
■エラーメッセージ1対応方法
https://qiita.com/takehiakihiro@github/items/97b1b1b9f28a563cc920
[対応方法1]
5.26より新しいのActiivePerlは、VC-WIN32をサポートしていない。
そのため、ActivePerlを使う場合は、5.26以前のActivePerlを使う必要がある。
[対応方法2]
ActivePerlを使えない場合、Strawberry Perlに切り替え
■エラーメッセージ2
*** Installing runtime programs
Copying: apps//openssl.exe to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/openssl.exe
Copying: apps//openssl.pdb to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/openssl.pdb
Copying: ./tools/c_rehash.pl to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/c_rehash.pl
Cannot create directory C:/Program Files (x86)/Common Files/SSL: No such file or directory
NMAKE : fatal error U1077: 'C:\Perl64\bin\perl.exe' : リターン コード '0x2'
Stop.
■エラーメッセージ2対応方法
https://github.com/openssl/openssl/issues/6072
回避策は--openssldir="D:\target\dir\SSL"、perl.exeコマンドを呼び出すときにパラメーターを追加することです。
perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
↓(修正後)
perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL" "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
【参考サイト】
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/
生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html
Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html
【その他】
OpenSSLに使ったビルドツール
https://drive.google.com/drive/folders/1FMBJtZEL_90vF4XXDgXYxaUjxVDJdYLx
Visual Studio Pro 2017
【準備】
1)「Visual Studio 2017 Professional」をインストールする。
1-1)
VisualStudioインストーラを起動(vs_professional__515800772.1574310941.exe)
1-2)
インストールコンソールから、「C++によるデスクトップ開発」を選択
1-3)
「全部ダウンロードしてから、インストールする」を選択
1-4)
インストールパッケージを30分程度でダウンロードする
1-5)
ダウンロード後、60分程度でインストールを実行する
2)Perlインストール
2-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads
5.26より新しいのActiivePerlは、VC-WIN32をサポートしていない。
そのため、ActivePerlを使う場合は、5.26以前のActivePerlを使う必要がある。
2-2)コマンドプロンプト上でバージョン確認。
perl --version
3)NASMインストール
3-1)NASMをインストールする。
link:http://www.nasm.us/
3-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。
3-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。
3-4)コマンドプロンプト上でバージョン確認。
nasm --version
4)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source
3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c
3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86
【ビルド手順】
1) スタートメニューから「VS 2017 用 x64_x86 Cross Tools コマンド プロンプト」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL"
→Configure VC-WIN32:Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。
→--prefix:OpenSSLビルド生成物の格納先を指定する。
→--openssldir:後述のエラーメッセージ2対応方法参照。
蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL" "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。
以下のエラーメッセージが出た場合。
>It looks like you don't have either nmake.exe or dmake.exe on your PATH,
>so you will not be able to execute the commands from a Makefile. You can
>install dmake.exe with the Perl Package Manager by running:
> ppm install dmake
ppm install dmakeを実行する。
4) nmake installを実行する。
■エラーメッセージ1
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64_x86'
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional>cd C:\build_openssl\openssl-1.1.1c
C:\build_openssl\openssl-1.1.1c>perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
Configuring OpenSSL version 1.1.1c (0x1010103fL) for VC-WIN32
Using os-specific seed configuration
Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) (@INC contains: C:/build_openssl/openssl-1.1.1c/util/perl C:/Perl64/site/lib C:/Perl64/lib) at C:/Perl64/lib/ActivePerl/Config.pm line 400.
Compilation failed in require at C:/Perl64/site/lib/ExtUtils/MakeMaker.pm line 9.
BEGIN failed--compilation aborted at C:/Perl64/site/lib/ExtUtils/MakeMaker.pm line 9.
Compilation failed in require at C:/Perl64/site/lib/IPC/Cmd.pm line 235.
■エラーメッセージ1対応方法
https://qiita.com/takehiakihiro@github/items/97b1b1b9f28a563cc920
[対応方法1]
5.26より新しいのActiivePerlは、VC-WIN32をサポートしていない。
そのため、ActivePerlを使う場合は、5.26以前のActivePerlを使う必要がある。
[対応方法2]
ActivePerlを使えない場合、Strawberry Perlに切り替え
■エラーメッセージ2
*** Installing runtime programs
Copying: apps//openssl.exe to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/openssl.exe
Copying: apps//openssl.pdb to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/openssl.pdb
Copying: ./tools/c_rehash.pl to C:/build_openssl/output/openssl_v1.1.1c/win/x86/bin/c_rehash.pl
Cannot create directory C:/Program Files (x86)/Common Files/SSL: No such file or directory
NMAKE : fatal error U1077: 'C:\Perl64\bin\perl.exe' : リターン コード '0x2'
Stop.
■エラーメッセージ2対応方法
https://github.com/openssl/openssl/issues/6072
回避策は--openssldir="D:\target\dir\SSL"、perl.exeコマンドを呼び出すときにパラメーターを追加することです。
perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
↓(修正後)
perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 --openssldir="C:/build_openssl/output/openssl_v1.1.1c/win/x86/SSL" "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
【参考サイト】
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/
生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html
Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html
【その他】
OpenSSLに使ったビルドツール
https://drive.google.com/drive/folders/1FMBJtZEL_90vF4XXDgXYxaUjxVDJdYLx
2020年3月9日月曜日
<仕事・備忘録>委託プロジェクト実績報告書の発見欠陥数
仕事で2度忘れていた。備忘録する。
発見欠陥数はαを計上すること
■指摘事項分類
α 欠陥(障害ARになるもの)であり、修正が必要なもの
β (障害ARになる)欠陥ではないが修正が必要なもの
γ 修正不要、または修正は作成者の判断に委ねるもの
発見欠陥数はαを計上すること
■指摘事項分類
α 欠陥(障害ARになるもの)であり、修正が必要なもの
β (障害ARになる)欠陥ではないが修正が必要なもの
γ 修正不要、または修正は作成者の判断に委ねるもの
2020年3月7日土曜日
実績のつけ方
.実績の算出
→設計書:ページ数
→Word文書:変更があるページ数
→例えば、あるページの1行を変更した場合、1ページと換算する
→Excel文書:変更があるシート数
→例えば、あるシートの1行を変更した場合、シートを1ページと換算する
→ソースコード:ステップ数
→新規ステップ数+変更ステップ数+削除ステップ
→かぞえちぇおで修正前と修正後の差分(新規・変更・削除)のステップ数がでる
→設計書:ページ数
→Word文書:変更があるページ数
→例えば、あるページの1行を変更した場合、1ページと換算する
→Excel文書:変更があるシート数
→例えば、あるシートの1行を変更した場合、シートを1ページと換算する
→ソースコード:ステップ数
→新規ステップ数+変更ステップ数+削除ステップ
→かぞえちぇおで修正前と修正後の差分(新規・変更・削除)のステップ数がでる
→かぞえちゃお
新規:新規ステップ数
変更:修正ステップ数
削除:削除ステップ数
参考
https://qiita.com/bremen/items/ba5b671cb33fe6029cf5
2020年3月5日木曜日
VisualStudio2008でboostv1.72.0をビルドしてみた(途中)
VisualStudio2008によるboostV1.72.0の ビルド手順を記載する。
■前提
・Windwos10 Pro
・VisualStudio2009 Pro版SP無し
・boostv1.72.0をダウンロードする
https://www.boost.org/users/download/
■手順
1.bootstrap.batの実行
以下手順で、コマンドプロンプトを起動する
スタート > Microsoft Visual Studio 2008 > Visual Studio 2008 コマンド プロンプト
2.> cd <解凍したディレクトリ>
3.以下のコマンドを実行する
> bootstrap.bat
以下のエラーメッセージが表示される
-----------------------------------------------------------------------------
Building Boost.Build engine
ファイルが見つかりません
Failed to build Boost.Build engine.
Please consult bootstrap.log for further diagnostics.
------------------------------------------------------------------------------
4.bootstrap.batの同階層フォロダにbootstrap.logが生成される。
bootstrap.logに以下、error1,error2,error3が出力される。
error1
------------------------------------------------------------------------------
c:\build_trial\boost_1_72_0\tools\build\src\engine\sysinfo.h(41) : error C2864: 'b2::system_info::cpu_core_count_' : static const int データ メンバ以外をクラス内で初期化することはできません
------------------------------------------------------------------------------
error2
------------------------------------------------------------------------------
c:\build_trial\boost_1_72_0\tools\build\src\engine\sysinfo.h(42) : error C2864: 'b2::system_info::cpu_thread_count_' : static const int データ メンバ以外をクラス内で初期化することはできません
------------------------------------------------------------------------------
error3
------------------------------------------------------------------------------
sysinfo.cpp(10) : fatal error C1083: include ファイルを開けません。'thread': No such file or directory
------------------------------------------------------------------------------
error1・error2の直し方
boost_1_72_0\tools\build\src\engine\sysinfo.h
sysinfo.h
boost_1_72_0\tools\build\src\engine\sysinfo.cpp
sysinfo.cpp
[after]
error3の直し方
...(省略)
unsigned int std_thread_hardware_concurrency()
{
return std::thread::hardware_concurrency();
}
[after]
...(省略)
unsigned int std_thread_hardware_concurrency()
{
//return std::thread::hardware_concurrency();
return 0;//この値は処理系のスレット上限になるみたい
}
■補足
Visual Studo2008にて、Boost1.72.0のコンパイルに失敗するケースがある。
要因はboostのバグ。
■前提
・Windwos10 Pro
・VisualStudio2009 Pro版SP無し
・boostv1.72.0をダウンロードする
https://www.boost.org/users/download/
■手順
1.bootstrap.batの実行
以下手順で、コマンドプロンプトを起動する
スタート > Microsoft Visual Studio 2008 > Visual Studio 2008 コマンド プロンプト
2.> cd <解凍したディレクトリ>
3.以下のコマンドを実行する
> bootstrap.bat
以下のエラーメッセージが表示される
-----------------------------------------------------------------------------
Building Boost.Build engine
ファイルが見つかりません
Failed to build Boost.Build engine.
Please consult bootstrap.log for further diagnostics.
------------------------------------------------------------------------------
4.bootstrap.batの同階層フォロダにbootstrap.logが生成される。
bootstrap.logに以下、error1,error2,error3が出力される。
error1
------------------------------------------------------------------------------
c:\build_trial\boost_1_72_0\tools\build\src\engine\sysinfo.h(41) : error C2864: 'b2::system_info::cpu_core_count_' : static const int データ メンバ以外をクラス内で初期化することはできません
------------------------------------------------------------------------------
error2
------------------------------------------------------------------------------
c:\build_trial\boost_1_72_0\tools\build\src\engine\sysinfo.h(42) : error C2864: 'b2::system_info::cpu_thread_count_' : static const int データ メンバ以外をクラス内で初期化することはできません
------------------------------------------------------------------------------
error3
------------------------------------------------------------------------------
sysinfo.cpp(10) : fatal error C1083: include ファイルを開けません。'thread': No such file or directory
------------------------------------------------------------------------------
error1・error2の直し方
boost_1_72_0\tools\build\src\engine\sysinfo.h
sysinfo.h
[before]
------------------------------------------------------------------------------
unsigned int cpu_core_count_ = 0;
unsigned int cpu_thread_count_ = 0;
------------------------------------------------------------------------------
[after]
------------------------------------------------------------------------------
unsigned int cpu_core_count_;
unsigned int cpu_thread_count_;
------------------------------------------------------------------------------
boost_1_72_0\tools\build\src\engine\sysinfo.cpp
[before]
------------------------------------------------------------------------------
b2::system_info::system_info()
{
}
------------------------------------------------------------------------------
[after]
------------------------------------------------------------------------------
b2::system_info::system_info()
{
cpu_core_count_ = 0;
cpu_thread_count_ = 0;
}
------------------------------------------------------------------------------
[before]
------------------------------------------------------------------------------
#include ...(省略)
unsigned int std_thread_hardware_concurrency()
{
return std::thread::hardware_concurrency();
}
------------------------------------------------------------------------------
[after]
------------------------------------------------------------------------------
// #include...(省略)
unsigned int std_thread_hardware_concurrency()
{
//return std::thread::hardware_concurrency();
return 0;//この値は処理系のスレット上限になるみたい
}
------------------------------------------------------------------------------
■補足
Visual Studo2008にて、Boost1.72.0のコンパイルに失敗するケースがある。
要因はboostのバグ。
修正差分コード
https://github.com/boostorg/stacktrace/commit/7379a5cc08e578a5c33cf8a0e3f8d00075f6a1d6
修正ファイル
https://github.com/boostorg/stacktrace/blob/develop/include/boost/stacktrace/detail/frame_msvc.ipp
修正ファイル
https://github.com/boostorg/stacktrace/blob/develop/include/boost/stacktrace/detail/frame_msvc.ipp
2020年3月1日日曜日
ff14 侍
■Level25の戦い方
刃風→陣風→結果:与ダーメジUpバッフ
刃風→士風→結果:攻撃間隔短Upバッフ
遠距離攻撃:燕飛
■Level25の戦い方
刃風→陣風→月光→結果:「月」の閃が付与
前提:「月」の閃
「抜刀術」→「彼岸花」
範囲攻撃:風雅
※敵が3体以上の時連続して使う
■Level45の戦い方
刃風→陣風→花車→結果:「花」の閃が付与
前提:「月」「花」の閃
「抜刀術」→「天下五剣」
敵が3体以上の時使う。
風雅→満月→結果:「月」の閃が付与
風雅→桜花→結果:「花」の閃が付与
■Level50の戦い方
雪風→結果:「雪」の閃が付与
明鏡止水
→コンボ状態に関係なく、月光、花車、雪風の発動時に閃を付与。
乱れ雪月花
→「月」「花」「雪」の閃が溜まった状態で発動可能。
■Level50のスキル回し
刃風→士風→花車
刃風→陣風→月光
明鏡止水→雪風→乱れ雪月花
月光→彼岸花→月光
刃風→士風→花車
刃風→雪風→乱れ雪月花
刃風→陣風→月光
刃風→雪風
刃風→士風→花車
乱れ雪月花
刃風→陣風→月光
刃風→雪風
刃風→士風→花車
乱れ雪月花
明鏡止水→雪風
彼岸花
月光→花車
刃風→雪風→乱れ雪月花
刃風→陣風→結果:与ダーメジUpバッフ
刃風→士風→結果:攻撃間隔短Upバッフ
遠距離攻撃:燕飛
■Level25の戦い方
刃風→陣風→月光→結果:「月」の閃が付与
前提:「月」の閃
「抜刀術」→「彼岸花」
範囲攻撃:風雅
※敵が3体以上の時連続して使う
■Level45の戦い方
刃風→陣風→花車→結果:「花」の閃が付与
前提:「月」「花」の閃
「抜刀術」→「天下五剣」
敵が3体以上の時使う。
風雅→満月→結果:「月」の閃が付与
風雅→桜花→結果:「花」の閃が付与
■Level50の戦い方
雪風→結果:「雪」の閃が付与
明鏡止水
→コンボ状態に関係なく、月光、花車、雪風の発動時に閃を付与。
乱れ雪月花
→「月」「花」「雪」の閃が溜まった状態で発動可能。
■Level50のスキル回し
刃風→士風→花車
刃風→陣風→月光
明鏡止水→雪風→乱れ雪月花
月光→彼岸花→月光
刃風→士風→花車
刃風→雪風→乱れ雪月花
刃風→陣風→月光
刃風→雪風
刃風→士風→花車
乱れ雪月花
刃風→陣風→月光
刃風→雪風
刃風→士風→花車
乱れ雪月花
明鏡止水→雪風
彼岸花
月光→花車
刃風→雪風→乱れ雪月花
2020年2月24日月曜日
Visual Studio C++ でDLL作成
[前提条件]
・Windows 10
・Visual Studio 2019 インストール済み
具体的な手順は以下のサイトを参照する。
チュートリアル: 独自のダイナミックリンクライブラリを作成してC++使用する ()
https://docs.microsoft.com/ja-jp/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019
Backup
https://drive.google.com/drive/folders/1PwTSJMICm0EA1gbfARqJrhYmuv66Ni60
・Windows 10
・Visual Studio 2019 インストール済み
具体的な手順は以下のサイトを参照する。
チュートリアル: 独自のダイナミックリンクライブラリを作成してC++使用する ()
https://docs.microsoft.com/ja-jp/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019
Backup
https://drive.google.com/drive/folders/1PwTSJMICm0EA1gbfARqJrhYmuv66Ni60
OpenSSLの証明書検証
OpenSSLの証明書検証について記載する。
【証明書検証の無効化】
SSL_VERIFY_NONEをパラメータで指定し、OpenSSLのSSL_CTX_set_verify()を呼び出す。
SSL_VERIFY_NONEを指定した場合、OpenSSLの証明書検証結果を無視し、TLS/SSLハンドシェイクを継続する。
【証明書検証の有効化】
証明書検証を実行するための修正点を記載する。
1.証明書検証機能の有効化
SSL_CTX_set_verify()に指定するSSL_VERIFY_NONEをSSL_VERIFY_PEERに変更し、証明書検証機能を有効化する。
2.OpenSSLへの信頼された証明書の読み込み
SSL_CTX_load_verify_locations()を使用して、OpenSSLに信頼された証明書を読み込ませる。信頼された証明書の指定は、第2引数にPEMファイルのファイルパスを指定する。
3.証明書検証エラーのエラーマッピング
TLS通信エラーが発生した場合、証明書検証のエラーメッセージとERR_error_string()で取得した文字列比較をし、一致した場合、証明書検証のエラーとして、マッピングする。
■証明書検証のエラーメッセージ
「error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed」
TLS通信エラーが発生した場合、OpenSSLのエラーメッセージをERR_error_string()で取得することができる。
【参考】
IBMの開発者サイト:独自の信頼できる証明書の提供
https://www.ibm.com/developerworks/jp/linux/library/l-openssl2/index.html
OpenSSL公式サイト
https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_load_verify_locations.html
Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする
https://www.atmarkit.co.jp/ait/articles/1602/05/news039.html
【証明書検証の無効化】
SSL_VERIFY_NONEをパラメータで指定し、OpenSSLのSSL_CTX_set_verify()を呼び出す。
SSL_VERIFY_NONEを指定した場合、OpenSSLの証明書検証結果を無視し、TLS/SSLハンドシェイクを継続する。
【証明書検証の有効化】
証明書検証を実行するための修正点を記載する。
1.証明書検証機能の有効化
SSL_CTX_set_verify()に指定するSSL_VERIFY_NONEをSSL_VERIFY_PEERに変更し、証明書検証機能を有効化する。
2.OpenSSLへの信頼された証明書の読み込み
SSL_CTX_load_verify_locations()を使用して、OpenSSLに信頼された証明書を読み込ませる。信頼された証明書の指定は、第2引数にPEMファイルのファイルパスを指定する。
3.証明書検証エラーのエラーマッピング
TLS通信エラーが発生した場合、証明書検証のエラーメッセージとERR_error_string()で取得した文字列比較をし、一致した場合、証明書検証のエラーとして、マッピングする。
■証明書検証のエラーメッセージ
「error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed」
TLS通信エラーが発生した場合、OpenSSLのエラーメッセージをERR_error_string()で取得することができる。
【参考】
IBMの開発者サイト:独自の信頼できる証明書の提供
https://www.ibm.com/developerworks/jp/linux/library/l-openssl2/index.html
OpenSSL公式サイト
https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_load_verify_locations.html
Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする
https://www.atmarkit.co.jp/ait/articles/1602/05/news039.html
boost ビルド
以下にboost ビルド手順を記載する。
バージョンは、V1.72.0になる。
[前準備]
1.VC++ 2019をインストールする
2.最新のboost ソースコードをダウンロードする。
https://www.boost.org/users/download/#live
[ビルド手順]
1.ダウンロードしたソースコードを解凍する
2.解凍したディレクトリに移動する
> cd (解凍したディレクトリ)
3.bootstrap.batを実行する
> bootstrap.sh
4.b2.exe,bjam.exeが生成されているか確認する
5.boostのビルドを実行する。
以下は、ビルド時のオプションパラメータのサンプル。
// MD ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared release stage
// MDd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared debug stage
// MT ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage
// MTd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static debug stage
// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system
[オプションパラメータの知識]
・show
コンパイル対象のboostライブラリの一覧を表示する。後述のwithにて指定するboostライブラリの名前の検索に使う。
// コンパイル対象のboostライブラリの一覧を表示
b2 --show-libraries
・toolset
boostビルド時に指定するVC++のコンパイルバージョンを指定ができる。
--toolset=msvc-14.2 : VS2019用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0
例:Visual Studio2019の指定。
b2.exe --toolset=msvc-xx.x link=static runtime-link=static
↓[xx.x]を14.2に置き換える。14.2は、Visual Studio2019のバージョン指す。
b2.exe --toolset=msvc-14.2 link=static runtime-link=static
・link
static or shared。
生成物の種類の指定。動的リンク(DLLファイル)。それとも静的リンク(libファイル)
// 動的リンク(DLLファイル)
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage
// 静的リンク(libファイル)
>b2.exe --toolset=msvc-14.2 link=shared runtime-link=static debug stage
・runtime-link
static or shared。
VC++ の標準ライブラリを動的リンク(DLLファイル)。それとも静的リンク(libファイル)するかどうかを指定。
VC++ プロジェクトで /MT を指定する場合には runtime-link=static,
VC++ プロジェクトで /MD を指定する場合には runtime-link=shared にしないとライブラリのリンクで問題が発生するぽっい。
→MT, MTdそれとも、MD, MDd。
・with
ビルドするboostライブラリの指定ができる
// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system
[参考サイト]
以下、boostビルドに参考にさせていただいたサイト。感謝。
Boostライブラリのビルド方法
https://boostjp.github.io/howtobuild.html
--toolset=msvc-10.0 : VS2010用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0
http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?build_boost
Boostのヘッダオンリー or ビルドが必要なライブラリ
https://boostjp.github.io/tips/build_link.html
b2.exe のオプションについて
http://krustf.hateblo.jp/entry/20100804/1280873428
http://umezawa.dyndns.info/wordpress/?p=5823
http://www.kmonos.net/pub/BoostBook/1st/vctk.html
boost::asioでhttps-post
http://eiki.hatenablog.jp/entry/20130617/1371436691
Visutal Studio で Boost C++ Libraries をビルドする
https://clown.cube-soft.jp/entry/20110323/1300886446
boostを真面目にVisualC++2010でコンパイルしてみた
http://krustf.hateblo.jp/entry/20100804/1280873428
バージョンは、V1.72.0になる。
[前準備]
1.VC++ 2019をインストールする
2.最新のboost ソースコードをダウンロードする。
https://www.boost.org/users/download/#live
[ビルド手順]
1.ダウンロードしたソースコードを解凍する
2.解凍したディレクトリに移動する
> cd (解凍したディレクトリ)
3.bootstrap.batを実行する
> bootstrap.sh
4.b2.exe,bjam.exeが生成されているか確認する
5.boostのビルドを実行する。
以下は、ビルド時のオプションパラメータのサンプル。
// MD ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared release stage
// MDd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=shared debug stage
// MT ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage
// MTd ランタイム用ライブラリをビルド
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static debug stage
// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system
[オプションパラメータの知識]
・show
コンパイル対象のboostライブラリの一覧を表示する。後述のwithにて指定するboostライブラリの名前の検索に使う。
// コンパイル対象のboostライブラリの一覧を表示
b2 --show-libraries
・toolset
boostビルド時に指定するVC++のコンパイルバージョンを指定ができる。
--toolset=msvc-14.2 : VS2019用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0
例:Visual Studio2019の指定。
b2.exe --toolset=msvc-xx.x link=static runtime-link=static
↓[xx.x]を14.2に置き換える。14.2は、Visual Studio2019のバージョン指す。
b2.exe --toolset=msvc-14.2 link=static runtime-link=static
・link
static or shared。
生成物の種類の指定。動的リンク(DLLファイル)。それとも静的リンク(libファイル)
// 動的リンク(DLLファイル)
>b2.exe --toolset=msvc-14.2 link=static runtime-link=static release stage
// 静的リンク(libファイル)
>b2.exe --toolset=msvc-14.2 link=shared runtime-link=static debug stage
・runtime-link
static or shared。
VC++ の標準ライブラリを動的リンク(DLLファイル)。それとも静的リンク(libファイル)するかどうかを指定。
VC++ プロジェクトで /MT を指定する場合には runtime-link=static,
VC++ プロジェクトで /MD を指定する場合には runtime-link=shared にしないとライブラリのリンクで問題が発生するぽっい。
→MT, MTdそれとも、MD, MDd。
・with
ビルドするboostライブラリの指定ができる
// MD ランタイム用の特定ライブラリ(例system)をビルド
b2.exe --toolset=msvc-14.2 link=static runtime-link=static --with-system
[参考サイト]
以下、boostビルドに参考にさせていただいたサイト。感謝。
Boostライブラリのビルド方法
https://boostjp.github.io/howtobuild.html
--toolset=msvc-10.0 : VS2010用,VS2005の場合はmsvc-8.0,VS2008の場合はmsvc-9.0
http://www.slis.tsukuba.ac.jp/~fujisawa.makoto.fu/cgi-bin/wiki/index.php?build_boost
Boostのヘッダオンリー or ビルドが必要なライブラリ
https://boostjp.github.io/tips/build_link.html
b2.exe のオプションについて
http://krustf.hateblo.jp/entry/20100804/1280873428
http://umezawa.dyndns.info/wordpress/?p=5823
http://www.kmonos.net/pub/BoostBook/1st/vctk.html
boost::asioでhttps-post
http://eiki.hatenablog.jp/entry/20130617/1371436691
Visutal Studio で Boost C++ Libraries をビルドする
https://clown.cube-soft.jp/entry/20110323/1300886446
boostを真面目にVisualC++2010でコンパイルしてみた
http://krustf.hateblo.jp/entry/20100804/1280873428
2020年1月21日火曜日
2019年11月27日水曜日
備忘録:Windwosの共有メモリの詳細なサイト
備忘録として、Windwosの共有メモリの詳細なサイトのURLを残す。
共有メモリの解説として
http://chokuto.ifdef.jp/advanced/sharedmem.html
サンプルコードとして
https://www.wabiapp.com/WabiSampleSource/windows/shared_memory.html
共有メモリの解説として
http://chokuto.ifdef.jp/advanced/sharedmem.html
サンプルコードとして
https://www.wabiapp.com/WabiSampleSource/windows/shared_memory.html
2019年10月17日木曜日
VisualStudoでコンパイル時にVisual C++ランタイムを静的リンクする方法
■前提条件
・Visual Studio C++環境
■手順
※Visual Studioのバージョンが異なっても同じはず。自分はVisual Studio Pro 2008 C++で確認した。
1.VisualStudoを起動する
2.[メニュー」→「プロジェクト」→「xxxx のプロパティ」
→xxxx のプロパティページ ダイアログが表示する
.[構成プロパティ]→「C/C++」→[コード生成]→[ランタイムライブラリ]
→「マルチスレッド DLL (/MD)」に変更する。
■静的リンク
「マルチスレッド (/MT)」
「マルチスレッド デバッグ (/MTd)」
■動的リンク
「マルチスレッド DLL (/MD)」
「マルチスレッド デバッグ DLL (/MDd)」
Release版
「マルチスレッド (/MT)」
「マルチスレッド DLL (/MD)」
Debug版
「マルチスレッド デバッグ (/MTd)」
「マルチスレッド デバッグ DLL (/MDd)」
参考サイト
動的リンクと静的リンクについて
https://ohwhsmm7.blog.fc2.com/blog-entry-78.html
・Visual Studio C++環境
■手順
※Visual Studioのバージョンが異なっても同じはず。自分はVisual Studio Pro 2008 C++で確認した。
1.VisualStudoを起動する
2.[メニュー」→「プロジェクト」→「xxxx のプロパティ」
→xxxx のプロパティページ ダイアログが表示する
.[構成プロパティ]→「C/C++」→[コード生成]→[ランタイムライブラリ]
→「マルチスレッド DLL (/MD)」に変更する。
■静的リンク
「マルチスレッド (/MT)」
「マルチスレッド デバッグ (/MTd)」
■動的リンク
「マルチスレッド DLL (/MD)」
「マルチスレッド デバッグ DLL (/MDd)」
Release版
「マルチスレッド (/MT)」
「マルチスレッド DLL (/MD)」
Debug版
「マルチスレッド デバッグ (/MTd)」
「マルチスレッド デバッグ DLL (/MDd)」
参考サイト
動的リンクと静的リンクについて
https://ohwhsmm7.blog.fc2.com/blog-entry-78.html
2019年10月16日水曜日
OpenSSL1.1.1c(TLS.1.3対応版)のビルド(VisualStudio 2019版)
【ビルド環境】
Visual Studio Pro 2019
【準備】
1)Perlインストール
1-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads
1-2)コマンドプロンプト上でバージョン確認。
perl --version
2)NASMインストール
2-1)NASMをインストールする。
link:http://www.nasm.us/
2-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。
2-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。
2-4)コマンドプロンプト上でバージョン確認。
nasm --version
3)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source
3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c
3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86
【ビルド手順】
1) スタートメニューから「x64_x86 Cross Tools Command Prompt for VS 2019」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
→Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。
蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。
4) nmake installを実行する。
参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/
生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html
Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html
Visual Studio Pro 2019
【準備】
1)Perlインストール
1-1) Perlをインストールする。選択肢はデフォルトで実施。
link:https://www.activestate.com/activeperl/downloads
1-2)コマンドプロンプト上でバージョン確認。
perl --version
2)NASMインストール
2-1)NASMをインストールする。
link:http://www.nasm.us/
2-2)nasmのzipをダウンロードし、解凍する。
※openSSLビルド環境構築先が、Win10x64なので、nasm-2.14.02-win64.zipをダウンロード。
2-3)NASMのインストール先フォルダを、環境変数の「Path」に追加する。
2-4)コマンドプロンプト上でバージョン確認。
nasm --version
3)OpenSSL
3-1)OpenSSLのソースコードをダウンロードする。
link:https://www.openssl.org/source
3-2) OpenSSLのソースコードを解凍する。
解凍先例:C:\build_openssl\openssl-1.1.1c
3-3)OpenSSLコンパイル生成先フォルダを作成する。
例:C:\build_openssl\output\openssl_v1.1.1c\win\x86
【ビルド手順】
1) スタートメニューから「x64_x86 Cross Tools Command Prompt for VS 2019」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd C:\build_openssl\openssl-1.1.1c
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
→Windwos32ビット版OpenSSLがビルドする。今回はWindwos32ビット版のOpenSSLが必要だったので、こっちを指定する。
蛇足だが、Visual C++ランタイムを静的リンクする際は、以下のコマンドでできるみたい。
コマンド例)perl Configure VC-WIN32 --prefix=C:/build_openssl/output/openssl_v1.1.1c/win/x86 "CFLAGS=/W3 /wd4090 /nologo /O2 /WX /MT"
"CFLAGS=/MT"の指定は、C:\build_openssl\openssl-1.1.1c\makefileのCFLAGSの設定になるみたい。
4) nmake installを実行する。
参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/
生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html
Visual C++ランタイムの静的リンク
https://www.picolix.jp/blog/2018/12/openssl-111a-tls-13-smail-tls-13.html
2019年9月20日金曜日
python メモ
pythonの備忘録を記載する
--------------------------------------------------------------------------------------------
メモ
--------------------------------------------------------------------------------------------
■比較演算子
A in B AがB(リストやタプル)に含まれている時にTrueを返す
■python while文 for文の使い分け
[for文]
ループする回数が判明してるに使う。
例えば、リストの総要素回数
[while文]
ループする回数が判明していない時に、条件式を規定して、ループする。
■pyhon アンパック1
hoge = (0, 1, 2)
a, b, c = hoge
print(a)
print(b)
print(c)
>> 0
>> 1
>> 2
hoge = [0, 1, 2]
a, b, c = hoge
print(a)
print(b)
print(c)
>> 0
>> 1
>> 2
■pyhon アンパック2
タプルは丸括弧を省略可。以下のように複数の変数に複数の値を1行で代入できる。
a, b = 0, 1
print(a)
print(b)
>> 0
>> 1
■pycharn ショートカット
・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )
--------------------------------------------------------------------------------------------
メモ
--------------------------------------------------------------------------------------------
■比較演算子
A in B AがB(リストやタプル)に含まれている時にTrueを返す
■python while文 for文の使い分け
[for文]
ループする回数が判明してるに使う。
例えば、リストの総要素回数
[while文]
ループする回数が判明していない時に、条件式を規定して、ループする。
■pyhon アンパック1
hoge = (0, 1, 2)
a, b, c = hoge
print(a)
print(b)
print(c)
>> 0
>> 1
>> 2
hoge = [0, 1, 2]
a, b, c = hoge
print(a)
print(b)
print(c)
>> 0
>> 1
>> 2
■pyhon アンパック2
タプルは丸括弧を省略可。以下のように複数の変数に複数の値を1行で代入できる。
a, b = 0, 1
print(a)
print(b)
>> 0
>> 1
■pycharn ショートカット
・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )
2019年9月19日木曜日
Visual Studio
Visual Studioの備忘録を記載する
--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■指定行への移動
ctrl+g
--------------------------------------------------------------------------------------------
つまづいた問題
--------------------------------------------------------------------------------------------
・元のバージョンと完全に一致するソースファイルを必要とする
--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■指定行への移動
ctrl+g
--------------------------------------------------------------------------------------------
つまづいた問題
--------------------------------------------------------------------------------------------
■デバッガでブレイクポイントに止まらない症状の対策
メニューバーから「ツール > オプション > デバッグ 」に行って、以下チェックボックスをOFFにする・元のバージョンと完全に一致するソースファイルを必要とする
2019年7月19日金曜日
boost C++ std::vector ループ中に要素を削除する
基本的には以下の方針でループ中に条件に一致する要素を削除できる
auto itr = numbers.begin();
while (itr != numbers.end())
{
if(((*itr) == a) || ((*itr) == b))// 削除条件の判定
{
// erase関数の返り値で次要素のポインタが返る
else
{
itr++;
}
}
auto itr = numbers.begin();
while (itr != numbers.end())
{
if(((*itr) == a) || ((*itr) == b))// 削除条件の判定
{
// erase関数の返り値で次要素のポインタが返る
itr = numbers.erase(itr);
}else
{
itr++;
}
}
2019年5月1日水曜日
ApacheServerにTLSv1.3を適用する手順
■ApacheServerにTLSv1.3を適用する。
[ApacheServerのインストール]
注意
・Apacheをインストールする際は、Apache 2.4.37以降を使うこと。
Apache 2.4.37からOpenSSL1.1.1とTLSv1.3をサポートしているため。
手順
1.Apacheをダウンロードする。
ダウンロード先
OpenSSLを同梱したApacheをダウンロードする。
・Apache Haus
https://www.apachehaus.com/cgi-bin/download.plx
・個人(win32ビット対応のApacheServer)
https://emg-my.sharepoint.com/:u:/r/personal/s-tsuruda_eandm_co_jp/Documents/tools/ApacheServer/httpd-2.4.39-o111b-x86-vc15.zip?csf=1&e=mJgi2i
.ダウンロードした「httpd-2.4.39-o111b-x86-vc15.zip」ファイルを解凍します。
例:c:\Apache\
2.Apache設定ファイル(httpd.conf)の編集
httpd.confの格納先
例:C:\Apache\Apache24\conf
[ServerRoot]
--------------------------------------------------------------------------------
修正前
Define SRVROOT "/Apache24"
ServerRoot "${SRVROOT}"
修正後
Define SRVROOT "C:/Apache/Apache24"
ServerRoot "${SRVROOT}"
--------------------------------------------------------------------------------
[Listen]
--------------------------------------------------------------------------------
修正前
Listen 80
修正後
Listen 172.27.67.146:80
--------------------------------------------------------------------------------
[ServerName]
--------------------------------------------------------------------------------
修正前
ServerName localhost:80
修正後
ServerName 172.27.67.146:80
--------------------------------------------------------------------------------
[DocumentRoot]
--------------------------------------------------------------------------------
修正前
DocumentRoot "${SRVROOT}/htdocs"
修正後
DocumentRoot "C:/Apache/Apache24/htdocs"
--------------------------------------------------------------------------------
3.秘密鍵(server.key)の生成
Apacheインストールディレクトリのbinに移動して、以下のコマンドを実行します。
C:\Apache\Apache24\bin>openssl.exe genrsa -out ..\conf\server.key 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
...............................++++++
.............................................++++++
e is 65537 (0x10001)
4.公開鍵(server.csr)の生成
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>openssl.exe req -new -key ..\conf\server.key -out ..\conf\server.csr -config ..\conf\openssl.cnf
.csr -config ..\conf\openssl.cnf
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Section
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
Email Address []:foo@bar.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
5.証明書(server.crt)の生成
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>openssl.exe x509 -in ..\conf\server.csr -out ..\conf\server.crt -req -signkey ..\conf\server.key -days 365
-req -signkey ..\conf\server.key -days 365
Loading 'screen' into random state - done
Signature ok
subject=/C=JP/ST=Tokyo/L=City/O=Company/OU=Section/CN=127.0.0.1/emailAddress=foo@bar.com
Getting Private key
5.Apacheインストール
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k install
6.Apacheの起動方法
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k start
何も表示されずに、入力欄が表示されたら、ブラウザを起動してください。
ブラウザのURL入力欄に、「http://localhost/」と入力し「Enter」を押してこのような画面が表示されたら、Apacheが正常に起動していることになります。
■エラー
「症状」
コンピューターに VCRUNTIME140.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。
「対策」
このエラーは、Visual Studio C++ 2015という開発環境で作成されたソフトウェアの実行時に発生するようです。
上環境で作成されたソフトは実行にランタイムというプログラムが必要ですがインストールされていないので、その旨のエラーが表示されています。
よって、Visual Studio C++ 2015のランタイムをインストールすれば解決します。
ランタイムのインストール方法
マイクロソフト公式ダウンロードセンターにアクセスし、ダウンロード をクリッ
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145
■参考URL
http://www.koikikukan.com/archives/2013/12/03-012345.php
https://qiita.com/naganao/items/fe119b2818479b730c74
https://techacademy.jp/magazine/1846
http://proengineer.internous.co.jp/content/columnfeature/5456
https://http2.try-and-test.net/tls13_apache_conf.html
https://www.unknownengineer.net/entry/2018/11/15/145720
[ApacheServerのインストール]
注意
・Apacheをインストールする際は、Apache 2.4.37以降を使うこと。
Apache 2.4.37からOpenSSL1.1.1とTLSv1.3をサポートしているため。
手順
1.Apacheをダウンロードする。
ダウンロード先
OpenSSLを同梱したApacheをダウンロードする。
・Apache Haus
https://www.apachehaus.com/cgi-bin/download.plx
・個人(win32ビット対応のApacheServer)
https://emg-my.sharepoint.com/:u:/r/personal/s-tsuruda_eandm_co_jp/Documents/tools/ApacheServer/httpd-2.4.39-o111b-x86-vc15.zip?csf=1&e=mJgi2i
.ダウンロードした「httpd-2.4.39-o111b-x86-vc15.zip」ファイルを解凍します。
例:c:\Apache\
2.Apache設定ファイル(httpd.conf)の編集
httpd.confの格納先
例:C:\Apache\Apache24\conf
[ServerRoot]
--------------------------------------------------------------------------------
修正前
Define SRVROOT "/Apache24"
ServerRoot "${SRVROOT}"
修正後
Define SRVROOT "C:/Apache/Apache24"
ServerRoot "${SRVROOT}"
--------------------------------------------------------------------------------
[Listen]
--------------------------------------------------------------------------------
修正前
Listen 80
修正後
Listen 172.27.67.146:80
--------------------------------------------------------------------------------
[ServerName]
--------------------------------------------------------------------------------
修正前
ServerName localhost:80
修正後
ServerName 172.27.67.146:80
--------------------------------------------------------------------------------
[DocumentRoot]
--------------------------------------------------------------------------------
修正前
DocumentRoot "${SRVROOT}/htdocs"
修正後
DocumentRoot "C:/Apache/Apache24/htdocs"
--------------------------------------------------------------------------------
3.秘密鍵(server.key)の生成
Apacheインストールディレクトリのbinに移動して、以下のコマンドを実行します。
C:\Apache\Apache24\bin>openssl.exe genrsa -out ..\conf\server.key 1024
Loading 'screen' into random state - done
Generating RSA private key, 1024 bit long modulus
...............................++++++
.............................................++++++
e is 65537 (0x10001)
4.公開鍵(server.csr)の生成
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>openssl.exe req -new -key ..\conf\server.key -out ..\conf\server.csr -config ..\conf\openssl.cnf
.csr -config ..\conf\openssl.cnf
Loading 'screen' into random state - done
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company
Organizational Unit Name (eg, section) []:Section
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
Email Address []:foo@bar.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
5.証明書(server.crt)の生成
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>openssl.exe x509 -in ..\conf\server.csr -out ..\conf\server.crt -req -signkey ..\conf\server.key -days 365
-req -signkey ..\conf\server.key -days 365
Loading 'screen' into random state - done
Signature ok
subject=/C=JP/ST=Tokyo/L=City/O=Company/OU=Section/CN=127.0.0.1/emailAddress=foo@bar.com
Getting Private key
5.Apacheインストール
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k install
6.Apacheの起動方法
2項と同じディレクトリで以下のコマンドを実行します。
C:\Apache\Apache24\bin>httpd -k start
何も表示されずに、入力欄が表示されたら、ブラウザを起動してください。
ブラウザのURL入力欄に、「http://localhost/」と入力し「Enter」を押してこのような画面が表示されたら、Apacheが正常に起動していることになります。
■エラー
「症状」
コンピューターに VCRUNTIME140.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみてください。
「対策」
このエラーは、Visual Studio C++ 2015という開発環境で作成されたソフトウェアの実行時に発生するようです。
上環境で作成されたソフトは実行にランタイムというプログラムが必要ですがインストールされていないので、その旨のエラーが表示されています。
よって、Visual Studio C++ 2015のランタイムをインストールすれば解決します。
ランタイムのインストール方法
マイクロソフト公式ダウンロードセンターにアクセスし、ダウンロード をクリッ
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145
■参考URL
http://www.koikikukan.com/archives/2013/12/03-012345.php
https://qiita.com/naganao/items/fe119b2818479b730c74
https://techacademy.jp/magazine/1846
http://proengineer.internous.co.jp/content/columnfeature/5456
https://http2.try-and-test.net/tls13_apache_conf.html
https://www.unknownengineer.net/entry/2018/11/15/145720
2019年4月25日木曜日
■目的
TLS1.3を最優先とし、以下優先度でサーバに対して、TLS通信を試みる。
優先1. TLS1.3
優先2. TLS1.2
優先3. TLS1.1
優先4. TLS1.0
TLS通信のコネクションが確立したTLSバージョンで、サーバと通信を行なう。
■調査結果
[調査1]
SSL_CTX_newにセットする関数は?
[結果]
TLS_client_method()をセットする。
前述の関数は、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3を使えるようになる。
参考サイト
https://www.openssl.org/docs/man1.1.1/man3/SSLv23_client_method.html
[調査2]
特定のTLSバージョンのみでTLS通信を試みるには?
[結果]
TLS_client_method()をそのまま使うと、SSLv3、TLSv1、TLSv1.1、TLSv1.2、TLSv1.3でTLS通信を試みる。そのため、特定のTLSバージョンのみでTLS通信を試みる場合、以下の手順で使用可能なプロトコルを制限する。
例えば、TLSv1.3のみを利用したい場合、
// TLSv1.3
long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
SSL_CTX *m_sslContext = SSL_CTX_new(TLS_client_method());
SSL_CTX_set_options(m_sslContext, flags);
// TLSv1.2
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1;
// TLSv1.1
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_2;
// TLSv1.0
// long flags=SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2;
参考サイト
https://www.openssl.org/docs/manmaster/man3/SSLv23_client_method.html
以下のOpenSSLの関数を用いて、SSL/TLS通信処理時にサポートするTLSのバージョンの最小バージョン、最大バージョンを指定できる。
SSL_CTX_set_min_proto_version()
SSL_CTX_set_max_proto_version()
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_min_proto_version.html
[調査3]
調査1,2以外でTLS1.3を使うために何か特別な処理は実装する必要があるか?
[結果]
SSL/TLS通信処理に用いるOpenSSLの関数について、TLS1.3に関する記載がないかOpenSSLのmanualを調べた。
・SSL_CTX_new
TLS1.3の記載有り。TLS_method(), TLS_server_method(), TLS_client_method()を使えって書いてる。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_new.html
・SSL_CTX_set_verify
TLS1.3の記載無し。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_verify.html
・SSL_CTX_set_options
TLS1.3の記載有り。
https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_options.html
・SSL_new
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_new.html
・SSL_set_connect_state
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_set_connect_state.html
・SSL_set_fd
TLS1.3の記載なし。
https://www.openssl.org/docs/manmaster/man3/SSL_set_fd.html
・SSL_connect
TLS1.3の記載有り
https://www.openssl.org/docs/manmaster/man3/SSL_connect.html
■TCPとSSL/TLSの関係
[階層]
OSI階層というもので、TCPとSSL/TLSのレイヤーが違うみたい。
HTTPSの通信はTCP/IPプロトコルスイートとして、
TCPの上層にSSL/TLSがあり、
アプリケーションプロトコルのHTTPプロトコルが載って通信する。
コネクションとセッションは通信の概念として別になり、
TCPでクライアントからWebサーバに対してコネクション(経路)が確立され、
その上でセッション(ブラウザでログイン~ログアウト)があります
イメージ的には以下の感じ。
↑(高階層)
│
│HTTPプロトコル
│SSLハンドシェイクプロトコル
│TLSレコードプロトコル
│TCP/IP
│
↓(低階層)
[処理順]
1.3ウェイ・ハンドシェイクでコネクション(論理的な通信路)を確立。(TCP)
2.TLSハンドシェイクプロトコルのネゴシエーションを行なう。(SSL/TLS)
3.クライアントとサーバ間で実際のhttps通信を行なう。
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526
■セッションとコネクションの違い
https://www.infraexpert.com/study/networking4.html
説明
セッション
セッションは、通信の開始から終了までを管理する1つの単位のことです。
例えば端末の間でセッションが確立すると、通信で使用するアプリケーションが
データ転送可能な状態になります。OSI 7階層の第5層「セッション層」の機能です。
コネクション
コネクションは、セッションでデータ転送を行うための論理的な回線のことです。
一般的に、OSI 7階層の第4層「トランスポート層」のTCPコネクションを指します。
■参考サイト
・SSL/TLSについてまとめ2018
https://qiita.com/Brutus/items/1015cc01d2e1eb82a526
・【図解】TLSv1.3の仕組みとシーケンス ~QUICに向けた0-RTT, key_shareやHelloRetryRequest, NewSessionTicketとPSKの関係, コネクションとセッションの違い~
https://milestone-of-se.nesuke.com/nw-basic/tls/tls-version-1-3/
OpenSSLライブラリに詳しい
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/
細かすぎて伝わらないSSL/TLS
https://techblog.yahoo.co.jp/infrastructure/ssl-session-resumption/
[C言語] HTTPSクライアントを作ってみる
https://qiita.com/edo_m18/items/41770cba5c166f276a83
OpenSSLライブラリを使ってプログラミング(1)
https://lemniscus.hatenablog.com/entry/20090730/1248970407
sakura editor
sakura editorの備忘録を記載する。
--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■日付の挿入
Alt+;
■時刻の挿入
Alt+:
--------------------------------------------------------------------------------------------
小ネタ
--------------------------------------------------------------------------------------------
メニューバー > 共通設定 > 検索 > Grep
「リアルタイムで表示する」チェックボックスをOnにする。
■複数のソースファイルから一斉置換する
[手順]
1.sakura editorを起動する
2.上部のメニュー>検索>grep置換を押下する
3.Grep置換Popupで諸条件を設定する
4.バックアップ作成のチェックボックスをチェックする
5.置換ボタンを押下する
--------------------------------------------------------------------------------------------
ショートカット
--------------------------------------------------------------------------------------------
■日付の挿入
Alt+;
■時刻の挿入
Alt+:
--------------------------------------------------------------------------------------------
小ネタ
--------------------------------------------------------------------------------------------
■grep実行時、初期状態からリアルタイムで表示する設定
メニューバー > 共通設定 > 検索 > Grep
「リアルタイムで表示する」チェックボックスをOnにする。
■複数のソースファイルから一斉置換する
[手順]
1.sakura editorを起動する
2.上部のメニュー>検索>grep置換を押下する
3.Grep置換Popupで諸条件を設定する
4.バックアップ作成のチェックボックスをチェックする
5.置換ボタンを押下する
2019年3月17日日曜日
変更したソースファイルの差分のstep数を算出する方法
[前提条件]
・かぞえチャオを使う
[手順]
1.変更前ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
2.変更後ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
3.算出方法。差分ステップ数 = 手順.2の実ステップ数 - 手順.1の実ステップ数
[かぞえチャオ]
・ダウンロード先[Vector]
https://www.vector.co.jp/soft/winnt/prog/se251853.html
・念のため
https://emg-my.sharepoint.com/:f:/r/personal/s-tsuruda_eandm_co_jp/Documents/share/tools/counter?csf=1&e=Si6nO0
・かぞえチャオを使う
[手順]
1.変更前ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
2.変更後ソースファイルの実ステップ数を算出する。(結果をCSVに保存)
3.算出方法。差分ステップ数 = 手順.2の実ステップ数 - 手順.1の実ステップ数
[かぞえチャオ]
・ダウンロード先[Vector]
https://www.vector.co.jp/soft/winnt/prog/se251853.html
・念のため
https://emg-my.sharepoint.com/:f:/r/personal/s-tsuruda_eandm_co_jp/Documents/share/tools/counter?csf=1&e=Si6nO0
2019年1月2日水曜日
pycharn ショートカット
・コードの整形( Ctrl + Alt + L )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )
・コメントアウト( Ctrl + / )
・関数や変数の名前変更( Shift + F6 )
・関数などの定義を確認する( Ctrl + Shift + I )
・ファイルの新規作成( Alt + Insert )
・クリッップボード履歴(Ctrl + Shift + V )
・タブ移動( Ctrl + Tab )
・コードの改善提案の表示( Alt + Enter )
2018年12月25日火曜日
OpenSSL1.1.1(TLS.1.3対応版)のビルド
【ビルド環境】
Visual Studio 2008 SP1
【準備】
1) Perlをインストールする。
ダウンロードリンク例:https://www.activestate.com/activeperl/downloads
2) NASMをインストールする。
ダウンロードリンク例:http://www.nasm.us/
3) NASMのインストール先フォルダを、環境変数の「Path」に追加する。
4) OpenSSLのソースコードをダウンロードする。
ダウンロードリンク例:https://www.openssl.org/source
5) OpenSSLのソースコードを解凍する。
解凍先例:C:\openssl-1.1.1a
6)OpenSSLコンパイル先フォルダを作成する。
コンパイル先例:C:\openssl\win\x86
【ビルド手順】
1) スタートメニューから「Visual Studio 2008のコマンドプロンプト」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd c:\openssl-1.1.1a
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
4) nmake installを実行する。
参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/
生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html
Visual Studio 2008 SP1
【準備】
1) Perlをインストールする。
ダウンロードリンク例:https://www.activestate.com/activeperl/downloads
2) NASMをインストールする。
ダウンロードリンク例:http://www.nasm.us/
3) NASMのインストール先フォルダを、環境変数の「Path」に追加する。
4) OpenSSLのソースコードをダウンロードする。
ダウンロードリンク例:https://www.openssl.org/source
5) OpenSSLのソースコードを解凍する。
解凍先例:C:\openssl-1.1.1a
6)OpenSSLコンパイル先フォルダを作成する。
コンパイル先例:C:\openssl\win\x86
【ビルド手順】
1) スタートメニューから「Visual Studio 2008のコマンドプロンプト」を起動する。
2) cdコマンドでOpenSSLのソースコードのフォルダへ移動する。
コマンド例)cd c:\openssl-1.1.1a
3) perlのコマンドを実行する。
コマンド例)perl Configure VC-WIN32 --prefix=C:/openssl/win/x86
4) nmake installを実行する。
参考サイト
ビルド時のコマンド
https://www.sumirelab.com/docs/tech/windows-%E3%81%A7-openssl-%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%A1%E3%83%A2/
生成物について
http://lfsbookja.osdn.jp/svn-sysdja/chapter06/openssl.html
OpenSSLのTLS1.3の調査のまとめ
■OpenSSLがTLSv1.3のサポートを開始したバージョンは?
OpneSSLv1.1.1からTLSv1.3のサポートを開始しています。
OpneSSLv1.1.1のリリース日は、2018/9/11
OpenSSLの公式ブログ
https://www.openssl.org/blog/blog/2018/09/11/release111/
■OpneSSLv1.1.1のバイナリファイルの入手方法?
OpenSSLの公式サイトは、バイナリファイルは、公開されていません。
バイナリファイルを入手するには方法は主に2通りあります。
・1個目の入手方法
OpenSSLの公式サイトから対象バージョンのソースコードをダウンロードし、自前でOpenSSLをビルドする。
・2個目の入手方法
サードパーティがインターネット上で公開しているバイナリファイルをダウンロードする。
サードパーティのOpenSSL関連バイナリファイルダウンロード先
https://wiki.openssl.org/index.php/Binaries
■1個目の方法(自前でOpenSSLをビルド)のフィジビリテ確認
OpenSSLv1.1.1のソースコードをダウンロードして、ビルドを行ないました。
ビルドは成功しました。
OpenSSLv1.1.1のビルド手順をまとめたものを以下に格納しました。
https://promise-redmoon.blogspot.com/2018/12/openssltls13study.html
https://promise-redmoon.blogspot.com/2018/12/openssltls13study.html
2008年9月24日水曜日
C# Dictionaryの使い方
//
Dictionary openWith = new Dictionary();
// Dictionaryに要素を追加する。
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
// もしも新しいキーがDictionaryに存在していたら、Addメソッドは例外を投げる
try
{
openWith.Add("txt", "winword.exe");
}catch (ArgumentException)
{
Console.WriteLine("An element with Key = \"txt\" already exists.");
}
// キーが存在していても、上書きが出来る。
openWith["rtf"] = "winword.exe";
// 存在していないキーを指定したら、例外が発生する。
try
{
openWith["tif"];
}catch(KeyNotFoundException)
{
}
Dictionary
// Dictionaryに要素を追加する。
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
// もしも新しいキーがDictionaryに存在していたら、Addメソッドは例外を投げる
try
{
openWith.Add("txt", "winword.exe");
}catch (ArgumentException)
{
Console.WriteLine("An element with Key = \"txt\" already exists.");
}
// キーが存在していても、上書きが出来る。
openWith["rtf"] = "winword.exe";
// 存在していないキーを指定したら、例外が発生する。
try
{
openWith["tif"];
}catch(KeyNotFoundException)
{
}
C# list型の使い方
//
List dinosaurs = new List();
// listに要素を追加する
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
// listの現在の容量
dinosaurs.Capacity;
// listの現在の要素数
dinosaurs.Count;
// 要素の中に"Deinonychus"が含まれていないのでFalseが返ってくる
dinosaurs.Contains("Deinonychus"));
// 2番目の要素に挿入
dinosaurs.Insert(2, "Compsognathus);
// 要素の"Compsognathus"を削除する
dinosaurs.Remove("Compsognathus");
// 要素は全て削除。容量はそのまま残る
dinosaurs.Clear();
List
// listに要素を追加する
dinosaurs.Add("Tyrannosaurus");
dinosaurs.Add("Amargasaurus");
// listの現在の容量
dinosaurs.Capacity;
// listの現在の要素数
dinosaurs.Count;
// 要素の中に"Deinonychus"が含まれていないのでFalseが返ってくる
dinosaurs.Contains("Deinonychus"));
// 2番目の要素に挿入
dinosaurs.Insert(2, "Compsognathus);
// 要素の"Compsognathus"を削除する
dinosaurs.Remove("Compsognathus");
// 要素は全て削除。容量はそのまま残る
dinosaurs.Clear();
2008年9月23日火曜日
C# stack型の使い方
Stack numbers = new Stack();
// 要素追加
numbers.Push("one");
numbers.Push("two");
// 要素の取り出し
numbers.Pop()
// スタックのコピー
Stack stack2 = new Stack(numbers.ToArray());
// numbers.Countはstackの要素数を数える。
string[] array2 = new string[numbers.Count * 2];
// array2 にコピーします。
numbers.CopyTo(array2, numbers.Count);
// コンストラクタでarray2をarray3にコピー
Stack stack3 = new Stack(array2);
// "four"の要素がないからFalseを返す
stack2.Contains("four"));
// 要素追加
numbers.Push("one");
numbers.Push("two");
// 要素の取り出し
numbers.Pop()
// スタックのコピー
Stack
// numbers.Countはstackの要素数を数える。
string[] array2 = new string[numbers.Count * 2];
// array2 にコピーします。
numbers.CopyTo(array2, numbers.Count);
// コンストラクタでarray2をarray3にコピー
Stack
// "four"の要素がないからFalseを返す
stack2.Contains("four"));
登録:
投稿 (Atom)