| #include <windows.h>
#include <stdio.h>
void type_01();
void type_02();
void type_03();
// *********************************************************
// バッファクラス
// *********************************************************
class buffer {
public:
// ***************************************
// コンストラクタ1
// ***************************************
buffer(){
buffer::nSize = 1024;
buffer::lpBuffer = NULL;
buffer::hMem = GetProcessHeap();
buffer::lpBuffer =
(LPTSTR)HeapAlloc(buffer::hMem, 0, 1024);
if ( buffer::lpBuffer == NULL ) {
printf( "%s\n", "メモリの確保に失敗しました" );
}
}
// ***************************************
// コンストラクタ2
// ***************************************
buffer( int nSize ){
buffer::nSize = nSize;
buffer::lpBuffer = NULL;
buffer::hMem = GetProcessHeap();
buffer::lpBuffer =
(LPTSTR)HeapAlloc(buffer::hMem, 0, buffer::nSize);
if ( buffer::lpBuffer == NULL ) {
printf( "%s\n", "メモリの確保に失敗しました" );
}
}
virtual ~buffer(){
HeapFree( this->hMem, 0, this->lpBuffer );
}
// ***************************************
// キャストオペレータ
// ***************************************
operator char *( )
{
return( this->lpBuffer );
}
// ***************************************
// 代入オペレータ
// ***************************************
void operator = ( LPTSTR str )
{
lstrcpy( this->lpBuffer, str );
}
void operator = ( buffer &str )
{
lstrcpy( this->lpBuffer, str.lpBuffer );
}
// ***************************************
// 文字列追加オペレータ
// ***************************************
void operator += ( LPTSTR str )
{
lstrcat( this->lpBuffer, str );
}
void operator += ( buffer &str )
{
lstrcat( this->lpBuffer, str.lpBuffer );
}
LPTSTR lpBuffer;
HANDLE hMem;
int nSize;
};
int main() {
type_01();
type_02();
type_03();
return 0;
}
// *********************************************************
// スタンダード
// *********************************************************
void type_01()
{
LPTSTR lpBuffer = NULL;
HANDLE hMem = GetProcessHeap();
int nSize = 1024;
lpBuffer = (LPTSTR)HeapAlloc(hMem, 0, nSize);
if ( lpBuffer == NULL ) {
printf( "%s\n", "メモリの確保に失敗しました" );
return;
}
// Windows ディレクトリの取得
GetWindowsDirectory( lpBuffer, nSize );
printf( "%s\n", lpBuffer );
HeapFree( hMem, 0, lpBuffer );
}
// *********************************************************
// バッファクラスを使用
// *********************************************************
void type_02()
{
buffer data(1024);
// Windows ディレクトリの取得
GetWindowsDirectory( data.lpBuffer, data.nSize );
printf( "%s\n", data.lpBuffer );
}
// *********************************************************
// オペレータを使用
// *********************************************************
void type_03()
{
buffer data(1024),file;
file = "myfile.txt";
// Windows ディレクトリの取得
GetWindowsDirectory( (LPTSTR)data, data.nSize );
data += "\\system32\\";
data += file;
printf( "%s\n", (LPTSTR)data );
}
| |