2016年07月05日
.netプログラマが.net Compact Frameworkを利用する際の注意点
対象
.net Framework(以下、標準)を利用した開発経験はあるが、
Compact Frameworkは初めての人。
かつ、業務で必要性のある人。
目次
1.背景
2.そもそもCompact Frameworkとは?
3.標準との相違点
4.まとめ
1.背景
過去に急に開発した経験があります。
.net系ということで
ほぼ同じかな
と思っていたら痛い目を見ました。
私自身の備忘として、
そして開発する予定のある人の役に立てれば幸いです。
2.そもそもCompact Frameworkとは?
Windows系OSのうち、組込開発で利用するFrameworkです。
組込用なので軽量化が1つのテーマになっており、
MSの中の人曰く
「組込用途に適さないライブラリ等を省いたもの」
とされております。
全体の70%が省かれているため、
同じ.net Framework感覚で開発を行うと至る所で問題が生じます。
今回は以下の公式情報のうち、
私がハマった箇所についてまとめました。
3.標準との相違点
ファイルパス関連
OSの仕様で"現在のディレクトリ"を管理しておりません。
よって、標準で利用する以下のようなコードのパスをフルパスにする必要性があります。
また、パスの記述方式が標準と違うので注意が必要です。
基本的にはダサくてもフルパス推奨
浮動小数点精度
除算の除数が最大浮動小数値または、最小浮動小数値である場合、
正しい計算結果でなく0が返されます。
低スペックなCE機で複雑な計算処理をするケースは少ないかと思われますが、
除算は要注意と思っておいた方が吉です。
破棄されたオブジェクトへのアクセス
本来褒められた使い方ではありませんが、
標準では破棄したオブジェクトのプロパティにアクセスできる場合がありますが、
CompactFrameworkとは互換性がありません。
(可能性は残っているが、標準でアクセスできたものができないイメージ)
基本的には利用する可能性のあるオブジェクトは不可視状態にした方が吉です。
プログラミング言語選定
VBとVC#のみでVC++はサポート対象外です。
組込としてどうなの
時間の取り扱い
"Now"プロパティから返される値は秒単位です。
ミリ単位の値を得るには"TickCount"プロパティを利用します。
タイマ
TimerオブジェクトのStartとStopはサポートされていません。
同等の機能を利用する際はEnabledプロパティをBoolean型で制御します。
XML
標準とサポート範囲が違います。
具体的な差については検証不足。
文字列操作、正規表現
標準と互換性がありません。
具体的な差については未検証です。
例外説明文字列
メモリ節約のため、DLLで例外メッセージ文字列を管理しています。
ローカライズする際は注意が必要です。
ライブラリ
これが一番重要です。
例えば2重起動防止策の定番Mutaxが利用できません。
厄介なのはMutaxが無いのではなく、
Mutaxの引数が複数のパターンが用意されておらず利用できない状態なことです。
こんな時はDLLからAPIを自作して利用します。
4.まとめ
いかがだったでしょうか。
あくまで業務系プログラマ(非組込系)が同じ感覚で開発しようとしてハマった点です。
.net系の別言語を利用しているイメージで開発に取り掛かることで、
ギャップは少ないかなという印象です。
.net Framework(以下、標準)を利用した開発経験はあるが、
Compact Frameworkは初めての人。
かつ、業務で必要性のある人。
目次
1.背景
2.そもそもCompact Frameworkとは?
3.標準との相違点
4.まとめ
1.背景
過去に急に開発した経験があります。
.net系ということで
ほぼ同じかな
と思っていたら痛い目を見ました。
私自身の備忘として、
そして開発する予定のある人の役に立てれば幸いです。
2.そもそもCompact Frameworkとは?
Windows系OSのうち、組込開発で利用するFrameworkです。
組込用なので軽量化が1つのテーマになっており、
MSの中の人曰く
「組込用途に適さないライブラリ等を省いたもの」
とされております。
全体の70%が省かれているため、
同じ.net Framework感覚で開発を行うと至る所で問題が生じます。
今回は以下の公式情報のうち、
私がハマった箇所についてまとめました。
3.標準との相違点
ファイルパス関連
OSの仕様で"現在のディレクトリ"を管理しておりません。
よって、標準で利用する以下のようなコードのパスをフルパスにする必要性があります。
また、パスの記述方式が標準と違うので注意が必要です。
基本的にはダサくてもフルパス推奨
浮動小数点精度
除算の除数が最大浮動小数値または、最小浮動小数値である場合、
正しい計算結果でなく0が返されます。
低スペックなCE機で複雑な計算処理をするケースは少ないかと思われますが、
除算は要注意と思っておいた方が吉です。
破棄されたオブジェクトへのアクセス
本来褒められた使い方ではありませんが、
標準では破棄したオブジェクトのプロパティにアクセスできる場合がありますが、
CompactFrameworkとは互換性がありません。
(可能性は残っているが、標準でアクセスできたものができないイメージ)
基本的には利用する可能性のあるオブジェクトは不可視状態にした方が吉です。
プログラミング言語選定
VBとVC#のみでVC++はサポート対象外です。
時間の取り扱い
"Now"プロパティから返される値は秒単位です。
ミリ単位の値を得るには"TickCount"プロパティを利用します。
タイマ
TimerオブジェクトのStartとStopはサポートされていません。
同等の機能を利用する際はEnabledプロパティをBoolean型で制御します。
XML
標準とサポート範囲が違います。
具体的な差については検証不足。
文字列操作、正規表現
標準と互換性がありません。
具体的な差については未検証です。
例外説明文字列
メモリ節約のため、DLLで例外メッセージ文字列を管理しています。
ローカライズする際は注意が必要です。
ライブラリ
これが一番重要です。
例えば2重起動防止策の定番Mutaxが利用できません。
厄介なのはMutaxが無いのではなく、
Mutaxの引数が複数のパターンが用意されておらず利用できない状態なことです。
こんな時はDLLからAPIを自作して利用します。
4.まとめ
いかがだったでしょうか。
あくまで業務系プログラマ(非組込系)が同じ感覚で開発しようとしてハマった点です。
.net系の別言語を利用しているイメージで開発に取り掛かることで、
ギャップは少ないかなという印象です。
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/5222467
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック