Skip to content

Latest commit

 

History

History
84 lines (49 loc) · 3.45 KB

2022-03-24.md

File metadata and controls

84 lines (49 loc) · 3.45 KB

2022-03-24

こんにちはー

今日はkatahiromz/Win32Templates を読むよ。

https://github.com/katahiromz/Win32Templates

テストのビルドについて

課題は現在ReactOSにimm32_apitestが入ってなくて どうやっていれるんだっけなーっていうところです

configure -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1

ENABLE_ROSTESTSを付けないとテストは入らないよ。

テストプログラムは C:\ReactOS\bin にある。

なるほどです

実習 Win32Templates

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が使われています。

CMakeについて

さて、各フォルダに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でビルドできます。

今日はここまで。

構造体とANYSIZE_ARRAYについて

質問が一つあります

これは構造体の最後にデータがくっついてくるということです。

この部分ですが、配列の要素数が1な理由がいまいちわからないです

ポインタのポインタ、的な役割があるのでしょうか?

昔のコンパイラは配列のサイズに「0」が使えなかったんです。

0なら配列である必要が見えないのですが...

連続したメモリブロックに配置する必要がある場合は、ポインタを使うとブロックが連続にならなくなります。

(nCapacity - 1) * sizeof(LPTSTR)

ここでRECENT構造体に追加のデータをRECENTに連続して追加しています。

ここでapsz[2]にアクセスするとどうなりますか。

なるほど、ちゃんとメモリを割り当てられているからアクセスできる、と

今日はこれで失礼します。

ありがとうございました


戻る | 次へ