Win32

遅いAPI

FlushFileBufferは書き出しを待つのでとてつもなく遅い。New_Lineごとに呼んだりすると馬鹿を見る。 WriteConsole/ReadConsoleは端末(cmd.exeのスクリーンバッファとかキー入力)以外のハンドルを渡すとエラーリターンしてくるまで遅い。まさかcmd.exeと通信…

Win32構造化例外処理 脱線その1

いきなり脱線ですが……。 System.pasの{$IFDEF PC_MAPPED_EXCEPTIONS}は、名前の通りプログラムカウンタ=インストラクションポインタから例外ハンドラを探す、つまりはgccで言うzero-cost-exceptionだと想像できるのですが、この$IFDEFが、Windowsの時にも書…

Win32構造化例外処理その1

最近ここに何か書く暇があまり無くて調べたらすぐわかるようなAdaネタでお茶を濁していたわけですが、気がつくと何も書けなくなってきている気がしてきたので、リハビリがてらになにか短期シリーズやろうと思いました。 ネタは……探すか……きょろきょろ……うろ…

MsgWaitForMultipleObjectsEx

dwWakeMaskを0にしててもWAIT_OBJECT_0 + nCountで返ってくる時があるのな。 Thebeフリーズの本質的な原因はこれでした。(49.1は対処療法でした) WaitFor系は全部MsgWaitForMultipleObjectsExだけでいいじゃん、でコード書いてる人は注意…っていないか。

同期API

QueueUserAPCだのRegisterWaitForSingleObjectだのって、実は理解すればとても使える仕組みなんじゃなかろうか、と思うこの頃。(理解できない) TMultiReadExclusiveWriteSynchronizerのTryBeginWriteがあるバージョンが必要で、今まではクリティカルセクショ…

SetForegroundWindow

thebe.exeやeofile.exeが複数起動された場合、ThebeではWM_COPYDATA、EOFileではDDEによって、元からあるプロセスに通知を行い、元からあるプロセスが新しくスレッドを作りウィンドウを開きます。 この時、元からあるプロセスは、当然フォアグラウンドでは有…

固定長メモリマネージャ2

というわけでModern C++ Design*1を引っ張り出してきて、起きた頭で書き直し。 type TFixedMemoryManager = object private Memory: Pointer; UnitSize: Cardinal; First: Pointer; Last: Pointer; public constructor Initialize(AUnitSize: Cardinal); des…

固定長メモリマネージャ1

眠い頭で二時間ぐらいで書いてみました。 type TFixedMemoryManager = object private Memory: Pointer; UnitSize: Cardinal; First: Pointer; Last: Pointer; CachedBlock: Pointer; public constructor Initialize(AUnitSize: Cardinal); destructor Final…

Shell NamespaceでFTP!?

EOFileのレビューをしていただいている(とても貴重な)サイトから。*1 この方もファイラーを作っておられるようなのですが…http://xinn.homeip.net:8888/pukiwiki/pukiwiki.php?WinEF シェルの名前空間に対応しました。速度はdirlistより少し劣る感じ。 マイ…

Win32限定版 of http://d.hatena.ne.jp/shinichiro_h/20040730#p1

http://www.geocities.co.jp/SiliconValley-Sunnyvale/8635/ あたりで読んだ記憶から。 だーっと並べるような関数に__declspec(dllexport)つけておいて、.exe自身をGetModuleHandleで得れば、GetProcAddressで名前から関数アドレスが引けます。 元は、F-BASI…

MMXリンク集

MMXは実は使ったことがないのでメモ。 Delphi6以降はインラインアセンブラがMMX対応、っと。 MMXの解説は以下のページがわかりやすいです。http://www1.kcn.ne.jp/~robe/pf/pf009.htmlDelphiの例。インラインアセンブラでMMXが使えなかった時代のものですの…

いただいた不具合報告から

Windows2000ではゴミ箱をデスクトップから消しているとSHSpecialFolderLocationで取得ができなくなるらしい。 (というより本来非表示にできないものを、レジストリを消すとかして取得をできなくすることで非表示にしてるんでしょうね。その手のツールはよく…

AvestaのLaLa Moo-Moo氏の日記

http://lamoo.s53.xrea.com/diary/diary.html純粋に感心するしかない…。 私もファイラー作者ならこの程度は知っておかねばならないのでしょうか?

mission impossible - GetTickCountを乗っ取れ!

用意した武器はMicrosoft Visual C++ Toolkit 2003。 ターゲットはtest.exe。(↓) #include #include int main() { for(;;){ std::cout GetTickCountを以下のようにせよ! unsigned d_GetTickCount() { return p_GetTickCount() / 2; } まずは普通に(!?)ker…