Tuesday, March 28, 2006
Sunday, March 26, 2006
VCによるDAO接続サンプル
1)アプリケーションの開始時にCOMを初期化します
CoInitialize();
2)cppファイルでタイプライブラリをインポート
// EOFが名前衝突してしまうのでrenameします
#import "~\dao360.dll" rename("EOF", "DAOEOF")
3)DBアクセスするソース
using namespace DAO;
void function() {
_DBEnginePtr dbEngine;
HRESULT hr = dbEngine.CreateInstance("DAO.DBEngine.36");
DatabasePtr database =
dbEngine->OpenDatabase(_bstr_t("test.mdb"));
// レコード処理
RecordsetPtr recordset = ...;
database->Close();
}
4)アプリケーションの終了時にCOMを片付けます
CoUninitialize();
※一度コンパイルすると、dao360.tlhというヘッダーファイルができます。
Thursday, March 23, 2006
Windows�R�}���h�W�F�isubst�j
以下 COMMANDのHELPより
SUBST [ドライブ1: [ドライブ2:]パス]SUBST ドライブ1: /D
ドライブ1: パスを割り当てる仮想ドライブを指定します。 [ドライブ2:]パス 仮想ドライブに割り当てる物理ドライブとパスを指定します。 /D 置換した (仮想) ドライブを削除します。
現在の仮想ドライブ一覧を表示するときは、パラメータを指定せずに SUBST と入力してださい。
パスをドライブ名に関連付けます。
Wednesday, March 22, 2006
アクティビティ図
- 初期状態
スタート地点。たとえば、顧客からの注文が発生したなど、これからシステムに対して働きかけを行おうとする際の基点。
- 制御フロー(実線矢印)
流れ(そのまんま)。ガード条件を付与して、その流れに移行する条件を記述する。ガード条件はオブジェクト制約言語OCLや擬似コード、文章などで記述する。「ガード」条件といっておきながら、実は分岐する条件。
- 動作状態
アクション。働きかけ。これから伸びる制御フローは常に1本となる。
- 状態
現在の状態。イベント待ち。あるいは、何らかの動作を行っている状態。複数の制御フローが指定可能。
- 判断
条件判断。ガード条件を付与した「2つ以上」の制御フローが伸びる。
- 最終状態
制御の終わり。
Tuesday, March 21, 2006
ユースケース図の考察
ユースケースに含まれる要素ごとに、自分なりの考察をしてみる.(殴り書き)
- アクター
人とは限らない.何らかの動作を行おうとする人や物。
- ユースケース
振る舞い。動詞。だから、~データとか、~ファイルとかは、ありえない。それは、DFDなど他の図の仕事。トランザクションの流れでもない。別名イベント。
そもそも、ユースケースの定義とは、ユーザーが要望する『機能』を定義するもので、内部のデータ、処理の流れを規定するものではないし、これらについても記述してはならない。常に顧客に見せるイメージを維持する。だから、システム内部要素が出てきてはならない。
- 関連
アクターとどういう関係かを規定する。別名通信関係。ユースケースどうしで結ばれる事はありえない。
- システム境界
システムが行う事。ここからが、システムの領分。アクターが、システム領域内のユースケースにどう関与するかを、システム領域から飛び出した『関連』が示す形になる。
- Uses汎化
ユースケース同士で結ぶ。あるユースケースについて、共通に呼び出されるユースケースを示す関係。ユースケースの使いまわしをする時の関係。使用汎化関連(関係)。なぜ、汎化と呼ぶかは不明(歴史的背景があると見られる)。UML1.1の古い要素。新しいバージョンでは、<<include
- Extends汎化
バリエーション。例外な用法。とあるユースケースの例外的な用法を示すユースケースと、一般的なユースケースとを結ぶ。UML1.1の古い要素。新しいバージョンでは、<<Extend
http://www.ogis-ri.co.jp/otc/hiroba/technical/Jouhoushori-UML/UML10-2.html
祝64ビット化
Athlon64のデュアルコアにM/B、メモリ、HDはすべて新規ご購入し、ついでにVGAもそろえて、しめて約12万円なり。
少し使っただけで、いくつか問題が発見されたが、まぁ取りあえずは動いている様子。
でも、さすがに今のパソコンはすごいわ。なにが違うって、まず、起動の早いこと早いこと。
いままで3分はかかっていた起動が、POSTとあわせて、30秒以下になった。
それにグラフィック性能。あのGoogleEarthが、目を疑うほど滑らかに動作する様を見て、思わずのけぞってしまった。
おまけに、旧パソコンでは1フレームあたり約1分で動作していたNASAのWorldWindが、なんとサクサク動くではないか。
まさに、地獄から使者と見紛うほどの超速パソコンを作り上げてしまった。
でも殆どの用途は、VisualStudioかEclipse、その他もろもろ無償系開発環境と、メールとインターネットぐらい。
いいのか、こんなんで。
Thursday, March 16, 2006
マクロでページ設定
Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.sheets
With sheet.PageSetup
.HeaderMargin = Application.CentimetersToPoints(1)
.TopMargin = Application.CentimetersToPoints(1.8)
.BottomMargin = Application.CentimetersToPoints(0.9)
.FooterMargin = Application.CentimetersToPoints(0.4)
.LeftMargin = Application.CentimetersToPoints(1)
.RightMargin = Application.CentimetersToPoints(1)
.CenterHeader = vbNullString
.RightHeader = vbNullString
.LeftHeader = vbNullString
.Zoom = 95
.RightFooter = "&9<%会社名とか%>"
.CenterFooter = "&9P.&P/&N"
.LeftFooter = "&9&A"
End With
Next
End Sub
Wednesday, March 15, 2006
Tuesday, March 14, 2006
Monday, March 13, 2006
対処プラン
なぜか、ダイアログメッセージを表示していない場合だと、正常に終了する。
いろいろ調べているうちに、SendMessageとNotifiyMessageが、それぞれ、次の実行を待つという事と、待たないことという違いがある事をはじめて知った。
時にはハマリる事も無駄ではないということか。
さて、対処はどうしようかと考えて、SendMessage(WM_CLOSE)とする強引な終了方法ではなく、終了処理を2段階に分けて、それぞれをユーザー定義メッセージを新設して対処するという案で(明日)いこうと思う。
ユーザー定義を浮けとる箇所はフレームクラスのOnWndMsgとし、ここに、段階終了処理を書いてみよう。
あとは、親Applicationを2つメッセージを送るように変更する。
うまくいけば良いが・・・。
Sunday, March 12, 2006
SendMessageEx(WM_CLOSE)で無限ループ
なんと恐ろしいことを・・・
挙動を確認してみると、早速不都合が発覚した。
このMFC:CHtmlViewを組みこんだApplicationは、親画面よりShellExecuteで呼び出される代物だが、この親画面は、自身のApplicationが落ちる時、そこから起動したアプリケーションも、SendMessageEX(WM_CLOSE)でもろとも落とす仕様になっている。
又、親画面から呼び出されるCHtmlViewを使ったApplicationは、CLOSEメッセージを受けてHTTPサーバーへのデータ受信要求を発行し、データをダウンロードして処理を終了する仕組みであり、その際にプログレスバー付きのダウンロードダイアログを表示する。
そして、今回の不都合は、WEBページがサブ画面を出したあと、SendMessageEX(WM_CLOSE)を実行すると、CHtmlViewを使ったApplicationが無限ループに陥ってしまうという、なんとも致命的なもの。
CHtmlViewで表示されるページが、JavaScriptでAssertダイアログを出そうが、動的にHTMLを生成しOpenDocument(そんな技があったとは知らなかった)しようが、Application上では関知しない。
ただ、後者のOpenDocumetを行った時だけが、今回の不都合を引き起こす原因となっているようだ。
HTMLの生成とOpenDocumetを行っている共通JaveScriptをみる限り、不信なところは見当たらない。
担当者からは調査の必要は無いといわれているけど、やはり少し気になるな。
水面下で継続調査ということで。