W-ZERO3 用 Windows Live for Windows Mobile がリリースされていて、今週は結構オンラインになっていました。帰宅途中で家にチャットするのも結構面白い。
ただ、オンラインだと、かなりバッテリーが早くなくなるような気がします。
C#, PowerShell プログラミングの覚書、雑記など
New Features Included in the Orcas January CTPでの新しい機能は次の通り
- • HTTP compressionを含むSystem.IO.Compression のサポート
- • LINQ の標準クエリオペレータのサブセットをサポート
- • WaveOut による同時サウンドプレイを可能にする SoundPlayerのサポート.
- • Smartphone and Pocket PCの識別を容易にするMicrosoft.WindowsCE.Forms の新しいAPI
- • ネストしたFuncEvalを可能にする。??
- • InterOpのログの強化
- • Stack Trace の強化.
- • GACの改良.
- • StrongName keysを1024以上に対応.
- • ファイナライザーの動作をログする機能を強化.(サポートのため)
- . log fileを実行時に読み取り可能にする
2002/3/3 | 新規作成。祝:初公開! Microsoft は嫌いだけれど、Java もメモリ食いで使い物にならないし。。。 MFC, Win32 よりはまだましかと、ついに魂を悪魔に売り渡して、C# Programming の勉強をはじめました。 |
2003年11月29日(土) | 0 | 0 | 0 | 0 | 0.00 |
2003年11月30日(日) | 435 | 435 | 573 | 573 | 1.32 |
2007年 4月13日(金) | 3798 | 2357587 | 7808 | 5307146 | 2.06 |
2007年 4月14日(土) | 1170 | 2358757 | 2204 | 5309350 | 1.88 |
2007年 4月15日(日) | 1068 | 2359825 | 2282 | 5311632 | 2.14 |
2007年 4月16日(月) | 3812 | 2363637 | 8099 | 5319731 | 2.12 |
ちょこっとしたアプリを作って遊ぶ分にはいいかもしれないけれども、売り物を作ろうと思うと、ネイティブで作らないと厳しいと思う。InterOpするぐらいなら、最初から C++で書いたほうが早そう。というっことで、NGEN for Windows Mobile が欲しい!
Microsoft .NET Compact Framework の P/Invoke とマーシャリング入門Microsoft .NET Compact Framework での高度な P/Invoke ぐちゃぐちゃ書いてあって、わかりにくいので、簡単にポイントだけ整理する。
.NET Compact Framework の相違点の概要
構造体内の文字列のマーシャリング
構造体内の固定長文字列のマーシャリング
—————— class Memory のC#版
using System;
using System.Runtime.InteropServices; using System.ComponentModel; namespace Uchukamen.WZero3
{ class Memory { [DllImport("coredll.dll", SetLastError = true)] private static extern IntPtr LocalAlloc(int uFlags, int uByte); [DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr LocalFree(IntPtr hMem); [DllImport("coredll.dll", SetLastError = true)]
private static extern IntPtr LocalReAlloc(IntPtr hMem, int uBytes, int fuFlags); private const int LMEM_FIXED = 0;
private const int LMEM_MOVEABLE = 2; private const int LMEM_ZEROINIT = 0x40; private const int LPTR = LMEM_FIXED | LMEM_ZEROINIT;
// LocalAlloc を使用して、メモリ ブロックを割り当てます。
public static IntPtr AllocHLocal(int cb) { return LocalAlloc(LPTR, cb); } // AllocHLocal で割り当てられたメモリを解放します。
public static void FreeHLocal(IntPtr hlocal) { if (!hlocal.Equals(IntPtr.Zero)) { if (!IntPtr.Zero.Equals(LocalFree(hlocal))) { throw new Win32Exception(Marshal.GetLastWin32Error()); } hlocal = IntPtr.Zero; } } // 以前に AllocHLocal で割り当てられたメモリ ブロックのサイズを変更します。
public static IntPtr ReAllocHLocal(IntPtr pv, int cb) { IntPtr newMem = LocalReAlloc(pv, cb, LMEM_MOVEABLE); if (newMem.Equals(IntPtr.Zero)) { throw new OutOfMemoryException(); } return newMem;
} // マネージ文字列の内容をアンマネージ メモリにコピーします。
public static IntPtr StringToHLocalUni(string s) { if (s == null) return IntPtr.Zero; else { int nc = s.Length; int len = 2 * (1 + nc); IntPtr hLocal = AllocHLocal(len); if (hLocal.Equals(IntPtr.Zero)) throw new OutOfMemoryException(); else { Marshal.Copy(s.ToCharArray(), 0, hLocal, s.Length); return hLocal; } } } } } |
#define RASCONN RASCONNW