今回はライブラリの中から使っている例を見てみます。取り上げるのはEnvironmentクラスの中のCurrentDirectoryプロパティです(一部改変してあります)。

まずはGetterのほうからです。

Static Function CurrentDirectory() As String
	Dim size = GetCurrentDirectory(0, 0)
	Dim p = malloc(SizeOf (TCHAR) * size) As PCTSTR
	GetCurrentDirectory(size, p)
	CurrentDirectory = p
	free(p)
End Function

Dim size = GetCurrentDirectory(0, 0)では必要なバッファの大きさを得ています。次にメモリを確保します。ここではWindows APIを相手にしていますから、pはTHCARへのポインタとしています。そしてこのpに対してGetCurrentDirectoryでカレントディレクトリを取得してから、String型であるCurrentDirectoryへ代入し、pの指すメモリを解放して関数を抜けています。

StrCharとTCHARは異なる場合があるので、真面目にやるならZeroStringなどでメモリを確保してAPI関数からString型変数に直接書き込んでもらう手法は、真面目にやるなら使えません。

さてSetterです。

Static Sub CurrentDirectory(cd As String)
	SetCurrentDirectory(ToTCStr(cd))
End Sub

こちらは滅法簡単でToTCStrで文字の種類を合わせてやっているだけです。

このようにまじめにTCHAR/StrCharの状態がどのようになっていても動くコード書くつもりならこのようにするとよいということです。ただ基本的には全てStringで扱うライブラリを使用し直接APIを使うことがなるべく無いようにしますというよくある文面で締め括ります。

スポンサード リンク

この記事のカテゴリ

  • ⇒ 文字型のまとめ (2)
  • ⇒ 文字型のまとめ (2)