こんにちはー
今日はkatahiromz/Win32Templates を読むよ。
https://github.com/katahiromz/Win32Templates
課題は現在ReactOSにimm32_apitestが入ってなくて どうやっていれるんだっけなーっていうところです
configure -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1
ENABLE_ROSTESTSを付けないとテストは入らないよ。
テストプログラムは C:\ReactOS\bin にある。
なるほどです
Win32Templatesの Common/Recent.c を読みましょう。
<tchar.h>はCRT (C RunTime) のジェネリックテキストマッピングを定義している。
RECENT構造体が定義されているね。ANYSIZE_ARRAYは1に等しい。これは構造体の最後にデータがくっついてくるということです。
- Recent_New関数は構造体データを確保。
- callocを参照。これはゼロクリアするmallocですね。ということはapszもNULLで埋めるのです。
- Recent_Removeは要素を削除。途中に定義されるSWAPマクロは要素を交換していますね。
- Recent_Addは要素を追加。ここでもSWAPを使っています。
- Recent_DeleteはRECENTを破棄しています。
- Recent_UnitTestは単体テストですね。
RECENTは最近使ったファイルを管理する構造体です。 次は、Win32TemplatesのTextFileAppを読みましょう。ここでRECENTが使われています。
さて、各フォルダにCMakeLists.txtというファイルがあります。これはCMakeというビルド自動化ツールでビルドするための設定ファイルです。 今までバッチファイル(*.cmd; *.bat)でビルドしていましたが、それではLinux対応やVisual Studio対応ができません。CMakeを使うことでVisual Studio用にビルドすることが可能になります。 CMakeを自分の環境にインストールし、Visual Studio のプロンプトを起動し、CDコマンドで移動し、「cmake -G」を実行するとジェネレータの一覧が表示されます。「cmake -G "ジェネレータ"」を実行すれば、ビルドのためのファイルが出力されます。
RosBEにもCMakeがあります。RosBEを起動し、CDコマンドで移動、「cmake -G Ninja .」を実行、「ninja」を実行すればCMake&Ninjaでビルドできます。
今日はここまで。
質問が一つあります
これは構造体の最後にデータがくっついてくるということです。
この部分ですが、配列の要素数が1な理由がいまいちわからないです
ポインタのポインタ、的な役割があるのでしょうか?
昔のコンパイラは配列のサイズに「0」が使えなかったんです。
0なら配列である必要が見えないのですが...
連続したメモリブロックに配置する必要がある場合は、ポインタを使うとブロックが連続にならなくなります。
(nCapacity - 1) * sizeof(LPTSTR)
ここでRECENT構造体に追加のデータをRECENTに連続して追加しています。
ここでapsz[2]にアクセスするとどうなりますか。
なるほど、ちゃんとメモリを割り当てられているからアクセスできる、と
今日はこれで失礼します。
ありがとうございました