忍者ブログ
開発中に遭遇した落とし穴や忘れそうな事柄を書いた個人メモ
カレンダー
06 2025/07 08
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
フリーエリア
最新コメント
[02/03 NONAME]
最新トラックバック
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
アクセス解析
06
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

 一般的なVisualC++におけるUNICODEの取り扱い
特に、ここではASCII(SHIFTJIS)ファイルをUNICODEのアプリケーションで取り扱う
場合、注意すべき点をメモしておきたいが、そこに行きついた背景も説明できればと思う

背景として

VC++6.0までは、デフォルトASCIIで文字列を扱うことが普通だったが、
.NETの到来により、UNICODEが本格的に取り扱われるようになり、開発方法も変更を余儀なくされいいる

また、先にWindowsCEでは、UNICODEのみのサポートのみであったため、
デバッグ時、CEのコードをそのまま使って、Windows上で動作させたい場合、強制的に
UNICODEの開発を余儀なくされてしまう。
そこで、極力いままでの既存コードを活用しつつUNICODEを利用するための
注意事項を下記に記載する

1.MFCを使う
STLも利用できるのだが、マルチバイトの取り扱いをCStringで吸収してくれるので、
UNICODEを意識せずに文字列を取り扱える
C++CEを使用する場合、相性がよい

2._T("")の使用
これも、1と同様、これで文字列定数を記述しておけば、ASCII,UNICODEの切り替えがよういになる

3.文字列を取り扱っている、CRT関数群は、ASCII,UNICODE互換関数を使用する
これも1と同様
要は引数に文字列を使用している場合、互換用の関数が必ずよういされているので、こちらを使用する

4.外部ファイルにおけるファイルの取り扱い
基本は、ASCIIファイル形式(SHIFTJIS形式)で統一しておいても、上記の関数を使用することで、
ファイルを読み込むときに、シングルバイトもしくはマルチバイトでメモリには取り込んでくれる
ただし、2つほど注意が必要。
まず、テキストファイル読み込む場合は、必ずテキストモードで開くこと。
もし、バイナリーモードで開いた場合、シングルバイト、マルチバイトの切り替えは行われない
(バイナリーで開いているわけだから、当然といえば当然)
もう一つの注意点だが、SHIFTJISの部分は、自動的にUNICODEに変換されるわけではない
理由は、通常文字列のなかに、SHIFTJISが使用されているかがわかっていないためで、
これをわからせるために、ロケールの定義を行う必要がある。ロケール定義は、
_tsetlocale(LC_ALL, _T(""));により、OSの規定ロケールが設定される。これをアプリケーションの
初期処理に定義しておくことで、アプリケーション内では、規定ロケールで動作することになる。
余談だが、WIndowsCE(少なくともCE5まで、6以降は確認していない)は、この定義が不要
ってか、おそらく文字列変換処理が強制的に行われる(UNICODEであることとオーバヘッドのため?)
なので、ロケール定義は行わないっというか_tsetlocale関数は存在しない
だから、これはUNICODEによるWindowsアプリを作成する場合のみ必要になる

拍手

PR
これも、CommandFieldを使用した場合の更新処理で 
(azure ストレージへの更新を行ったときにはまったけど、ObjectDataSource全般にかかわると思われる)

GridView上で、更新処理を行う際、ObjectDataSourceを経由して、更新メソッドをコールするが、
この時、更新したい値の引数は、必ずエンティティプロパティ名と同じにしておく必要がある(大文字小文字の区別無し)。
これで、更新メソッドの引数に値が渡されるようになる。

合わせて、もうひとつ注意点
GridView上で、表示されているフィールドのなかで、更新対象でないフィールド(更新メソッドの引数に定義されていない、エンティティプロパティは、GridViewの列編集で、必ずReadOnlyにしておくこと設定していない場合、更新メソッド内にその引数がないと判断して例外処理が発生する


拍手

 GridViewのCommandField(編集、削除)などを使用して、
削除メソッド、更新メソッドを実行する場合、
検索キーとして、GridViewのDataKeyNamesプロパティを設定しておく必要がある
これを設定しておかないと、削除、更新メソッドをコールしたとき、
検索キーにnullが格納されて、コールしてしまう

拍手

 Azureストレージのテーブル名は、
'_'は使えません。

・英数字のみ(先頭文字は英字のみ)
・大文字小文字は区別しない
・名前の長さは、3~63文字の間

エンティティには、最大255のプロパティを持つことができる
(システム予約プロパティ3つも含む)

拍手

 ASP.NETで自動生成されるログイン認証ページは、データ管理をSQLServerで行っているため、
そのままでは、使用できない。

そこで、MSではサンプルレベルとして、AspProvidersライブラリを提供しているが、SDKに含まれていないことから、今後変更されることになると思われる。


参考文献
実装にあたり非常に役に立ちました
http://codezine.jp/article/detail/5630
このあたりは、まだ発展途上のため、新しい文献を参考にしないとひどい目にあいます。
ちなみに、わたしがダウンロードした。azureのサンプルは「WAPTKVS2010-February2011exe」
で一つ新しいもの?だったが、とくに問題なく動作した。

ただし、上記の説明はデバッグ環境(ローカル)での説明なので、ターゲットのストレージが「DataConnectionString」
でない場合、AspProvidersのConfiguration.csのDefaultStorageConfigurationString変数を
任意に名称に変更する必要がある。

また、AspProvidersが使用する。web.config定義のkeyも「DataConnectionString」から任意の名称に
変更する必要があり、value値は、ストレージ設定用に変更が必要
当然、AccontKeyなども変更が必要


web.config

<configuration>
 
  <appSettings>
    <add key=「任意の名称」
               value="DefaultEndpointsProtocol=https;AccountName=「アカウント名」;AccountKey=「キーを登録」" />
  </appSettings>  




拍手

Copyright c 技術メモ All Rights Reserved
Powered by ニンジャブログ  Designed by ピンキー・ローン・ピッグ
忍者ブログ / [PR]