Visual C++ Express 2005 Beta2で実行する場合のメモ
2005年7月4日
川俣晶
Visual C++ Express 2005のBeta1とBeta2では、非互換の修正が行われています。
これにより、サンプルソースが一致しない部分、修正を要する部分があります。
リスト1 §
main()
↓
int main()
図16 §
main()
↓
int main()
図17 §
リスト全体を以下の通りに差し替えます。ただし、このリストは自動的に生成されるもので、入力する必要はありません。
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
return 0;
}
リスト2: §
リスト全体を以下の通りに差し替えます。
Finalizeメソッドの実装は、先頭に!記号を付けたデストラクタに似た構文に変更されています。
#include "stdafx.h"
using namespace System;
ref class RefClass
{
public:
RefClass()
{
Console::WriteLine("RefClass Constructed");
}
!RefClass()
{
Console::WriteLine("RefClass Finalized");
}
};
class TraditionalClass
{
public:
TraditionalClass()
{
Console::WriteLine("TraditionalClass Constructed");
}
virtual ~TraditionalClass()
{
Console::WriteLine("TraditionalClass Destructed");
}
};
int main()
{
TraditionalClass * t = new TraditionalClass();
RefClass ^r = gcnew RefClass();
delete t;
Console::WriteLine("_tmain done");
return 0;
}
リスト3: §
リスト全体を以下の通りに差し替えます。
主に引数の扱いの変更に伴って、コードを一部変更しています。
#include "stdafx.h"
using namespace System;
using namespace System::IO;
int main(array<System::String ^> ^args)
{
if( args->Length != 4 )
{
Console::WriteLine( L"usage: 入力ファイル名 入力エンコーディング名 出力ファイル名 出力エンコーディング名" );
return 2;
}
String ^sourceFileName = args[0];
String ^sourceEncodingName = args[1];
String ^destinationFileName = args[2];
String ^destinationEncodingName = args[3];
StreamReader ^ reader = gcnew StreamReader(sourceFileName,
System::Text::Encoding::GetEncoding(sourceEncodingName));
try
{
StreamWriter ^ writer = gcnew StreamWriter(destinationFileName,false,
System::Text::Encoding::GetEncoding(destinationEncodingName));
try
{
while( true )
{
String ^ s = reader->ReadLine();
if( s == nullptr ) break;
writer->WriteLine(s);
}
}
finally
{
writer->Close();
}
}
finally
{
reader->Close();
}
return 0;
}
以上