GetWindowTextStrやGetDlgItemStrの要領で文字列を結果として返すラッパを投稿していきます。
コード:
TypeDef GetStr_GetLenProc = *Function(pv As VoidPtr) As DWord
TypeDef GetStr_GetStrProc = *Function(pv As VoidPtr, buf As *Byte, len As DWord) As DWord
Function GetString(pv As VoidPtr, pfnGetLen As GetStr_GetLenProc, pfnGetStr As GetStr_GetStrProc) As String
Dim len As DWord
len = pfnGetLen(pv)
If len = 0 Then Exit Function
GetString = ZeroString(len)
len = pfnGetStr(pv, StrPtr(GetString), len)
#ifdef _AB_VER5
GetString.Length = len
#else
SetDWord(StrPtr(GetString) - SizeOf (DWord), len)
#endif
End Function
本来ならクラスを使ってやりたいところですが,抽象メンバ関数が無いので,通常の関数と関数ポインタを使っていますが,
それさえ目をつぶればテンプレートメソッドパターンになっているはずです。
とにかくこれ単独で使うのではなく,実際のラッパは次以降です。
2006/09/29 AB5に対応させました。