Officeのフォーマットが公開されている
何かとオープンな時代。
先日、Officeのバイナリフォーマット仕様が公開されました。
http://www.microsoft.com/interop/docs/officebinaryformats.mspx
えっと ・・・ 今更だよね!?
08:41 午後 WindowsDev | 固定リンク | コメント (2) | トラックバック (0)
何かとオープンな時代。
先日、Officeのバイナリフォーマット仕様が公開されました。
http://www.microsoft.com/interop/docs/officebinaryformats.mspx
えっと ・・・ 今更だよね!?
08:41 午後 WindowsDev | 固定リンク | コメント (2) | トラックバック (0)
C++でDLLを作成していざVisual Basicから呼ぼうとすると関数が呼べない。
そんな問題を解決した経験があるならば、関数の装飾名や呼び出し規約についてご存じでしょう。実は、1年ほど前に同等の記事を長々と書きましたが、重要な部分だけを再びおさらい、ちょっと補足。
意味もなくDEFファイルを作っている人は理解が足りないかもしれません。
10:55 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
タイトルの通りですが、DOSプロンプトでは「&」を使って命令を繋げることが出来ます。
簡単な例では
> cd windows & dir
とするとwindowsという名前のディレクトリに移動した後、dirコマンドを実行します。
此処までは分かっていたのですが・・・
01:13 午前 WindowsDev | 固定リンク | コメント (2) | トラックバック (0)
サービスパックを当てると、自分の作ったアプリケーションが他の環境で動作しなくなります。最近ハマりました。(5分で解決したけど)
何故、動作しないかというと、C++のランタイムのバージョンが微妙に上がっているからです。
07:41 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
Windowsでプログラムの実行時間を計るのは簡単ではありません。他のスレッドが計測の邪魔をするからです。
最初に確認しなくてはならない事は、実行時間を計測するために、ソースコードを修正できるか否かです。
前者の場合は、Kernrateやパフォーマンスカウンタを使うのが一般的です。
ここでは後者の状況について詳しく検討していきます。
07:26 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
最近のVisual Studioで開発を行うと勝手にできてしまうんです、とか言われました。
これらは全て、アプリケーションが使うDLLの選定に関係しますので覚えてください。
以下、解説していきますが、答えを見るまえに自分で考えてみてください。
10:21 午後 WindowsDev | 固定リンク | コメント (2) | トラックバック (0)
LIBが欲しいんだけど、DLLしかないと言われました。そんなとき、貴方ならどうしますか?
ここでは、後者の方法について紹介します。
11:05 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
今日気づいたのですが、.NET Framework 3.0が出たようです。
ダウンロード先は以下の通り。
いつものごとく、SDKにはランタイムが含まれないため、開発者は両方ダウンロードする必要があります。
12:00 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (1)
Windowsではアプリケーションが落ちるときに妙なダイアログを出します。この情報は開発者にとって有益でも、一般人にとっては邪魔なだけです。そもそも、アプリケーションのスタックダンプなんてMSのサーバに送ってしまったら、情報漏洩にもつながりかねません。
そこで制御しようとした所、出るダイアログの種類が意外と多いことに気づきました。そこで制御方法について纏めておきます。
12:48 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
私はすっかり見落としていたのですが、Visual Studio .NET 2003 サービスパック1が公開されていました。
ちなみに、ブラウザのTOPページをMSDNにしているのに気づきませんでした。ダウンロード情報に書く内容は絞って欲しいと思います。
12:06 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
SALとはStandard Annotation Languageの略で、現時点では、WindowsAPIの関数呼び出しの記述に使われています。
SALという言葉は知らなくてもこのようなヘッダを見たことはあるのではないでしょうか?
StringCchCopyA(
__out_ecount(cchDest) STRSAFE_LPSTR pszDest,
__in size_t cchDest,
__in STRSAFE_LPCSTR(※1) pszSrc
);
赤字の部分がSALであり、VC++でコンパイルした場合、バッファオーバーフローを検出したりする事が出来ます。
09:26 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
偽装を乱暴に説明すると、スレッドがユーザになりすます仕組みです。Windowsではスレッドを1つ作成し、権限を落としたトークンを割り当てる事により、セキュリティを確保することができ、アプリケーションサーバなどで良く利用されます。
しかし、偽装(Impersonate)時のユーザ情報の参照には気をつける必要があります。何故なら偽装中のユーザ情報ではなく、別のユーザの情報にアクセスしてしまう可能性があるからです。
07:07 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
開発者は少なからず自分の贔屓サイトを持っていると思います。
今回は私が使っているサイトの中からWindows開発に役に立つリンクを集めてみました。
01:50 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
文字列や数字を正しく扱うのが難しいということは認知されているようですが、実際に正しく使えている人は意外と少ないものです。
Windowsシェル関数(IEと共にアップデートされる)の中にはStrSafeとIntSafeというAPI群が存在するため、誰でも簡単にセキュアなプログラムが作成できます。
11:29 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
Microsoft社のページを眺めていたらMSDN Libraryへのダウンロードリンクがあったので調べてみました。
どうやら2005の更新用パッケージらしいですが、サイズからすると普通に全て入っていそうな雰囲気。配布先はダウンロードセンターで、「MSDN ライブラリ 2006年6月版」と検索すれば出てきます。ちなみに直リンクはこちら。
Visual C++もExpressで十分だし、ドキュメントも定期的にアップデートされるならば、もうMSDNの会員になる必要がない気がします・・・。
06:14 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
開発の際にツールを使うとかなり効率がアップするわけですが、地道にデバッカを睨んでいるだけの人が多いのには驚かされます。
そんな訳でお勧め出来るフリーのツールを紹介します。
02:01 午前 WindowsDev | 固定リンク | コメント (3) | トラックバック (0)
以前、Windowsのメモリ確保関数について使い分けを書きましたが、今回はもう少しVisual C++寄りに説明します。
mallocやnewが割り当てる最小単位が何バイト程か考えた事がありますか?
考えた事が全くない場合、貴方のアプリケーションは速度において大きく損している可能性があります。
11:56 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
Windowsにおいてマルチスレッドにする理由は何でしょうか?
並列処理による高速化をすれば~等と言う人も多いですが、私の経験則からして大抵の人は良く理解せずに発言しているようです。Windows開発における超基礎をおさらいします。
02:57 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
.NET FrameworkはCOMの発展系として作られたので、通常の関数をCOMの関数であるかのように公開できます。公開の方法は言語によって異なりますが、COMVisibleAttributeという属性を利用すると簡単にできます。
作成したDLLは.NET Framework付属のREGASMコマンドを利用してCOMとして登録し、Visaul C++ 6.0等の古いアプリケーションで利用することが出来ます(当然実行環境に.NETのランタイムは必要)。
例えばVC++では以下の通り。
11:04 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
基礎的な事ですが、Visual C++やPlatform SDKに含まれるヘッダはマクロ定義によって内容が変化します。これは開発したプログラムが動作するWindowsを限定するのに利用します。
その目的で指定出来るのは以下の4つです。
12:53 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
気づくのが大分遅れましたが、2006/3/14にPlatform SDKがUpdateされていました。
バージョンがWindows Server 2003 R2と書かれていますが、一部APIを除き過去のOSでも動作しますし、ちゃんとサポート対象に含まれています。
Windows APIの不具合が修正されていたり、新機能が増えていますので、開発者は常に最新のものを確認しておく必要があるでしょう。
10:56 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
Windowsで時間を計測する場合、関数が沢山あって迷ってしまうらしいです。
そこで私が使う関数を精度順にならべてみました。
分解能が高いと他プロセスに与える負荷が増えるため、用途に応じて精度ギリギリの関数を選択すると良いと思います。
12:32 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
最適化の為にはメモリの確保方法は工夫しなければならないと以前の記事にしましたが、Windowsプログラミングにおける工夫の1つをご紹介します。
Windowsにはメモリ確保の関数が多いですが、最低限以下の4つは特性を理解して使うべきです。
01:17 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
Visual C++ 2005のCランタイムであるMSVCR80.DLLが無いためアプリケーションが起動出来ない場合があります。(サービスパックを当てた方はこちらも参照)
その場合、Microsoft Visual C++ 2005 再頒布可能パッケージ(x86)を導入するのが最も簡単です。
この問題は「.NET Framework 2.0 Redistributable Package(再配布可能パッケージ)」を導入すると解決します。一緒にC++のランタイムであるMSVCP80.DLLもインストールされます。(いつの間にか同梱されなくなったようです)
# 最新のVC8ではSideBySideを考慮しているため、今までのように簡単な配布が出来なくなりました。コピーして動くというものではありません。使用するためには、EXEファイルのリソース、または外部ファイルとしてマニフェストを使う必要があります。
12:51 午前 WindowsDev | 固定リンク | コメント (2) | トラックバック (0)
最近、同じプロセス内で何度も使うような関数を何度もFreeLibraryしている例を見ました。その遅さは見るに堪えないものでした。
LoadLibraryした後に決定される関数のアドレス(GetProcAddress)は、FreeLibraryしない限り、プロセス終了時まで変化することがありません。
03:52 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
DLLを作る事は出来るのに、Importテーブルについて知らない人は結構います。Importテーブルとは、他のDLLの関数を高速に呼び出す為のインデックスです。
08:06 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
EXEにCランタイム(以下CRT)の関数を埋め込むのは良くないです。
動的にリンクしたい場合、Visual C++では「/MD」スイッチを利用します。
理由は以下のとおり。
・複数のCRTが同時に読み込まれるのを避ける
異なるバージョンのCRTは情報を共有しません。複数初期化されたり、環境変数を設定しても一部にしか反映されなかったりします。メモリの開放をするどころか、ファイルポインタの共有すら出来ません。
01:18 午前 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)
DLLに対して常にLoadLibraryが可能であるとは限りません。遅延読み込みしたDLLについても同様の事が言えます。
09:26 午後 WindowsDev | 固定リンク | コメント (0) | トラックバック (0)