Code

パフォーマンス関連

実験君1 class Num { public static char utoa (ulong u) { char tmp = new char [20]; int i = tmp.Length; do { tmp [--i] = (char)(u % 10 + '0'); } while ((u /= 10) > 0); char [] cs = new char [tmp.Length - i]; Array.Copy (tmp, i, cs, 0, cs.Le…

ユーザが所属するグループを列挙

投稿の使いまわし。(^^; using System; using System.Management; class Program { [STAThread] static void Main(string[] args) { // ドメインとユーザを指定して所属するグループを取得するクエリー string s = String.Format("select * from Win32_Group…

.NETでディスクのシリアル番号を取得

投稿の使いまわし。 using System; using System.Management; class Program { [STAThread] static string GetVolumeSerialNumber(string drive) { string path = String.Format("Win32_LogicalDisk.DeviceId=\"{0}\"", drive); ManagementObject disk = new…

.NETとJavaの相互運用

IKVM.NETをご存知でしょうか? 日記でも紹介したことがありますが、.NETランタイム上で動作するJavaVMです。以前見たときは、.NET上でJavaを動かしても何が嬉しいのかよく分かってませんでしたが、調べてみたところ結構面白いことが出来ることが分かりました…

CharSet.Ansiで渡されるものは?

DllImportで文字列を渡す場合、何の文字コードでエンコードされるべきなんでしょうか? 例えば、 ファイル:foo.c #include <stdio.h> __declspec(dllexport) void Say(const char* msg) { printf("say 「%s」\n", msg); } コンパイルして、foo.dllを作りました。 > c</stdio.h>…

NHibernateで嵌る

http://nhibernate.sourceforge.net/quickstart.htmlを参考にサンプルこさえても上手く行かず、2,3時間悩んだ。結局、NHibernateをデバッガで追ってようやく解決。 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" auto-import="false"> <class name="User,User" table="users"> </class></hibernate-mapping>

国際対応Hello, World

.NETではサテライト アセンブリというカルチャに依存したリソースを外だしする仕組みがあります。簡単な例としてサテライト アセンブリを使ったHello,Worldアプリケーションを作成してみました。まず、モジュール構成ですが、 hello.exe hello.resources.dll…

インタフェースベースでADO.NET

MySQLとConnector/NetのおかげでADO.NETで手軽に遊べるようになったので、色々弄ってます。普段、Oracle使っているといってもPro*C/C++で動的SQLなのでODBCやらADO.NETやらは、あまり詳しくなかったり。(^^;ここんとこ、日記で挙げていたコードはMySQLベッタ…

IEコンテキストメニューからの.NETアセンブリ呼び出し

先日から続いているデータベース関連の続き。ネットを巡回中に面白いページを見つけるとお気に入りに登録したりしますが、登録名はページのタイトルだったりするので、なにを見つけて登録したのか分からなくなってしまいます。もちろん、きちんとタイトルを…

DBからのアセンブリロード

http://d.hatena.ne.jp/akiramei/20040607#p1のデータベース版。(^^; Program.exeとそれが呼び出しているCalc.dllを先日のデータベースに格納しているとします。 で、次のようなランチャープログラムを用意します。 using System; using System.Security.Pol…

バイナリデータの格納

MS-DOS時代は細かくディレクトリ分けしてファイル管理していたのですが、HDDの大容量化で空きを気にせず、どかどかデータを増やしていたら管理不能になり、現在はディレクトリ名を日付にして放り込んでいたりします。(^^; 以前から、DB管理出来たら便利そう…

クイズ

Brad Abrams氏のところから。 ・http://blogs.msdn.com/brada/archive/2004/10/29/249607.aspx 複数の配列の任意部分の合計を求める。 using System; using System.Collections.Generic; struct MyArraySegment<T> { readonly T arr; readonly int offset; read</t>…

クイズ

http://blogs.msdn.com/brada/archive/2004/10/26/248324.aspx またしても、Brad Abrams氏のところから。で、自分なりの回答。 using System; using System.Collections.Generic; class Program { static void Main(string args) { string inputValues = { "…

CallingConventionの謎

DllImportではCallingConventionが指定できます。しかし、__cdeclを__stdcallとして呼び出しても落ちたりしません。ですが、 using System; using System.Runtime.InteropServices; using System.Security; [SuppressUnmanagedCodeSecurity] class Program {…

キャストとasのパフォーマンス

IBM Developer 日本語版 : 大変申し訳ありません。このページは無効です。 Javaの記事ですがキャストとinstanceofについての比較を行っています。ぱっと考えるとキャストは失敗すると例外が発生するのでinstanceofの方がよさそうに思ってしまいます。しかし…

一定時間で自動的に閉じるメッセージボックス

自分用メモ。MessageBoxクラスじゃ出来ないのでWSHを使った逃げ手。 #region Using directives using System; using System.Windows.Forms; using IWshRuntimeLibrary; #endregion namespace WindowsApplication1 { partial class Form1 : Form { public For…

D.NETを試す

D.NET 0.95.90 Released 以前の日記で取り上げたD.NETですが、動かせる環境が用意できたので弄ってみました。まだ、Pre-Alpha Releaseなので雰囲気をつかむくらいですね。 // test.exeが生成される pragma (AssemblyInfo, "test", "exe"); // .NETアプリなら…

NemerleでDesign by contract

オンラインドキュメントを見てて、出来ることに気づいた。 using System; using Nemerle.Assertions; using Nemerle.IO; module Calc { [Requires(x >= 0 && y >= 0)] // 事前条件 [Ensures(value >= 0)] // 事後条件 public Add(x : int, y : int) : int { …

プロパティとGetter/Setter

C#ではプロパティがサポートされているため、次のようなコードを書くことはほとんどありません。 class Person { string name; public string GetName() { return name; } public void SetName(string nm) { name = nm; } } こんなの見たら、即座にプロパテ…

C#でsscanfもどき

たまに、クラスライブラリ一覧を見ながら知らないクラスをチェックしてたりするのですが、今回目にとまったのはArgIterator。調べてみたら確かにこれはあんま使わなさそう。取りあえずサンプルとして、Cライブラリのsscanfもどきをこさえてみました。手抜き…

Process.Exitedイベントの謎

ってほどのことは無いのですが、ちょっと嵌りました。例えば、電卓を起動させて、一定時間経ったら強制終了させるコードがあったとします。 using System; using System.Diagnostics; class Program { static void Exited(object Sender, EventArgs e) { Con…

Struct vs Class

C#がJavaと違うところの1つにstruct(値型)をサポートが上げられます。勿論、Javaでもbyteやintなどのプリミティブなものは値型ですが、ユーザ定義の値型はありません。さて、structを使うとパフォーマンスが良いとか、サイズが大きくなったら遅くなるとか言…

更にvectorとiteratorも

vectorとiteratorもほんの一部だけ実装してみました。ただ、iteratorとかはポインタが無いと辛い気がします。 #region Using directives using System; using System.Collections.Generic; using STL.Generic; using IntVector = STL.Generic.Vector<int>; using </int>…

STLもどき

昨日の続きで実装を進めてみました。まずは、IArithmeticインタフェースですが、一応最終形id:ladybugさんのコメントを見て気が変わりました。(^^; public interface IArithmetic<T> where T : IComparable, IFormattable, IConvertible, IComparable<T> { T Add(T</t></t>…

力業Tuple

BoostのTupleを真似てみました。 #region Using directives using System; using System.Collections.Generic; using STL.Generic; using Result = STL.Generic.Tuple<int, int, int, double>; #endregion class Program { // 型なしタプル static Tuple Calc4_1(int x, int y) { re</int,>…

C#でSTL(無駄な足掻きとも言う)

C#にもSTLやboostっぽいライブラリが欲しいという話題がありましたので、C#で実装するとどんな感じになるか、ちょっと実験。型パラメータに対する演算については私の日記よりも、ladybugさんの方がスマートなので参考にさせて貰いました。 #region Using dir…

Buffer.BlockCopy使います?

ネットの会議室を見てたらbyte[ ]をushort[ ]へ変換する方法についてBinaryReaderを使う以外*1ないかという質問がありました。C/C++を知っている人だとunsafeを使ってbyte*からushort*へキャストしたりするかも知れません。もし、unsafeが使えないとしたら、…

固定長テキストの処理方法(.NET2.0)

.NET2.0のBCLを覗いていたら、System.Text.Parsingなるものを発見。Parserが転がっているのかと期待しましたが、TextFieldParserがあるだけでした。このクラスは固定長及び可変長のテキストが扱えますが、可変長はString.Splitに比べて何が嬉しいのかよく分…

Genericパラメータのバインド

Genericなクラスに対するリフレクションとか調べていて、ふと疑問が浮かびました。 Type t = typeof(List<int>); object o = Activator.CreateInstance(t); ActivatorでListをインスタンス化していますが、ジェネリックパラメータをint固定じゃなく、実行時に変え</int>…

遅いよコレクション

Genericsがサポートされる前は、動的配列を使おうとするとArrayListあたりを使うことになりました。しかし、ArrayListはObjectのコレクションのため、プリミティブ型を入れるとboxing/unboxingが発生し、パフォーマンスが良くありませんでした。.NET2.0ではG…