C#2.0

スレッドの初期アパートメントは不定

.NETの一般的なWindowsFormsアプリケーションのエントリポイントは、STAThreadAttributeが宣言されており、"single-threaded apartment"(以降STA)のCOMスレッディングモデルが選択される。 Visual Studio 2005 Professional 英語版で自動生成されたエントリ…

BinaryFormatter#Deserialize(4)

先日のデシリアライズ時のトラブル 今回のケースでは、IPCを行う二つのアプリケーションが、同一のアセンブリに属する同一の型を使って情報をやり取りするわけで、アセンブリやクラスのバージョンは変わらないはずだ。それでもデシリアライズが上手くいかな…

他のAppDomainからロードされたアセンブリの設定ファイルにアクセスする

通常の実行アセンブリの場合、デフォルトの設定ファイル(App.config)は実行アセンブリがロード、実行されたカレントのディレクトリの直下の "アセンブリ表示名" + 拡張子(.exe) + ".config" というパス名が使用される。これは決め事なので、アプリケーション…

BinaryFormatter#Deserialize(2)

IPCを行う2つのアプリケーションが、互いに異なるAppDomainからロードされたアセンブリだった場合には問題が発生することが解った。 一方のAppDomainのWindowからSendMessageされたWM_COPYDATAメッセージ経由でシリアライズされたオブジェクトのストリーム…

BinaryFormatter#Deserialize(3)

きっかけはやはりMSDN。BinaryFormatterクラスのBinderプロパティから。 public virtual SerializationBinder Binder {get; set;} 対象のフォーマッタで使用するシリアル化バインダ。 更に、このプロパティの型であるSerializationBinderクラスの解説にはこ…

BinaryFormatter#Deserialize

10月の日記で言及したことがあるが、現在ターゲットにしているスマートクライアントはアプリケーション間のIPCを実現するために、Win32のWM_COPYDATAメッセージとバイナリフォーマッタを使用している。(続 NativeWindowクラス) この方法は全く問題無いように…

.NET2.0時代のRS232Cシリアルポートプログラミング(1)

私は業務系のプログラマなので、普段は装置とピア-ピアで通信するようなプログラムはまず書かないけれど、それでも偶に書く必要に迫られる場合がある。 「下手の横好き」とはよく言ったものだけど、経験が無い癖に、大したこともできないくせに装置制御のプ…

.NET2.0時代のRS232Cシリアルポートプログラミング(2)

.NET2.0のSerialPortクラスを実際に使って、モデム等のRS232Cインタフェース機器を制御する場合、SerialPortクラスのDtrEnableプロパティのデフォルトはtrueではなくfalseであることに注意する。 public bool DtrEnable { get; set; } true to enable Data T…

プロジェクト変換ウィザード

11月の中にも日本語版が発売される予定のVisualStudio2005だが旧バージョンであるVisualStudio2003で開発を行ってきた開発者にとって非常に有り難い機能がついている。 私がJavaに加えて.NET(C#)を使うようになったのはVisualStudio2005β1が利用可能になった…

ExtractAssociatedIcon

今さらですがメモも兼ねて。 .NET2.0は.NET1.0〜1.1をリニュアルする上で抜けていたと思われる実装をかなり補完しています。 例えばSystem.Drawing.Iconクラス。現在のバージョンである.NET1.1までだと実行アプリケーションのメインアイコン(リソースとして…

スマートクライアントと参照アセンブリ(顛末)

先日の日記で動的ロードの対象となっているアセンブリをどう判断するか言及したがいろいろと悩んだ末に結局はWebサーバ上のリポジトリに置くアセンブリの配置用XMLファイルに「追加でダウンロードするアセンブリの一覧」という意味の語彙を追加することで解…

スマートクライアントと参照アセンブリ

WebサーバをリポジトリとしてアセンブリをダウンロードしてローカルPC上で実行するスマートクライアントがあったとする。(.NET2.0ではノータッチデプロイを改良したClickOnceという技術が追加されるが現状はClickOnceは使わない) このスマクラの実行アセンブ…

またもやインデクサ(顛末)

以前の日記でC#2.0のXmlReaderクラスのバグ(と思われる現象)について言及した。β版を評価する義務として今回もマイクロソフト側にフィードバックを行ったが先日めでたくステータスが"Resolved"となった。これに対するマイクロソフト側の回答だが Thanks for …

またもやインデクサ

どんな語彙でも良いが2階層以上の階層構造を持ちname属性が必ず必要なXMLがあったとする。 test.xml .NETでこのようなXMLの全ての要素とname属性をパースするには何通りかの書き方が出来るんだけどせっかくだからC#2.0からXmlReaderクラスに追加された、現在…

宿題の答え

このアプリケーションをVisualStudio2005(β2)でステップ実行を用いてデバッグを行うとあるエラーが発生してアプリケーションは異常終了します。アプリケーションが異常終了するのは何故でしょうか。またどんな例外(エラー)が発生するのでしょうか。 答えがあ…

Generic Dictionary Classとインデクサ

NyaRuRuの日記/[.NET]KeyNotFound exceptionNyaRuRuさんに言及して頂いた。 .NET 1.1 では,Dictionary に格納される value は常に object として扱われていた(のでインデクサが null を返すのもあり). ただしインデクサで null を返すと,「本当に null が…

Generic Dictionary Classとインデクサ

.NET2.0におけるC#2.0で導入されるGenerics Collectionではキーと値の型を前もって指定できるDictionaryインタフェースと実装クラスが提供されており以下のようにインスタンスを生成することができます。 IDictionary disposableTable = new Dictionary(); …

クロージャ

いつも楽しみにしている"http://martinfowler.com/bliki/Closure.html"の翻訳記事inぶりきじゃよりああ、やっぱりJavaやC#にもクロージャが欲しいなぁと思いつつ読んでいたらC#2.0ではクロージャが実現できるとの記事がJoe Walnes氏のBlog"The power of clos…

GZipStream bug Fix

3/25の日記(2005-03-25 - Kazzzの日記)で言及したGZipStreamのバグですがβ2ではきちんと直っているようです。過去に言及していなかったバグに関しても致命的なものはかなりFIXされておりさすがだと感じました。 Javaの開発ではオープンソース、商用、非商用…

Visual Studio 2005 β2 対応まとめ 訂正

誤 DataGridViewCell.CurrentStyleプロパティが削除されている。Styleプロパティで統一? 正 DataGridViewCell.CurrentStyleプロパティはInheritedStyleプロパティに変更 例) DataGridViewの任意のCellのスタイルを一時的に待避する public void SaveOriginSt…

Visual Studio 2005 β2 対応まとめ

.NET Framework関連 DataGridViewCell.CurrentStyleプロパティが削除されている。Styleプロパティで統一? IEnumerableの継承関係変更でIEnumerable#GetEnumerator()の実装が必須になった。 System.Configurationネームスペースは別アセンブリ(System.configu…

Visual Studio 2005 β2 まとめその2

Application.EnableVisualStyles()した時にMenuStripの色と反転色にビジュアルスタイルがきちんと反映されるようになった。 KeysConverter#ConvertFrom()メソッドにおいてパラメタ"CTRL+C"を与えるとβ1では正しく変換されたがβ2ではArgumentExceptionがスロ…

GZipStream bug?

.NET2.0(β1)からHTTP1.1でサポート可能なGZip圧縮/圧縮解除を可能としたストリームクラスであるGZipStreamがやっとこ標準で実装された。 私の所のようにJava側とHTTP通信を行うようなシステムではGZip圧縮によるネットワークの帯域削減は効果の有無は計測で…

AppDomainの強制アンロードができない part2.

早速NyaRuRuが地球にいたころでとりあげて頂いた。多謝。 実はあれからいろいろと試行する中で少々荒技だけど生成したスレッドを強制Abortさせる事を試してみた。 拙作のランチャは他のAppDomainを生成する際にその動作を非同期にしなくちゃならないので(普…

AppDomainの強制アンロードができない

開発中のフレームワークにはAppDomain経由でアプリケーションを起動するランチャ機能があり、その中では他のAppDomainからアセンブリを起動する為にAppDomain越えでメソッドを起動している。 appDomain.DoCallBack(new CrossAppDomainDelegate(ExecuteAssemb…