ページ

2014年10月31日金曜日

VC.net 覚書

・MFC・・・マイクロソフトがVisual C++用に開発した、Windows用のアプリケーション構築のためのアプリケーションフレームワーク(クラスライブラリ)である。Active Template Library (ATL)と同様に、Visual C++に同梱される有償のライブラリとなっている。

■.net framework とOSと開発環境
|VisualStudio 2002 2003 2005 2005 2008 2010
|.net framework 1.0 1.1 2.0 3.0 3.5 4.0
|Windows2000 × × × ×
|WindowsXP PRE SP3
|WindowsVista × PRE SP1
|Windows7 × PRE


スタティックメソッド
インスタンスメソッド


^(ハンドル)・・・ポインタを指し示す

namespaceで書いたものは省略が出来る。
上に書いたものが優先順位が高い

MessageBox::Show(a.ToString());
System::Diagnostics::Debug::WriteLine(a.ToString());
System::Diagnostics::Trace::WriteLine("Trace");


ハンドルは ->で 呼び出す。

String型はハンドルでしか宣言出来ない。

■ハンドルとガベージコレクション
・ハンドル型の場合右のアドレスを左のものに明け渡す
・右のものがなくなったら左のものにアドレスを明け渡したままにする。


()をつけるとコンストラクタ
例 this->btnOK = (gcnew System::Windows::Forms::Button())

gcnew = ガベージコレクタnew



◯IndexOFで文字列の中身に一致するものを探す。
例. String^ suji="0123456789";

suji->IndexOf("1")>=0 suji IndexOfを使用することで文字列の中を調べる


double f;
if(double::TryParse("123",f))
{
MessageBox::Show("小数です"); //double型に入るかどうかを判断するだけ
}


◯プロジェクトメニュー → 〇〇プロパティ で、参照設定が使用できる。(VBのコードも使用できるようになる)

◯senderにオブジェクトをテキストオブジェクトと明示してあげる。
例. safe_cast<TextBox^>(sender)->Text
↑テキストボックスオブジェクト

safe_castは派生クラスにキャストすることができる。けれど、オブジェクトがキャストしたものと必ず一致しないとプログラムが落ちてしまう。
dynamic_castは基本クラスにキャストすることが出来る。

◯キャストを行う場合はアサーションを行う
Trace::Assert(sender->GetType()->ToString()=="System.Windows.Forms.TextBox");
アサーションが実行されるとコールスタックが出力される。



DateTime::Now.year
month
day
addyears(100).year
addyears(-100).year





devenv /resetskippkgs devenv.exe

DateTimeでTryParseすると閏年のチェック年月日のチェックを行える。

イベントのValidatingはコントロールの検証(キャンセルなどを行える)
イベントのValidatedはコントロールの検証が終わった後の動作(キャンセルなどを行えない)

VC++は一つのイベントに対して複数の関数を呼べる。
this->btnOK->Click += gcnew System::EventHandler(this, &Form1::btnOK_Click);
this->btnOK->Click += gcnew System::EventHandler(this, &Form1::btnOK_Click);

#pragma region 〇〇関数
VisualStudioを使用している場合この中でくくられたものは展開、折りたたみすることが出来る。
#pragma endregion

//ファイルを強制的に書き込む
System::IO::StreamWriter^ sw =
gcnew System::IO::StreamWriter("c:\\output.txt",false,System::Text::Encoding::GetEncoding("shift_jis"));
sw->WriteLine("一行目");
sw->Close();

StreamWriter("c:\\output.txt",false=ファイル上書き true=追加,エンコーディング);

WriteLineの様にどこにでもあるようなものが名前が下の階層にある場合namespaceに書けれない(例、StreamWriter)

//ファイルを読み込む
System::IO::StreamReader^ sr =
gcnew System::IO::StreamReader("c:\\output.txt",System::Text::Encoding::GetEncoding("shift_jis"));

while(sr->Peek()>-1){ //ファイルの最後まで読み込む
System::Diagnostics::Trace::WriteLine(sr->ReadLine());
}

str->Replace("-","");

C++をコンバートするときにエラーが出る→その回避方法
#prugma warning(disable;4996) ←あまりやってはいけない方法
#define _CRT_SECURE_NO_DUPRECATE 1 ←あまりやってはいけない方法

#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 ←OK




アセンブリインフォ・・・プログラムのバージョンなどを記入するところ。
デフォルトコンストラクタ・・・クラス名と同じ名前のコンストラクタ。

ヘッダファイルにソースコードを全て記入する。

test001::test001(void)
{
Debug::WriteLine("コンストラクタ");
}
!test001()
{
Debug::WriteLine("ファイナライザ");
//デストラクタがガベージコレクトされた場合にファイナライザが呼ばれる。
//アンマネージなものを解放する。
}

~test001()
{
Debug::WriteLine("デストラクタ");
//デストラクタが必ず通るとは限らない
}

マネージ型しかガベージコレクタしない。

①test001^ Test001 = gcnew test001(); //クラスをインスタンス化
②Test001 = gcnew test001(); //クラスをインスタンス化
③System::GC::Collect(); //①でインスタンス化したものを明示的にガベージコレクタする。

オーバーロード・・・関数名が同じで引数や戻り値を変えたもの。

^(アクサンツルコンフレックス)

VC++
  Managed DirectX

C#
  XNA→WPF



DoubleBuffered・・・画像がちらつく場合はTrueにする。

変数をプロパティの様に扱うことが出来るようにする。
       int iNum3;
       public int INum3
       {
           get { return iNum3; }
           set { iNum3 = value; }
       }


リファクタ

ContextSwichDeadlock・・・60秒以上かかる処理にストップをかける
例外のチェックボックスを二つとも外す

0 件のコメント:

コメントを投稿

ZenBack