C/C++でWindowsプログラミングをやり始めたとき、誰もが一度は嫌になるあの謎のデータ型。 "LPCTSTR"なんてのはその典型例です。 しかし、これが何かを知らぬまま放っておいてる、ということが意外とありがちなんですよね。 というわけで、一応簡単に解説しておくことにしよう、と思ったまでです。 ※ 開発環境は、Microsoft Visual C++ 2005 を想定しています。 1.UNICODE 文字コードとはつまり、数値と文字の関係を示したものです。 文字'a'は128で表し、文字'b'は129で表し・・・と文字と数値が一対一で対応して定められています。(数値は適当です) UNICODEも、その文字コードの一種で、古い文字コードのASCIIに比べて新しいものです。 NT系のWindowsには全て対応しているので、現在のほとんどの環境がUNICODE対応となっています。 だったら
大手コンピュータ・メーカー勤務。入社以来10数年をソフトウェア開発の現場で過ごし,その後ソフトウェア品質部へ異動。現場への技術支援や品質教育開発などを主に行っている。「APIで学ぶWindows徹底理解」(日経BP社)などを執筆。 2007年1月末の一般向け出荷を控え,Windowsの世界では新バージョンVistaが注目を集めている。開発者にとってWindows Vistaの一番のポイントはと言えば, .NET Framework 3.0を標準で搭載する点を挙げる人が多いだろう。雑誌にせよWebにせよ,最近のWindowsプログラミングの記事のほとんどは .NET向けだ。マイクロソフトも,これまでネイティブ・コードでの開発が主流だったC/C++開発まで, .NETへの移行を促そうとしている。実際,マイクロソフトが無償で配布しているC/C++統合開発環境Visual C++ 2005 Exp
UsefullCode.net Visual Studio 2005/2008/2010やandroid SDK/NDKでの開発者向けに便利なソースコードを提供 This site provide you with useful source codes under 'USEFULLCODE license'. 前回までにウインドウにJPEG画像を表示する処理を作成した。しかし表示される画像は縦横比に関係なく拡大縮小されてしまっている。そのため今回は縦横比を保ったまま拡大縮小させる。 ImageViewerView.hを開く。ここで赤枠内を修正する。この部分は画像表示をするクライアント領域の取得と画像の描画をしている。 DraiImage()は第一引数にImage、それ以降の4引数はそれぞれ描画開始XY位置と描画サイズを示している。 赤枠のように変更した。かなり長いソースコードになってしま
C 0 のみ偽。 Perl 数値の 0、文字列の "0"、空文字列 ""、未定義値のみ偽。 Ruby false, nil のみ偽。 Python False、None、数値の 0、空文字、空のコンテナ(string、list、tuple、set、frozenset、dict など)のみ偽。 VimScript 数値の 0 のみ偽。文字列は暗黙にatoi()と同様の方法で数値に変換される。数値・文字列以外は真偽値として使えない。 VBScript Empty, Null, False, 0, "False", "0" は偽。文字列は大文字・小文字を区別しない。半角・全角も区別しない。 C (gcc -W -Wall -pedantic)では浮動小数点数を真偽値として使えた。コンパイルエラーになると思っていたのに。 printf(0.1 ? "true" : "false"); // tru
Python2.5でSQLite3を使って以来、C++でも試したいと思っていた。 Windows用のSQLite3のDLLは、msvcrt.dllのみに依存する、という手軽なものであり、DLL自体のサイズも400KB足らずと軽量である。 これを実際にプログラムに組み込んで使ってみた。 必要なもの SQLiteのページから、以下の2つをダウンロードする。 sqlitedll-3_3_8.zip sqlite-source-3_3_8.zip (sqlite3.h が必要なため) DLLは当然として、この中にはsqlite3.dllと、そのDEFファイルのみが置かれている。 ヘッダファイル等がないので、ソースを取得する必要がある。 実際に使うヘッダは、sqlite3.hだけである。 準備 DLLはあるがlibファイルがないので、 lib /def:sqlite3.def /machine:x8
文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ Ruby, Python, JavaScript, Perl, C++ の文字列操作の比較表を作りました。配列操作の比較表の続編です。間違いなどがあったらご指摘いただけると助かります。 Ruby (String) Python (str) JavaScript (String) Perl C++ (std::string)
はじめに システムファイルのリバースエンジニアリングを行っていると、Windows File Protection(WFP)の存在がとても面倒に感じます。セキュリティ的観点から見ると、WFPはとても重要なシステムですが、プログラマや解析者からすると少しやっかいな存在です。よって私は、どうにかしてこのWFPを制御できないか、と考えました。このテキストは、その方法を模索した結果を書き記したものです。 私の環境は「WindowsXP SP2」であるため、このテキストは基本的にその環境に従って書かれています。WFPはWindowsのバージョンによって多少の違いがあるため、もしかしたら他の環境では勝手が違うかもしれません。あらかじめご了承ください。 ./wfp.zip なお、今回作成したサンプルプログラム(./wfp.zip)をまとめてアップしました。ソースコードはこのテキスト内にも書かれてあります
printf関数やscanf関数でおなじみの変換仕様ですが、実はとても奥が深いものです。特にsscanf関数では、変換仕様を使いこなすことにより様々な形での文字列の編集が行えます。ここでは、具体的な使い方を挙げながら変換仕様について説明してみようと思います。 1.出力変換仕様 printf、fprintf、sprintf などの書式出力関数で使われる変換仕様です。以下のような形式をしています。
Windows-API による文字列比較オブジェクト やっかいな文字列処理 コンピュータが扱う文字がASCIIだけであった旧き良き時代には、プログラマはとても幸せでした。ふたつの文字列の大小を比較するには標準関数 strcmp を呼び出すだけでよかったのですから。 ところがコンピュータが日本語と言うものを扱わねばならなくなってからというもの、strcmpだけでは済まなくなってしまったのです。 まず、ASCIIだけでなく、JIS,Shift-JIS,EUCなどの様々な文字セットに対して正しく処理しなければなりません。 幸いにもこれら文字セットについては内部的にはUnicode(wchar_t)に変換しておくことで文字セットによる扱いの違いを吸収することができます。 日本語処理の大きな問題のひとつは文字列の比較です。 すなわち、文字列の比較の条件として、 全角/半角を区別する/しない ひらがな
SQLite Vesion 3 DLL版 を呼び出すC/C++アプリケーションの構築 SQLite Version 3 の DLL の導入と、C/C++アプリケーションからそれを使う方法を解説します。 使用する開発ツールは Visual C++ 6.0 です。 開発ターゲットは簡単なコンソールアプリケーションとします。 ビルドはコマンドライン環境で行います。統合環境上のプロジェクトで行う場合にはビルド手順を適当に読み替えてください。 Back to index Download sample-codes-using-sqliet3-dll.zip Step1. 必要なファイルをダウンロードする SQLite本家サイトのダウンロードページから、次の2つのzipファイルを入手します。 ファイル名末尾の数字はリリースバージョンであり、その数字は頻繁に変わります。 3_3 以降の適切なものを選んで
C/C++ Interface For SQLite Version 3 [日本語超訳版] 最終改訂: 2006年02月16日 10時59分54秒 原文: http://www.sqlite.org/capi3.html -- last modified on 2005/03/11 04:39:58 Back to index 1.0 Overview SQLiteバージョン3.0は、SQLiteの新バージョンであり、派生元のSQLite 2.8.13コード・ベースとは、非互換性のファイル・フォーマットおよびAPIを備えています。SQLiteバージョン3.0は次の機能要求に答えるために作成されました: UTF-16の対応 照合順序をユーザ定義可能なテキスト インデックス付カラムにBLOBを格納する能力 これらの機能を実装するためには、データベース・ファイル・フォーマットに非互換な変更が必要
有限桁 C言語で扱える実数値は,2進数の有限小数で表された数値である.例えば次のようなものである. 1.5(10) = 1.1(2) 3.25(10) = 11.01(2) 理論的には小数が無限に続く値でも,そのうちの有限個の桁数でその値を表すしかない. 例えば,0.1 を2進数の小数で表すと 0.1(10) = 0.000110011001100110011...(2) と無限に続くが,コンピュータの内部では有限桁で丸められている. このような場合には,本当の値ではなく,近似値でしか表すことができない. 指数表記(浮動小数点表記) 科学計算では非常に大きな実数値や非常に小さな実数値も扱うことがある. そのようなときには,通常の10進数の表記ではなくて,次のような指数表記で表すれば 無駄な 000...000 という桁を表記しなくてもよくなる. 1234567890000000000000
C言語には、ビットシフト演算子というものがあります。左シフト演算子(<<)と右シフト演算子(>>)です。同じビット演算でも、ビット単位の論理和(|)や論理積(&)、NOT(~)等はの方は、フラグ型の変数の処理で使われる事が多い気がしますが、ビットシフトの方は使用されるケースはあまりないかもしれません。 さて、このビットシフト演算子で時々問題になるのが、符号ビットが立っている時の右シフト演算です。見逃されがちなポイントは、 型によって挙動(算術シフトか論理シフトか)がかわることがある C言語の規格として、算術シフトか論理シフトかは不定 Nbitの算術シフトと2のN乗での除算は等価ではない といったところにあります。 算術シフト(shift arithmetic)と論理シフト(shift logical:又は0充填シフト)という言葉をご存知ない方のためにちょっと説明を書いておくと、シフトによっ
今回は様々なシステム情報の取得方法を説明します。 GetVersionEx GetVersionEx()でOSのバージョンが取得できます。 OSVERSIONINFO osvi; memset(&osvi,0, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx( &osvi ); OSVERSIONINFOは次のように定義された構造体です。 typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[128]
こんなプログラムはいやだ: 負の剰余 知人から次の式の計算結果はどうなるかという問題を出されました。 -3 % 5 3 % -5 -3 % -5 降参して答えを尋ねたところ、問題を出した方も答えを知らないことがわかりました。そこで、いくつかの言語処理系で結果を調べてみました。手元の環境 (Intel Xeon 上の Debian GNU/Linux sarge) で調べると2つのグループに分かれました。 C (GCC 3.3.5) Java (Sun JDK 1.5.0_05) PHP 4.3.10-16 Emacs 22.0.50.2 Ruby 1.8.2 Python 2.3.5 Perl 5.8.4
Perl-XS なモジュールを 64bit OS で使っていると、ごく希に変数型サイズが問題で不具合を経験することがあります。例えば、メジャーどころで言えば、日本語係り受け解析器のCaboCha/南瓜を例に挙げますと、 src/common.h の103〜107行目 static inline void replaceString (std::string &s, const std::string &src, const std::string &dst) { unsigned int pos = s.find (src); if (pos != std::string::npos) s.replace (pos, src.size(), dst); } の unsigned int pos = s.find (src); の部分ですが、32bit 環境では問題は発生しませんが、64bi
戻る ○困った! printf() で直接出力できない Windows のプログラミングを初めて行ったころに、困ったのは printf() で、 直接出力することができないということでした。 また、動作のよく分からないAPIを使うとき、サンプルプログラムを手に入れて ソースを見ても、見慣れないイベント駆動の動作を解析するのに大変苦労 しました。 このようなとき、手軽に動作をトレースでき、不要になってもコメントアウトする 必要のないデバッグログがあると便利です。 ここでは、そのようなデバッグルーチンについて考えてましょう。 7-1 動作のトレースとデバッグログ出力機能について ○動作のトレース デバッグや動作のトレースは、作成したアプリケーションがトラブルを起こしたとき だけとは限りません。モジュールを単体テストを行うときにも利用できます。 Windows アプリケーションは、メッセージによ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く