ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

C#

Microsoftの音声認識がすごい

きっかけ 次男氏が小学校1年生なんですが、算数の勉強の一環で、単語カードに8+6=14、7+9=16などと、繰上りありの1桁の足し算を延々と練習していて、いやその単語カード作るのめんどくさいでしょってことで思いつきました。 作ったやつ 小学校1年生で習う繰…

Javaでは定数が呼び出し元に埋め込まれるが、.NET(C#)はどうか?

概要 あるdll内で定義されている定数を変更した場合、 呼び出し元を再コンパイルする必要はあるか?という質問。 常識的に考えたら、dllが変わったからといって、 呼び出し元を再コンパイルする必要はないのだが、 Javaでは、定数は呼び出し元に埋め込まれる…

VBScriptをC#で拡張する

C#

概要 VBScriptを使っていて、限界を感じたときに使うワザ(?) 前提 .NET Framework 2.0以上 準備 .NET Framework SDKをインストールする 1.キーペアを生成する C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin>sn -k test.snk Microsoft(R) .NET Framewor…

single thread apartment (STA)ってなんじゃらほい

C#

C#でドラッグアンドドロップするプログラムを書いてたら、こんなエラーが出た。 System.InvalidOperationException: DragDrop registration did not succeed. ---> System.Threading.ThreadStateException: Current thread must be set to single thread apa…

「プログラミングC#」読了

プログラミングC#―C#2.0/.NET2.0/Visual Studio2005対応作者: ジェシーリバティ,Jesse Liberty,鈴木幸敏,首藤一幸,情報技研出版社/メーカー: オライリージャパン発売日: 2006/02メディア: 単行本購入: 1人 クリック: 27回この商品を含むブログ (43件) を見る…

RESTにつなぐ

C#

プログラミングC# p571WebRequest / WebResponseを使います。 某氏より依頼された、つなげるかテストをしたサンプルそのまま。 using System; using System.IO; using System.Net; using System.Net.Sockets; class CallREST { static void Main(string[] ar…

RCWを介したCOMの呼び出し

C#

プログラミングC# p597上のリフレクションバージョンよりは、プログラミングがしやすい。その代わり手順があります。 RCW(Runtime Callable Wrapper; ランタイム呼び出し可能ラッパー)っていうのは、.NETから直接COMオブジェクトを呼べないので、 .NETプログ…

リフレクションを使ってCOMオブジェクトを呼び出す

C#

プログラミングC# p601タイプライブラリファイルがない場合は、この方法を使うのだとか。 ちょっとCOM自体VBScriptで使う範囲しか分かってないので、その意味するところも良く分からないですが。。 試しに、VBScriptで良く使う、Scripting.FileSystemObject…

デッドロック回避

C#

プログラミングC# p526ロックすべき共有リソースが二つある場合、そのアクセス順を同じにしておかないとデッドロックが発生します。 例えばこんな感じ。 using System; using System.Threading; class ThreadTest { private static Object lockObj1 = new Ob…

スレッドセーフな処理(Monitorクラス)

C#

プログラミングC# p520同じ処理をMonitorを使ってやってみる。 using System; using System.Threading; class ThreadTest { private static int zandaka = 1000000; private static Object lockObj = new Object(); static void Main(string[] args) { Threa…

スレッドセーフな処理(lockキーワード)

C#

プログラミングC# p519同じ処理をlockを使ってやってみる。 using System; using System.Threading; class ThreadTest { private static int zandaka = 1000000; private static Object lockObj = new Object(); static void Main(string[] args) { ThreadSt…

スレッドセーフなカウンタ(Interlockedクラス)

C#

プログラミングC# p515排他制御の典型的なやつ。入金と出金。 残高が100万円ある口座に対して、20万円の引き出しと30万円の預け入れを同時にやってみる。 using System; using System.Threading; class ThreadTest { private static int zandaka = 1000000; …

スレッド

C#

プログラミングC# p505まずはサンプルを単純化してコピる。 using System; using System.Threading; class ThreadTest { static void Main(string[] args) { Thread t = new Thread(new ThreadStart(delegate(){ for(int i=0; i<30; i++) { Console.WriteLin…

リモート処理

C#

プログラミングC# p493リモートメソッド呼び出し。JavaのRMIみたいなものか?まずはインタフェースを作る。 public interface IRemote { string Hello(); double Add(double a, double b); } コンパイル csc /t:library IRemote.cs 次にサーバを作る。 using…

アプリケーションドメイン(使い方よく分からず。)

C#

プログラミングC# p480一気に飛びました。 ADO.NETとASP.NETは、.NET開発やるならば別途学習した方がよさそうです。プログラミングC#のカバー範囲は狭すぎて、ほとんど役に立ちません。 さて、アプリケーションドメインですが、 アプリケーションドメインに…

Webサービスにアクセスする

C#

プログラミングC# p415HelloWorldサービスを呼ぶには、こんな手順。 HelloWorldサービスを立ち上げる。(昨日作ったWebサービスをF5で起動) http://localhost:1608/WebSite2/Service.asmxみたいなURLがブラウザで開かれるので、上の方にある「サービスの説明…

Webサービスを作ってみた。

C#

新しいWebサイト → ASP.NET Web サービス → 実行(F5) → HelloWorldをクリック で、デフォルトで提供されている、HelloWorldサービスを実行できます。 相変わらずとっつきはいいね。 で、ここでつまんないサービスAddを追加してみた。 [WebMethod] public dou…

DataReaderで高速にデータアクセスする

C#

http://msdn2.microsoft.com/ja-jp/library/dw70f090.aspx 辺りを参考にした。 using System; using System.Data; using System.Data.Common; using System.Data.Odbc; class ReadMdb { static void Main(string[] args) { using(DbConnection conn = new Od…

Accessデータベースに接続する

プログラミングC# p371OleDbDataAdapterを使います。 using System; using System.Data; using System.Data.OleDb; class ReadMdb { static void Main(string[] args) { OleDbDataAdapter oda = new OleDbDataAdapter("select * from emp", "Provider=Micros…

続々・デリゲートの非同期呼び出し

C#

リファレンスマニュアルにこんな記述を見つけた。 AsyncResult.AsyncWaitHandle プロパティ AsyncWaitHandle プロパティに格納されている WaitHandle を使用して、非同期の呼び出しが完了するまで現在のスレッドをブロックできます。ただし、WaitHandle は、…

dllに含まれるクラスの一覧を取得する

C#

プログラミングC# p461辺り。 リフレクション的な話。Javaであればjarファイルにクラスがまとまっているわけですが、クラスの一覧を取得するだけなら、jarファイルの中身を展開すれば済みます。(jar tvf rt.jarとかね) C#ではdllにクラスその他もろもろまと…

テキストエディタで作るWindows Forms

プログラミングC#では、Visual Studioを使ってやることになっているのですが、エディタで作ってみたかったので、とりあえずVisual C# 2008 Expressでソースを吐かせて、そいつを改造するっていうスタイルで作ってみました。 ちなみに、partialキーワードを使…

続・デリゲートの非同期呼び出し

C#

メソッドを非同期呼び出ししたものの、その後どこかで同期したい場合のやり方。BeginInvokeの戻りとして、System.Runtime.Remoting.Messaging.AsyncResult型が戻されるので、こいつのメンバIsCompletedを使います。 AsyncResult.IsCompleted説は完全にウソで…

デリゲートの非同期呼び出し

C#

プログラミングC# p320デリゲートを非同期に呼び出して、結果を別のメソッドで処理します。ちょっとAjaxというかXmlHttpRequestっぽい。 using System; using System.Threading; class FunctionPointer { public delegate int twoitem(int a, int b); public…

続・マルチキャストデリゲート

C#

プログラミングC# p316マルチキャストデリゲートの戻り値はどうするかという問題。 昨日の無名メソッドの例を流用して、マルチキャストデリゲートの戻り値を表示してみる。 class FunctionPointer { public delegate int twoitem(int a, int b); public stat…

匿名メソッド

プログラミングC# p315Javaでいう匿名クラスみたいなものか? using System; class FunctionPointer { public delegate int twoitem(int a, int b); public static int add(int a, int b) { return a + b; } public static int sub(int a, int b) { return a…

マルチキャストデリゲート

C#

プログラミングC# p297デリゲートに複数のメソッドを登録すると、順番に呼んでくれます。 using System; class MulticastFunctionPointer { public delegate void hello(); public static void hello_Japanese() { Console.WriteLine("こんにちは"); } publi…

デリゲート

プログラミングC# p28612章から「デリゲートとイベント」ということで、C#のウリの一つ(?)であるデリゲートの説明になるわけですが、のっけから、 例えば州知事が亡くなった場合、 とか不吉な出だしになってます。 イベント処理で使うのだということはなんと…

文字列の分割

プログラミングC# p248String#Splitを使って、HTTPヘッダをフィールド名と値に分けます。 using System; using System.IO; class ReadHeader { static void Main(string[] args) { FileInfo file = new FileInfo("header.txt"); using(StreamReader sr = fil…

テキストファイルを読み込む

C#

プログラミングC# p544ファイル読み込みみたいな、プログラミング言語としての基本機能が、大分後になって書かれています。が、ちょっと都合で先取り。 using System; using System.IO; class ReadFileTest { static void Main(string[] args) { FileInfo fi…