ソフトウェアを開発し続けて早六年。 バグを憎んで人を憎まず。。 株式投資で脱サラをめざすITエンジニアのホームページ......
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
固定数のオブジェクトをプールするクラスです。
応用すれば、コネクションプールやスレッドプールが作れます。
⇒ 続きを読む
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

Windowsデスクトップサーチとかが使っているIFilterを使っていろんなファイルからテキストを取得します。
テキストファイル,
Office(Word,Excel,Visio,PowerPoint...),
メール,
ヘルプファイル
など、Windowsデスクトップサーチで検索できるファイルなら何でも同じように、テキストを抽出できます。
例えば、
Diff(ファイル比較)や、テキストマイニングとかしたいときに役に立ちます。
ほかにも想像力しだいでいろいろ応用できそうな機能です。

ここからWindowsデスクトップサーチのAdd-inを取得すればさらに多くのファイルタイプに対応できます。
⇒ 続きを読む

テーマ:Windowsプログラミング - ジャンル:コンピュータ

Explorerのコンテキストメニューに独自のメニューを追加します。
Shell Extensionとか呼ばれているものです。
ATLとCOMが解っていれば、とても簡単!

自分用のソフトウェアの場合は、SendTo (送る)にショートカットを入れておくだけで
大体の場合は事足りますけど、
人に公開する場合は、こっちのほうがかっこいいです。
⇒ 続きを読む

テーマ:プログラミング - ジャンル:コンピュータ

ォルダを監視して、ファイルの追加,変更,削除を検出します。
これをビルドするだけでも結構実用的なものができます。
grepと組み合わせて使えば、便利です。
特定のプログラムを動かしたときに変更されるファイルを見つけたりするときとか。。。
っていうか、自分で必要だったんで作りました。


001 #define _WIN32_WINNT 0x0500//なんか←これ書かないとReadDirectoryChangesWが見つけられない
002 #include <windows.h>
003 #pragma comment(lib, "shlwapi.lib")
004 #include <shlwapi.h>
005 #include <iostream>
006
007 static HANDLE s_hFolder;
008
009 //終了時に呼ばれる(予定だったけど。Ctrl+Cで終了すると、呼ばれなかった)
010 static void OnExit(){
011 ::CloseHandle(s_hFolder);
012 std::cerr << "close." << std::endl;
013 }
014
015 int wmain(int argc, wchar_t* argv[])
016 {
017 //ターゲットのディレクトリ
018 wchar_t targetDirectory[MAX_PATH];
019 if(argc < 2){
020 //引数なしだとカレントディレクトリが対象
021 ::GetCurrentDirectoryW(MAX_PATH, targetDirectory);
022 }else{
023 wcscpy(targetDirectory, argv[1]);
024 }
025 //対象のフォルダを開く
026 s_hFolder = ::CreateFile(targetDirectory, FILE_LIST_DIRECTORY,
027 FILE_SHARE_READ | FILE_SHARE_DELETE,
028 NULL, OPEN_EXISTING,
029 FILE_FLAG_BACKUP_SEMANTICS, NULL);
030 if(s_hFolder == INVALID_HANDLE_VALUE){
031 //オープン失敗
032 std::cerr << "invalid folder.(" << targetDirectory << ")" << std::endl;
033 return -1;
034 }
035 atexit(OnExit);
036
037 BYTE buf[1024];
038 DWORD dwReturned = 0;
039 wchar_t fileName[MAX_PATH];
040 wchar_t fullName[MAX_PATH];
041 for(;;){
042 //フォルダの変更を監視
043 if(!::ReadDirectoryChangesW(s_hFolder, buf, sizeof(buf),
044 TRUE, FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME, &dwReturned, NULL, NULL))
045 {
046 continue;
047 }
048 if(dwReturned == 0){
049 continue;
050 }
051 DWORD dwNext = 0;
052 for(;;){
053 FILE_NOTIFY_INFORMATION* pInfo = reinterpret_cast<FILE_NOTIFY_INFORMATION*>(buf + dwNext);
054 //変更のあったファイル(s_hFolderからの相対パス)を取得。
055 //(末尾に\0が入ってない)
056 wcsncpy(fileName, pInfo->FileName, pInfo->FileNameLength / sizeof(wchar_t));
057 fileName[pInfo->FileNameLength / sizeof(wchar_t)] = '\0';
058 //フルパスにする
059 wcscpy(fullName, targetDirectory);
060 ::PathAppendW(fullName, fileName);
061 //変更があったのが、ディレクトリだったら飛ばす
062 if(!::PathIsDirectoryW(fullName)){
063 const char* state = NULL;
064 switch(pInfo->Action){
065 case FILE_ACTION_ADDED://追加された
066 std::cout << "[Add]";
067 break;
068 case FILE_ACTION_MODIFIED://変更された
069 std::cout << "[Mod]";
070 break;
071 case FILE_ACTION_REMOVED://削除された
072 std::cout << "[Rem]";
073 break;
074 case FILE_ACTION_RENAMED_OLD_NAME://リネームされた(変更前のファイル名)
075 std::cout << "[RenameOld]";
076 break;
077 case FILE_ACTION_RENAMED_NEW_NAME://リネームされた(変更後のファイル名)
078 std::cout << "[RenameNew]";
079 break;
080 default://予期せぬステータスが返ってきた
081 std::cerr << "invalid action.(" << pInfo->Action << ")" << std::endl;
082 continue;
083 }
084 std::wcout << fileName << std::endl;
085 }
086 if(NULL == pInfo->NextEntryOffset){
087 break;
088 }
089 dwNext += pInfo->NextEntryOffset;
090 }
091 ::Sleep(10);
092 }
093 return 0;
094 }

テーマ:プログラミング - ジャンル:コンピュータ

WindowsのC++でコールスタック(関数呼び出しの階層状態,Java風に言うとスタックトレース)を取得する方法です。
例外やエラー時にコールスタックをロギングすると
デバッグがとても楽になります。

私の昔のサイトでも同じようなのを載せてたんですけど、
とても重要な機能なので、こっちにも買いときます。

※WindowsXP SP2では、なぜかうまく取れませんでした。
※どなたか解決方法をご存知でしたら、おしえてください。
⇒ 続きを読む

テーマ:プログラミング - ジャンル:コンピュータ










ポインタの参照先をチェックするWindowsAPIです。
参照先の内容によって4種類あります。
IsBadReadPtr呼び出し側プロセスが、指定されたメモリブロックに対して読み取りアクセスを行えるかどうかを判断します。
IsBadStringPtr呼び出し側プロセスが、1 つの文字列ポインタで指定されたメモリ範囲に対して読み取りアクセスを行えるかどうかを判断します。
IsBadWritePtr呼び出し側プロセスが、指定されたメモリ範囲に対して書き込みアクセスを行えるかどうかを判断します。
IsBadCodePtr呼び出し側プロセスが、指定されたアドレスのメモリに対して読み取りアクセスを行えるかどうかを判断します。

テーマ:プログラミング - ジャンル:コンピュータ

Microsoft Office 2003 のOCRをC++で使う。
画像から文字列を抽出するプログラム。
【必須環境】
・Microsofto Office 2003
⇒ 続きを読む

テーマ:プログラミング - ジャンル:コンピュータ

// HOME // 
シャトー・フルール・ド・ジャン・ゲイ・レゼルヴ 2001
↑これ、お気に入りのワインです
毎日ペースで飲んでる中からの
厳選(?)チョイスする予定。。
(ちなみに赤が好き)
カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
ブログ内検索

RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。