session_start()の際に発生するエラー2009年04月03日 11時35分59秒

PHP
session_start()の際に下記のような「Cannot send session cache limiter」というエラーが発生する場合がある。
上記のエラーはコーディングに起因しない場合があり、幾つかの発生パターンが存在する。
その内の幾つかに対する対処法を紹介します。

【エラーメッセージ】
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /index.php:1) in /index.php on line 2


【その1】
ファイルの先頭にスペースや改行と言ったゴミが入っているとエラーになります。
session_start()を使用する場合、ファイルの先頭は「」としましょう。
【その2】
サーバ上に配置した PHPファイルの文字エンコードを「UTF-8」にする場合、必ず「BOM(Byte Order Mark)無し」のUTF-8を選択しましょう。
BOM有りを選択した場合、エディタに表示されないヘッダー情報がファイルの先頭に追記されてしまいます。
悲しい事にこのヘッダー情報が【その1】で紹介したのと同じゴミ扱いされてしまいます。

warning【LNK4089】2006年12月26日 11時30分48秒

Visual C++
LINK : warning LNK4089: "SHELL32.dll" へのすべての参照は /OPT:REF によって廃棄されます

この警告は「リンク作業中に参照されていないDDLが見つかったので排除します」という意味なので見て見ぬ振りをしても大丈夫です。

Debugモードでビルドすると出ないので、Releaseモードにすると発生するので気になりますよね。
これはデバッグ時にはコンパイラの最適化設定がOFFになっているのが原因です。

error【LNK2001】2006年12月26日 11時06分10秒

Visual C++
nafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です
nafxcw.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です

MFCのヘッダーをインクルードしているのにプロジェクトの設定が【MFCを使用しない】になっていると発生します。

VC++のプロジェクトを「Win32 Application」で作成した場合はデフォルトの設定が【MFCを使用しない】になっているので、Win32アプリケーションからMFCを呼び出す場合は注意しましょう.

分割ウィンドウの作り方2006年10月26日 16時08分37秒

Visual C++
1.メインフレームのメンバ変数にCSplitterWndのインスタンスを追加する。
2.メインフレームにCFrameWnd::OnCreateClient()のオーバーライドを作成する。
3.ペインに割り当てるビューを定義する。
4.CFrameWnd::OnCreateClient()の中でペインの定義を行う。
  CSplitterWnd::Create()またはCSplitterWnd::CreateStatic()
5.ペインにビューを結び付ける。
  CSplitterWnd::CreateView()

● CSplitterWnd
ウィンドウを分割する機能を持つクラス。
分割したいウィンドウと結び付けて使用する。
分割された個々のクライアント領域をペインと呼ぶ。
ペインはメインフレームのCFrameWnd::OnCreateClient()内で初期化する。
動的分割ウィンドウの場合はCSplitterWnd::Create()を使用する。
静的分割ウィンドウの場合はCSplitterWnd::CreateStatic()を使用する。
ペインへのビュー割り当てはCSplitterWnd::CreateViewを使用する。

● 動的分割ウィンドウ
分割ウィンドウには初期状態では一つのビューしかない。
分割ボックスをユーザーの操作することで新しいペインが生成される。
● 静的分割ウィンドウ
分割ウィンドウが生成される同時にペインも生成される。
ペインの配置順序や数は固定されている。

● CSplitterWnd::Create( ~ )
動的分割ウィンドウとしてCSplitterWndインスタンスを初期化する。
<戻り値>
正常終了
0 以外
その他
0
<パラメータ>
pParentWnd
分割するウィンドウ
nMaxRows
分割ウィンドウの最大行数
2 以下にする必要がある。
nMaxCols
分割ウィンドウの最大列数2 以下にする必要がある。
sizeMin
ペインが表示されるときの最小値のサイズ
pContext
CCreateContext構造体へのポインタ
CFrameWnd::OnCreateClient()の引数pContextを渡せばよい。
dwStyle
ウィンドウスタイル
Default = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT
nID
ウィンドウの子ウィンドウID
他の分割ウィンドウの中で入れ子になっていない場合はAFX_IDW_PANE_FIRST
分割ウィンドウに対して一意であればOK?

● CSplitterWnd::CreateStatic()
静的分割ウィンドウとして CSplitterWnd インスタンスを初期化する。
<戻り値>
正常終了
0 以外
その他
0
<パラメータ>
pParentWnd
分割するウィンドウ
nRows
分割ウィンドウの行数
16 以下にする必要がある。
nMaxCols
分割ウィンドウの列数
16 以下にする必要がある。
dwStyle
ウィンドウスタイル
Default = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT
nID
ウィンドウの子ウィンドウID
他の分割ウィンドウの中で入れ子になっていない場合はAFX_IDW_PANE_FIRST

● CSplitterWnd::CreateView()
ペインにビューを結び付ける。
<戻り値>
正常終了
0 以外
その他
0
<パラメータ>
row
新しいビューを配置する分割ウィンドウの行番号
一番左が 1で、右に行く毎に +1
col
新しいビューを配置する分割ウィンドウの列番号
一番上が 1で、下に行く毎に +1
pViewClass
新しいビューのCRuntimeClassポインタ
マクロ関数で生成する場合は RUNTIME_CLASS( ビュークラス名 )
sizeInit
新しいビューの初期サイズ
pContext
CCreateContext構造体へのポインタ
CFrameWnd::OnCreateClient()の引数pContextを渡せばよい。