C/C++
CとC++のカテゴリ
ダウンロードサイトに極東IT Engineersの創立記念勉強会でしゃべった時の 資料 を公開しました。懲りもせずJIS2004話ですが、今回はちょっとプログラムデモを作ってみました。 主催者におどさ…もとい、「ぜひに」とせがまれたので 。 前のものとは少し追加した感じですかね。なので、旧作も併せてお読みください。
続きを読む
codeseek 25回勉強会でお話しした資料を公開しました。 codeseek 25回勉強会資料-ログ話いろいろ いいわけですが、これやる数日前からいろいろあって、もうちょっと実装寄りの話を入れようと思っていたのですが、入れられませんでした。期待していた人、ごめんなさい。セッション中にいくつか質問も頂きました。ここでQ&Aも公開します。忘れているぞ!というものがあれば教えてください。 ログをXMLで出すのは無し? 個人的にログとは「高速化を追求する」か、「その場で手軽に読める」のどちらかだと考えています。あと、少ないですけれどXMLだと異常系を考えると頭が痛いですしね。タグの途中でDisk
続きを読む
Win32(※1)ではファイル名に使用できない文字(列)というものが決まっています。これはDOS時代からの互換性のためによるものです。 Naming a File (msdn2 library)から引用。ここではDOSからの仕様に基づいて書かれているようです。 AUX、CLOCK$、COM1 ~ COM9、CON、CONFIG$、LPT1 ~ LPT9、NUL、および PRN(※2) \ < > : " / \ | ? *(※3) period(.)はカレントディレクトリを表すので不可。
続きを読む
Windows Sharepoint Serviceを便利に使い始めてちょっと気になったことがありました。Office製品ではSharepointのURLをコモンダイアログに指定するとこんなビューが表示されます。 これは2007 OfficeでSharepoint 3.0のサイトを開いたところ。ビューが表示されてわかりやすい。ところが、メモ帳(notepad)で同じURLを指定するとこんな感じ。 そのまんまWebDAVを見せている用に見えます。これでもまぁわかるといえばわかるのですが、できればOfficeのようにWebビューで表示してほしい。そこでどんな実装になっているのか、Spy++でみてみました。
続きを読む
Windowsのファイル名の最大長考察 で最大ファイル名を少し試してみました。最後のPowerShellでより長いファイル名が扱えないということが疑問だったので、.NET Frameworkで試してみましょう。 1: FileInfo fi = new FileInfo( @"c:\temp" ); 2: DirectoryInfo di = new DirectoryInfo( @"c:\temp" ); 3: FileInfo[] files = di.GetFiles( "*.txt" );
続きを読む
NTFSファイルシステムにおいて、CRTでは 256文字と定義されています が、 CreateFile ではワイド文字であれば、32767文字まで指定できるとあります。ちょっと実験してみましょう。 1: void Win32UnicodeName( void ) 2: { 3: WCHAR wszLongLongName[] = L "\\\\?\\c:\\temp\\" 4: L" 123456789012345678901234567890 " 5: L" 123456789012345678901234567890
続きを読む
1: void SeparatePath( void ) 2: { 3: TCHAR szFile[] = _TEXT( "\\\\servername\\Sharename\\path\\base.txt" ); 4: TCHAR szDrive[_MAX_DRIVE + 1], szPath[_MAX_DIR + 1], szBase[_MAX_FNAME + 1], szExt[_MAX_EXT + 1]; 5: 6: _tsplitpath(szFile, szDrive, szPath,
続きを読む
Windowsのファイルについて、まずは基本のVisual C++ 2005 SP1 CRTでの定義から。includeディレクトリにあるstdlib.hではこうなっています。 1: #define _MAX_PATH 260 /* max. length of full pathname */ 2: #define _MAX_DRIVE 3 /* max. length of drive component */ 3: #define _MAX_DIR 256 /* max. length of
続きを読む
非常によく聞かれるネタ。 レジストリのキー(値)を大文字で入力しちゃったんですけど、大丈夫でしょうか? ファイル名小文字で入力したけど、大文字にしなくても大丈夫でしょうか? カーネルオブジェクト大文字小文字大丈夫でしょうか? コンピュータ名大文字小文字大丈夫でしょうか? アカウント名大文字小文字大丈夫でしょうか? どれも大丈夫です。さすがにファイル名は(ファイルシステム上は区別されているものの)大文字小文字を区別しないという認識が浸透していますが、レジストリのキーと値に関してはちょっとうまく動かないと必ず聞かれます。
続きを読む
会社でEFSで暗号化したファイル群を元に戻すために作ったプログラムを整形したバージョン。ファイルの暗号化を戻した場合、タイムスタンプが書き換わってうれしくないので(仕様的には書き変わらないとまずいのでしょうが)、タイムスタンプを保持しておいて、戻すという技を使っています。 実際はエラーチェックとか入っていたり、構造がちょっと違いますが。エラーが出たら許してください 。参照にSystem.Security.dllを追加してください。 readonly(読み取り専用)をはずしているのはVSSなどにチェックインしたファイル対策。ReadOnly属性をはずしておかないと例外が発生します。
続きを読む
Windowsのアプリケーションのexeファイルそのものに実行権限がない場合、「プログラム 'hoge.exe' の実行に失敗しました: アクセスが拒否されました。」というメッセージが出ます。GUIだとこんなメッセージ。 これはこれで非常にわかりやすいのです。が、アプリケーションから呼び出すDLLに実行権限がない場合、0xc0000022というエラーを出して、アプリケーションの起動に失敗します。 exeから呼び出されるdllに何があるかは Dependency Walker で調べることができます。Visual
続きを読む
Visual Studio 2005でC#とC++/CLIが混在するソリューションを作り、C++/CLI側でC#側のコードを呼び出すような構成の場合、C#側の修正がどんなに軽微でもC++/CLIはフルビルドが走ってしまいました。小さいプロジェクトならまだしも、大きいのになるとなかなかしんどいのではないでしょうか。私の場合、C++/CLIが2000行程度のプロジェクトですが、それでもいやだなと思うくらいです。 Orcas(Beta1)ではこの辺賢くなっているようで、C#側の内部処理が変わった程度ではC++/CLIのフルビルドまで行われなくなってます。これだけでもOrcasに移行したい
続きを読む
Win32 SDKを使ってプリンタドライバで管理されている内部トレイ番号を取得する方法。 16以降 256以降がドライバ用みたいです。あーしまった。そういえば、テストしたとき、256以降が帰ってきていた… 。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 // プリンタのドライバ内で持っているトレイ番号を取得するロジック。
続きを読む
C#(.NET Framework)の [Obsolete]属性 を見たとき、「ああ、C/C++にも欲しいなー」と痛切に思いました。APIが変わったり、実装を変更して、こっちを使って欲しい…といった場合、メールの告知や仕様書の改編では絶対に見てもらえない人がいるから。 ところが、似たような物はちゃんとあるんですね。たとえば、Visual C++ 2005でstrcpyを使うとC4996という警告が出ます。 1 2 TCHAR Dummy[256]; strcpy(Dummy, TEXT( "Dummy"
続きを読む
2007/3/27にcodeseek+こみゅぷらす勉強会でしゃべったときの資料を公開します。ダウンロードからどうぞ( 直リンク )。 主にTask Scheduler 2.0についておはなししました。本当においしくなるのはLonghornからだと思いますけれど、調べてみるとUACのからみやらセキュリティのからみやらでイロイロと発見があって、おもしろいです。 ネタの解説はまたこっちのblogででも行います。今回は前以上に細かいスクリーンショットが多かったため、見づらくてすいませんでした…。>参加された方々
続きを読む