投稿者: uchukamen
C++、C++ / CLI、C# 適材適所の BOF
TechEd Yokohamaで、「C++、C++ / CLI、C# 適材適所の BOF 」があり、デバイスの検出を例に説明があり、興味深く聞かせていただきました。
デバイスの検出関連はこれまで触ったことがなかったので、URLなどをいくつかメモ。
WM_DEVICECHANGE、struct _DEV_BROADCAST_HDR などの定義
C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\Dbt.h
C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\PocketPC2003\Include\dbt.h
C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\Smartphone2003\Include\dbt.h
WindProc にフックを掛けるだけであれば、InterOpはいらず、WinProcをオーバーライドすればよい。
// A device has been added to or removed from the system.
// Windows NT 4.0 and Windows Me/98/95: This value is not supported.
private const int DBT_DEVNODES_CHANGED = 0x0007;
// Windows NT 4.0 and Windows Me/98/95: This value is not supported.
private const int DBT_DEVNODES_CHANGED = 0x0007;
private const int WM_DEVICECHANGE = 0x0219;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg != WM_DEVICECHANGE)
{
base.WndProc(ref m);
return;
}
{
if (m.Msg != WM_DEVICECHANGE)
{
base.WndProc(ref m);
return;
}
switch ((int)(m.WParam))
{
….
{
….
case DBT_DEVICEARRIVAL:
MessageBox.Show("DBT_DEVICEARRIVAL");
break;
case DBT_DEVICEREMOVECOMPLETE:
MessageBox.Show("DBT_DEVICEREMOVECOMPLETE");
break;
….
MessageBox.Show("DBT_DEVICEARRIVAL");
break;
case DBT_DEVICEREMOVECOMPLETE:
MessageBox.Show("DBT_DEVICEREMOVECOMPLETE");
break;
….
case DBT_DEVNODES_CHANGED:
MessageBox.Show("DBT_DEVNODES_CHANGED");
break;
….
MessageBox.Show("DBT_DEVNODES_CHANGED");
break;
….
}
base.WndProc(ref m);
}
}
なお、USBドライブが追加された場合には、WParam が DBT_DEVNODES_CHANGED でメッセージが飛んでくる。
問題はこの後どれだけ複雑な InterOp が必要かどうかで、複雑な構造体(ネストしていると最悪)が必要な場合など、C++/CLI でのつなぎは可能性の1つとして面白そう。でも、自分の場合MFC触ったことないので別のアプローチ取るしかないですね。orz
WZero3 で、GPS?!
PRO’ LOGUE さんのところで、[03es] 擬似GPSでGoogleMap…MimicGPS という記事が紹介されています。
明日からキャンプなんですが、カーナビついてないもので、これは!と思い、試してみました。
以下、手順です。
1. レジストリエディタで
HKEY_LOCAL_MACHINE\ControlPanel\GPS Settings の
Hide 1 を Hide 0
に変更し、再起動すると、GPSコントロールパネルが表示された。
HKEY_LOCAL_MACHINE\ControlPanel\GPS Settings の
Hide 1 を Hide 0
に変更し、再起動すると、GPSコントロールパネルが表示された。
2. レジストリエディタで
HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPSIDレジストリ内に
文字列キー(値:Dll/値のデータ:GPSID.dll)を追加する。
HKEY_LOCAL_MACHINE\Drivers\BuiltIn\GPSIDレジストリ内に
文字列キー(値:Dll/値のデータ:GPSID.dll)を追加する。
3. [スタート]→[設定]→[システム]→[GPS]
より、
【プログラム】タブ内のGPSプログラムポートをCOM0に設定する。
【ハードウェア】タブ内は設定をする必要は特に無し。
【アクセス】タブ内の□GPSを自動的に管理するにチェックをつける。
より、
【プログラム】タブ内のGPSプログラムポートをCOM0に設定する。
【ハードウェア】タブ内は設定をする必要は特に無し。
【アクセス】タブ内の□GPSを自動的に管理するにチェックをつける。
4. MimicGPSインストール
公開先からダウンロードして実行する。
測位開始をタップする。
MimicGPS はそのまま実行しておく。
公開先からダウンロードして実行する。
測位開始をタップする。
MimicGPS はそのまま実行しておく。
これで、無事 WZero3 WS004SH でも動きました。
こんなことを考える人がいるなんて・・・・すごい!
明日から3泊4日でキャンプです。
毎年恒例の海でのキャンプ。
しばらくアクセスできなくなります。
ジェネリクスの場合のFindの実装パターン
ジェネリクスの場合のFindの実装パターンの覚書
List<AmedasLocation> ameLocation で、Find したい場合の例
// メニューと一致するAmedasLocation情報を検索
AmedasLocation al = ameLocation.Find(
delegate(AmedasLocation aloc)
{
return aloc.Text == ((MenuItem)sender).Text;
}
);
AmedasLocation al = ameLocation.Find(
delegate(AmedasLocation aloc)
{
return aloc.Text == ((MenuItem)sender).Text;
}
);
結構使いそうだけど、すぐ忘れそうなのでメモ。
Web Service の Web サイトの発行時の単なるメモ
Web Service の Web サイトの発行時の単なるメモ。
たまにしか、Web Service の発行はしないので、毎回迷う。メモっておこう。
Web Service の発行時のターゲットの場所
この下に、ソリューションのファイル(Service.asmx, etc) がコピーされる。
Virtual Directory が作成される。そこにホスティング管理ソフトより Script の実行権を付与する必要がある。
Web Service の発行時のターゲットの場所に、
を指定してしまうと、既存のファイルが消されてしまい、復旧が面倒なので注意。
WZero3DeAmedas に関するバグレポート・要望など
WZero3DeAmedas を公開します。
WZero3DeAmedas に関するバグレポート・要望など、ありましたらこちらにコメントお願いします。
元記事はこちら。
現在の最新バージョンは、WZero3DeAmedas V2.0.4.0 (ベータ4)です。
ツールのダウンロードは、
2007/9/9 | 2.0.4.0 Beta4 | Beta4バージョン。
|
無線LAN接続切替ツール バージョンアップ
WZero3 で、無線LAN接続切替ツール の1,5,6 を使用していましたが、1.5.6(1.5.5も)には重大なバグがありました。ということなので、最新版の1.5.7 をインストール。Visual Studio で開発中のソフトを USB 接続でダウンロードしながら使っていると、USBの抜き差し後にW-SIMが無効になって、電話がかけられなくなるという問題があった。ひょっとしたら、この影響かもしれない。とりあえず、アップデートして様子を見てみることにします。
bLaunch のアイコンの背景色
W-Zero3 でプログラムを作っていて、ほぼ完成したのでアイコンをまともにしようとして、はまりました。
bLaunch というローンチャーを使用していますが、実はこれには背景色でマゼンタが使われているみたいです。
このため、画像では本来 AmeDas と表示されるべき所が、Am Das となって、eが抜けています。
本来は、icon の設定の画像にあるように、"e"だけマゼンタになっています。
最初、すべてマゼンタにしていたので、なぜかbLaunch にアイコンが表示されず、数時間試行錯誤してしまいました。orz
馬鹿みたい・・・
なお、bLaunch に対して、Visual Studio から exe を配置しても、アイコンは変更されません。
W-Zero3を再起動して、bLaunch がアイコンを再読み込みする必要があります。
System.InvalidCastException の初回例外
.NET Compact Framework 2.0 で連続してBitmap を作成すると、
‘System.InvalidCastException’ の初回例外が System.Drawing.dll で発生しました。
の例外が上がる?
詳しく試してないけれども、Bitmapを連続して作成し、PictureBoxのImageに次々に張り付けていくと、かなりの頻度でこの例が上がる。
そんなことをするとメモリの回収が間に合わず、そもそもそのような実装はまずいのだけど。
時間のあるときに試してみようっと。
とりあえずメモ。