2007-04-01から1ヶ月間の記事一覧

レジストリスクリプトの罠

COM はコンパイル時に自動的に CLSID をレジストリに登録してくれます。 この登録する内容は .rgs ファイルにレジストリスクリプトを記述することになるので、.idl の library か coclass の GUID を変更した場合には、こちらも反映させる必要があります。 …

エディットボックスを文字数ではなく byte 数で制限する

エディットボックスの文字数を制限するのはものすごく簡単で、 ::SendMessage(hWnd, EM_LIMITTEXT, (WPARAM)length, 0); こうすれば出来るのだけれども、byte 数で制限を掛けたい場合、Unicode だと標準の機能では対応できないので、エディットボックスを拡…

コネクションポイントはあまり使うべきではない

コネクションポイントはあまり使用しない方がいいらしいです。 何でかというと、コネクションポイントを接続するために5回の往復が必要になるし、イベントを発行する際に、全てに対してイベントを送信することになるので、無駄な往復が出てしまい、効率が良…

operator,()

C++ にはいろんな operator があるけど、その中に operator,() というのがあります。 それを使えば、こんなプログラムが書けます。 CString operator,(const CString& str1, const CString& str2) { return str1 + str2; } CString str1(_T("あい")); CStrin…

LPCTSTR と const LPTSTR

LPCTSTR と const LPTSTR は意味が違うということに初めて気が付きました。 void foo(const LPTSTR str) { str[0] = '\0'; } これ、const だからコンパイルでエラーになるに決まってると思ってたら、無事通りました。 でも、 void foo(LPCTSTR str) { str[0]…

MAKEINTRESOURCE() マクロ

MAKEINTRESOURCE() マクロは、リソース ID に関連づけられた LPTSTR へのポインタを返してくれるのだと思っていたのですが、どうやら違うようです。 こんな定義になってました。 #define IS_INTRESOURCE(_r) ((((ULONG_PTR)(_r)) >> 16) == 0) #define MAKEI…

CAtlExeModuleT<> を使用したプロジェクトでの初期化

VS2005 で COM の exe サーバのプロジェクトを作ると、 class CHogeModule : public CAtlExeModuleT< CHogeModule > { public : DECLARE_LIBID(LIBID_HogeLib) DECLARE_REGISTRY_APPID_RESOURCEID(IDR_HOGE, "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}") }; C…

CryptoAPI を使ってハッシュを求める

C++

セキュリティ上、パスワードとかの重要な情報は出来る限りファイルやメモリ上に置かない方が良いわけですが、そのための方法として、最初にパスワードを設定する際に、設定されたパスワードのハッシュを求め、パスワードは保存せずにそのハッシュ値だけを保…