VC++のBCMenuクラス内でプログラムが落ちる

VC++のBCMenuを使っている。

BCMenu : http://www.rocscience.com/~corkum/BCMenu.html

http://www.codeproject.com/Articles/22/Cool-Owner-Drawn-Menus-with-Bitmaps-Version-3-03 (3.033がダウンロード可能)

 

しかし、BCMenuクラス内で落ちることがあった。

 

・プログラム内で、以下のようにセパレータを追加

BCMenu* pSubMenu;

...

CMenu* pMenu = (CMenu*)pSubMenu;

pMenu->InsertMenu(2, MF_BYPOSITION|MF_SEPARATOR);

 

・その後、追加したセパレータを削除

・削除したセパレータより下にセパレータがあった場合、このセパレータの表示がおかしくなるもしくは、プログラムが落ちる

 

プログラムをおったところ、BCMenuData であるはずのものが、CString になってたりした。なので、上記の部分を発見。修正した。

 

(なぜ、CMenu* にキャストしていたかは謎。)

 

 

ついでに、BCMenu の2点おかしなところを発見。

1. 無意味コード

1426行目付近

    else if (nFlags&MF_STRING){
        ASSERT(!(nFlags&MF_OWNERDRAW));
        ModifyMenu(pos,nFlags,nID,mdata->GetString());
    }

は、MF_STRING が 0 なので、絶対に if文の中は実行されない

 

2. 無意味指定

1990行目付近

            if(!mdata)mdata=NewODMenu(j,
                state|MF_BYPOSITION|MF_SEPARATOR|MF_OWNERDRAW,0,_T(""));//SK: modified for Unicode correctness
の MF_BYPOSITION の指定は意味なし。

 

ソースを読む限り、BCMenuData->nFlagsに MF_BYPOSITION は、指定しても無意味。

Twitterコマンドラインクライアント shtter の Twitter API 1.1 対応

ツイッターLinux コマンドラインのクライアント shtter の Twitter API 1.1 対応のパッチ

https://lostman-worlds-end.blogspot.com/2010/05/openwrt_22.html?showComment=1373621194847#c28097559419757091

 

マージ済みのソース

https://github.com/lostman-github/shtter/tree/v1.1-patched

 

シェルスクリプトの中で投稿だけするために shtter を利用させていただいていたのだが、Twitter API 1.0 が完全停止され困っていたので、助かる。

 

(Twitter API v2 対応は 

Twitterコマンドラインクライアント shtter の Twitter API v2 対応 - 苦労する日々 )

VC6 で GetProcessId()

VC6 で ShellExecuteEx をしたプロセスのプロセスIDの取得に苦労。

GetProcessId() は、kernel32.dll に実装されているが、VC6 のヘッダにはないみたい。

以下で解決

typedef ULONG (__stdcall *GETPROCESSID)(HANDLE Process);

GETPROCESSID GetProcessId=(GETPROCESSID)GetProcAddress(GetModuleHandle("kernel32.dll"), "GetProcessId");
DWORD processID = GetProcessId(m_hProcess);

Windows7 急に起動を含むすべての動作が遅くなった。

現象: Windows7 急に起動を含むすべての動作が遅くなった。

 

検索して、HDD のライトキャッシュや DMA 設定などを確認したりしたが、ダメ。

 

いろいろ設定を確認していて気づいた。

原因:ソフトウェアRAID1 が再同期中

 

 

 

 

 

vSphere 上の CentOS5 でのHDD二つの時に、df で表示されるものと違う HDD がマウントされていた。

vSphere 上の CentOS5 でのHDD二つの時に、df で表示されるものと違う HDD がマウントされていた。

以下の状況


つまり、df の表示では、/dev/sda2 が / にマウントされているように見える。
(mount でも同様)
しかし、実際は /dev/sdb2 が / にマウントされている。
(fsck の結果参照)

dmesg を見たら、以下だった。

device-mapper: multipath: version 1.0.6 loaded
EXT3 FS on sdb2, internal journal
kjournald starting.  Commit interval 5 seconds
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
kjournald starting.  Commit interval 5 seconds
EXT3 FS on sda4, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
Adding 2096472k swap on /dev/sda3.  Priority:-1 extents:1 across:2096472k

理由は不明

fstab の書き方を変更して解決

Microsoft Visual Studio 2008 Service Pack 1 のセキュリティ更新プログラム (KB971092) が Windows7 32ビット で失敗する

Windows Update で失敗、Windows のアプリケーションログに以下のように表示されている。

 

製品: Microsoft Visual Studio 2008 Professional Edition - JPN - 更新 'Microsoft Visual Studio 2008 - Hotfix - KB971092' をインストールできませんでした。エラーは 1603 です。追加情報は、ログ ファイル C:\Windows\TEMP\VC Libraries QFE Patch_20130514_100355793-Microsoft Visual Studio 2008 Professional Edition - JPN-MSP0.txt にあります。

 

画面に出たコードは643。

で、繰り返し Windows Update で出てくる。

 

「kb971092 失敗」検索して いくつか見たが、どれも当てはまらない。

 

http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/78dcad3b-649b-4fdf-aaa6-335bc6af8c0d/

http://yoshy.b.sourceforge.jp/2011/10/04/vs2008sp1%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E6%9B%B4%E6%96%B0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0kb971092%E3%81%8Cwin7x64%E3%81%A7%E5%A4%B1%E6%95%97/

http://stackoverflow.com/questions/1216893/visual-studio-2008-security-update-installation-issue-kb-971092

 

単独で、KB971092 をダウンロードして、実行したが同じエラー

 

ログを見ると、

MSI (s) (90:60) [10:32:50:098]: Executing op: AssemblyCopy(SourceName=109236|Microsoft.VisualStudio.CommandBars.dll,SourceCabKey=FL_Microsoft_VisualStudio_CommandBars_dll_109236_109236_x86_ln.3643236F_FC70_11D3_A536_0090278A1BB8,DestName=Microsoft.VisualStudio.CommandBars.dll,Attributes=16384,FileSize=69632,PerTick=65536,,VerifyMedia=1,,,,,ComponentId={6D9779D8-A343-4D9D-A3A4-DFC3D3413916},IsManifest=1,,,AssemblyMode=0,)
DEBUG: Error 2902:  Operation ixfAssemblyCopy called out of sequence.
MSI (s) (90:60) [10:32:50:098]: 製品: Microsoft Visual Studio 2008 Professional Edition - JPN -- このパッケージのインストール中にインストーラで予期しないエラーが発生しました。このパッケージに問題がある可能性があります。エラー コードは 2902 です。引数: ixfAssemblyCopy、、

このパッケージのインストール中にインストーラで予期しないエラーが発生しました。このパッケージに問題がある可能性があります。エラー コードは 2902 です。引数: ixfAssemblyCopy、、
MSI (s) (90:60) [10:32:50:118]: User policy value 'DisableRollback' is 0
MSI (s) (90:60) [10:32:50:118]: Machine policy value 'DisableRollback' is 0
アクション終了 10:32:50: InstallFinalize。 戻り値 3。

 

DLL ファイルが変?

 

それでも、わからず、KB971092 の情報を MS サイトで探してたら、

以下URL で、SP1ではなく、VS2008無印用のパッチ(KB971091)もあることを発見。

http://technet.microsoft.com/ja-jp/security/bulletin/ms09-035

 

確認したらすでにあたっている!!!(Windows Update で)

 

f:id:shaggyman:20130516132533p:plain

 

なので、KB971091 をアンインストール後、KB971092 をインストール- -> 無事成功

 

f:id:shaggyman:20130516132534p:plain

 

時間がかかった。