2013年7月30日火曜日

8回目2013/07/30C#勉強

今日の備忘録を書きます。

簡単にインパクトに書きます。

一つ目が、sandCastleの警告の消し方について
XMLを有効化した時に、警告が一杯出て、非常に見にくいので、警告を消す方法を調べました。
警告番号の1591を除去すると、消えます。
参考ページ
http://www.shise.net/wiki/wiki.cgi?page=C%23%A5%E1%A5%E2

2つ目が、sandCastleの名前空間にコメントを入れる方法
新しいファイルを作らないと、できないみたいです。なんでやねんという感じですが、
それ以外方法を見つけられませんでした。
一応メモです。
参考ページ以下
http://blogs.wankuma.com/yamada/archive/2008/12/24/164922.aspx

3つ目がC#のオーバーライド機能について
C#にはC++と違い、オーバーライドに2つの機能があります。
通常のオーバーライドとnewを使ったオーバーライドです。
違いは継承元の関数の扱いになります。オーバーライドだと、常に継承先の関数が呼び出されますが、
newを使うと、継承元のクラス内から呼び出した場合、継承元の関数を使います。
参考ページ
http://moated.wordpress.com/2010/05/03/c-method%E3%81%AEnew-%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89/


以上になります。
何か間違った点などあれば、ご指摘頂ければ、可能な限り修正致します。

ではではー

2013年7月29日月曜日

7回目2013/07/12C#勉強

今日のC#の備忘録を書きます!

今日の学びは1つで、C#の自動ドキュメント作成ツールについてです。
sandcastleというドキュメント作成ツールがVisualStudio2005からよく使われているみたいです。

以下のページを参考に、ひと通りインストール出来るパッケージがあり、それを入れれば、特に問題ありませんでした。
http://d.hatena.ne.jp/tiri_tomato/20120629/1340922468
http://ufcpp.net/study/csharp/st_comment.html

日本語化するためには以下をダウンロードして、フォルダを指定の場所にコピーすれば、終わりです。
https://code.google.com/p/sandcastle-help-file-builder-japanese-help-file-pack/

注意点としては、上記ページ内に書いてますが、VisualStudio内で、XMLドキュメントを生成するようにしないといけません。
プロジェクトごとに全部設定を変えないといけないです。
警告がすごい出るようになるのが、面倒で、今度また調べたい。

以上です。

これだけで、結構見た目が綺麗なドキュメントツールを作ることができます。
興味がある人は是非お試しあれ。


問題点などあるようでしたら、ご指摘頂ければ可能な限り修正いたします。
よろしくお願いします。

2013年7月24日水曜日

今日のC#の備忘録を書きますー。

今日はC#のテキストボックスを使っていて学んだことです。

一つ目が、入力した文字が16進数かどうかをチェックする方法があるかどうかを調べたところ、
余裕でありました。C#良い!
http://msdn.microsoft.com/ja-jp/library/vstudio/zf50za27.aspx

bool result = Int32.TryParse(textBox_addressReadWrite.Text, System.Globalization.NumberStyles.HexNumber, null, out data);
でチェック可能です。返り値がfalseの時は16進数ではありません。

文字列を変更時に、上記のチェックを入れています。
唯、この場合、文字列が空の場合もエラーを出すので、入力文字列が空の場合のスルー処理も必要です。


2つ目が、テキストボックスの桁数制限です。これはC++にもあったと思います。
プロパディから簡単に設定可能です。
http://program571.blog91.fc2.com/blog-entry-52.html


3つ目に、スレッド処理についてです。
シングルスレッドの限界に直面し、スレッドを利用することで、U_Iを自由に動かせるようにしたい!
でやってみましたが、めっちゃ複雑です。全然理解は足りていないですが、ある程度動くようになりました。
まず、デリゲートとイベントの機能を作る必要が合ったのですが、
public delegate void WindowUpdateHandler(List byteData, string readString, string epcString, bool endResponse);
public event WindowUpdateHandler WindowUpdate;
上記のようなものを作るだけで、OKです。
後は、関数の登録して、使用出来ます。正直、想像していた以上に簡単に使えるので、(理解は未だ完全にできていない。。。)使ってみて、覚えるのが良いです!使えるようになると、関数ポインタをすごい簡単に作れることに気づいて、楽しくなります 笑

4つ目に、スレッド化した後のU_Iの操作についてです。理由はわかっていないですが、新規スレッドから、メインスレッドU_Iのユーザーインターフェースコントロールにアクセスすると、以下のようなエラーがでます。
 
 有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール ‘textBox1′ がアクセスされました。

で、Invokeという関数を使うとうまくいくようになりました。
Invokeを使うと、メインスレッドから、呼び出したことになります。
ここで、注意点としては(僕だけかもしれませんが、)メインスレッドが無限ループに入っているとkInvokeは反応しなくなります。でおろおろすることになります。メインスレッドの無限ループは解除してから、Invokeを実装するようにすると、すごい幸せに実装できます。
参考URLは以下です。
http://blog.ume108.mobi/?p=1654
http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html
http://www.ecoop.net/memo/archives/2007-04-10-2.html

以上です。

何か、間違った点などあれば、ご指摘頂ければ、可能な限り対応します。
ではでは

2013年7月19日金曜日

6回目2013/07/19C#勉強

今日の備忘録を書きます。

今日はシリアル通信部を書いてました。


一つ目が、書き込むタイミングについてで、組み込みのレスポンスはめっちゃ早いことがわかりました。
どれくらい早いかというと、メッセージを送って、次の行を実行する前に、返事が帰ってくる位早いです。だから、メッセージを送る前に準備は完全に終わらせていないと失敗します。ぶるぶる。次から気をつけよう。


2つ目が、Release版で落ちる問題が合ったが、Try-Catchが足りないことが原因の一つでした。それで時間をとられた。。。
改めて、入れる癖を付けようと思いました。

今日は、こんなかんじです。
今日は実機を借りて、開発したんですが、すごい開発しやすかった。エミュレータなり、テスト環境を作ることを本気で考えたいです。でも時間がないのが悩ましい。


何か、間違いなどありましたら、ご指摘ください。
可能な範囲で修正致します。
ではではー

2013年7月17日水曜日

5回目2013/07/10C#勉強

今日も学んだことを書いていきます。

今日はバイトデータ、asc2コード、string、バイナリデータの変換手法についてです。

一つ目が、バイトデータ(アスキーコード)からstringデータを取得する手法について
Encoding.AscⅡ.GetStringを使うと、
string asc2String = Encoding.ASCII.GetString(asc2Byte);
上記の形で、stringデータを取得出来ます。

2つ目にバイトデータ(unicodeデータ)からstringデータを取得する手法について
Encoding.Unicode.GetStringを使うと、
string asc2String = Encoding.Unicode.GetString(asc2Byte);
上記の形で、stringデータを取得出来ます。

3つ目に、stringデータ(16進数)から、intデータを取得する手法について
Convert.ToInt32を利用すると、
output = Convert.ToInt32(asc2String, 16);
上記の形で、intデータを取得出来ます。
2つ目の引数が進数を表しているので、データが10進数の場合は、
2つ目の引数を10にします。



次に、try-catch構文について

基本的にはthrowを投げられると、catchが呼び出されます。
catchが呼び出される順序は下の階層から順に呼び出されて、一度、catchに入ると、
更に上の階層のcatchも呼び出したい場合は、もう一度、throwを投げる必要があります。
そのため、catchでエラーが拾えるかどうかはその関数次第になります。
catchに引数データを付けた場合、対応するcatchが呼び出され、引数データがない場合、
全ての例外が取得されます。
以下のページを参考にしています。
http://msdn.microsoft.com/ja-jp/library/0yd65esw(v=vs.80).aspx
http://ufcpp.net/study/csharp/misc_exception.html


dataGridViewのアクセスの仕方について
dataGridView1.Rows[0].Cells[selectedRow].Value.ToString()
上記の書き方で、指定のセルにアクセス可能
dataGridView1.CurrentCell.RowIndex;
上記の書き方(CurrentCell)で、現在、選択されているセルにアクセス可能
(上記のRowIndexでセルの行番号を取得できる。)

今日は以上になります。
何か、指摘事項があれば、可能な限り対応するので、ご指摘ください~。

2013年7月10日水曜日

4回目2013/07/10C#勉強

備忘録です。

アンマネージコードデバッグを有効にしないと、VisualStudioのブレークポイントが使えなくなりました。

以下の設定をすると、使えるようになります。
http://msdn.microsoft.com/ja-jp/library/tdw0c6sf(v=vs.80).aspx

COMポートを使うと、必要になるらしい。。。


ではでは。

2013年7月2日火曜日

3回目2013/07/2C#勉強

今日は備忘録に近いことを書いてます。
今、通信プログラムをC#を利用して書いていますが、その時に、感じたことの備忘録です。

1.
まず、書いててはまったのが、アクセシビリティがありませんのエラーが出て、意味が分からなくて、はまった。。。これは、メソッドを呼び出すときにpublicを付けてないことが原因だった。クラス自体にもpublicをつけておく必要があることに直ぐ気付けなかった。C++をやってた時の感覚だと、直ぐに気付けないかも。

2.
後、これもC++の感覚だが、(今日はそういう記述が多いです。汗 備忘録なので、あしからず)クラスを宣言した時に、必ずnewする必要があることに気付けず、少しはまった。C#ではすべてのクラスは参照型なので、インスタンスを作らないと使えない。


3.
C#で通信のプログラムを書くときにバイナリを扱う必要があるのだが、memoryStreamが便利。自動で、メモリの拡張をしてくれるのが、便利。バイトデータ〈8bitデータ)と文字列やint型の変換は専用のクラスがあるので、それを使えば大丈夫。後、文字のエンコード型には注意すること。エンコードもUTF-16をasc2コードに変換するクラスがある。C#って便利だ。


4.
C#には関数の宣言時にconstを利用した変数の宣言は出来ない。これは注意が必要。ネットで調べたところによると、後から、全体の処理を扱うときに、constが付いていると不便だとかあったが、よくわからんかった。。。
それとは少しが話がずれるが、outという修飾子がある。これは関数の引数で値を返すことを約束していて、引数を初期化する必要が無いことを明示している。逆に言えば、refの時は必ず明示する必要がある。ちなみにrefは関数の引数を参照渡しするときにつける修飾子。

下記みたいな感じで、refを使う。outもrefを置き換える感じ。
public void test(int data, ref string buf);
なんか、文字ばっかりかいているから、少しコードを書いてみた。(あんまり雰囲気が変わらない。。。)


今日はこんな感じでした。
備忘録に書いておきます。

もし、最後まで読まれた方がいらっしゃったら、ありがとうございました。
失礼します~!!!