« MicMac…やっとLV41(T_T) | トップページ | cwフィルム作品集 »

2006年8月28日 (月)

MFCモドキは、ヤメテ!

「3DRPGプログラミング/坂本千尋著」
を買った。

20060825001

サンプル等を指定アドレスからダウンして
早速コンパイルしようとすると
「Sample.dsp/Sample.dsw」が無い…。
代わりに「Sample.sln/Sample.vcproj」がある。

で本を良く読むと
『「Visual C++ .NET 2003」に対応しています。』
と書いてある…。


すみません、「Visual C++ 6」では、ダメですか?

いや!
同じC++だし、チョコチョコと変えればOKさ!
とやってみた…。

ダミーのMFCプロジェクトを作って…。
中身を入れ替えて…。
インクル-ドやライブラリのフォルダーを指定して…。


挫折!

最初のトラブルがこれ…。
>...\mainwin.cpp(6) : fatal error C1083: プリコンパイル済ヘッダー ファイルがオープンできません。'Debug/Sample.pch': No such file or directory

「プロジェクトの設定」の「C/C++」タグを選択し
「プリコンパイル済みヘッダー」を

「プリコンパイル済みヘッダーを使用しない」にするで消えた。

次は、これ…。
>...\d3dx9math.h(390) : error C2722: '::new' : スコープ解決演算子を削除して 'operator new' を使ってください。
これは、
「..\WinLib.h(11) : #include <crtdbg.h>」
悪さをしている!
crtdbg.h」の内部で「new」に細工をしている。
「...\D3DWin.h(11) : #include <d3dx9.h>」の中でも
「new」に細工をしているのでバッティングして
エラーが発生してしまう。

「..\WinLib.h」の10行目に「#include <d3dx9.h>」を
挿入するとで出なくなる。

…ここは、見付けるまでに結構掛かったりしたりして。(T_T)

「やった~!」と思ったら…
リンクで『ガガガガガ!』とエラーが出る。
>Sample.exe - エラー 72、警告 2
( ゜д゜)ポカーン

原因が不明なので「WinLib,lib」をリンクしないで
「WinLib\Include/WinLib\Src」の中身をコピーして
ソースを結合していく。<
無論色々修正しながら…。

~試行錯誤…省略~

>Sample.exe - エラー 54、警告 0
エラーは、減ったが…
表示されるエラーの関数名が馴染み有りすぎ!?
>MainWin.obj : error LNK2001: 外部シンボル "__imp__MessageBoxA@16" は未解決です

はあ?
何故にWin32ライブラリを要求する!?
MFCだろ、これ!


ともかく標準ライブラリをリンクしてエラーを潰していく…。

>MSVCRTD.lib(crtexew.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
>Debug/Sample.exe : fatal error LNK1120: 外部参照 1 が未解決です。
>link.exe の実行エラー
>
>Sample.exe - エラー 2、警告 0


…俺にMFCを作れと?(汗)

でよくよく調べると以下の場所に「WinMain」が有った…!?
「...\Main.cpp(13):int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR CmdLine, int CmdShow)」

追加すると…
遂に!エラーが無くなった!

実行!

おお…動いた…。(T_T)

※ここまでに2日もかかったヘタレです…。

結論!


実は、MFCモドキのWin32です。(怒)

VC++6で作成する場合、
Win32の空プロジェクトを作り、
ファイルを組み込む。
「..\WinLib.h」の10行目に「#include <d3dx9.h>」を
追加する。

DXSDKのバージョンによっては、
「D3DXF_FILEFORMAT_TEXT」を「DXFILEFORMAT_TEXT」に
変更する必要があるかもしれません。

だけで、基本的にOK!

ちなみに「18 マルチスレッド」では、「シングルスレッド」の
設定だと「_beginthreadex/_endthreadex」の類が
使用できない。
「プロジェクトの設定」の「C/C++」タグを選択し
「コード生成」の「使用するランタイムライブラリ」を
「マルチスレッド(DLL)」に変更する。
これで「_beginthreadex/_endthreadex」が
使用できるのだが…
リンクすると『ガー!』とエラーが出る。
>Sample.exe - エラー 36、警告 2

「LIBCMTD.lib」と「MSVCRTD.lib」がバッティングしている!
マルチスレッドは、「LIBCMTD.lib」の方なので
「LIBCMTD.lib」をリンクしないようにする。
「プロジェクトの設定」の「リンク」タグを選択し
「インプット」の「無視するライブラリ」に
「LIBCMTD.lib」を登録する(書き込む)。
リンクすると『ガー!』とエラーが出る。
>Sample.exe - エラー 26、警告 0

全て「WinLibMtD.lib」のリンクエラーだ…。
「WinLibMtD.lib(Misc.obj) : error LNK2001: 外部シンボル "@_RTC_CheckStackVars@8" は未解決です」
調べると「CheckStackVars」は…
「WinLibD.lib/WinLibMtD.lib」の中以外に何処にもない…。
と言う事は、このライブラリを作成する環境に
依存した部分なのだろう。<と決め付ける!
という事で、「WinLibD.lib/WinLibMtD.lib」を
コンパイルしなおす事となる…。(T_T)

幸か不幸か「WinLib.dsw/WinLib.dsp」が有るので
コンパイルすればOK!
と思いきや、マルチスレッドのコンパイル構成が無い!
仕方が無いので作る。
まあ、単にコピーして設定し直せばOKのはず。
で、コンパイルした「WinLibMtD.lib」でリンクすると…
エラーが無くなった!

実行…。

おお、動いたぁ~!(T_T)

MFCモドキにどれだけ振り回されたことか…。

サンプルは、素直に作ってください!(怒)

この行き場の無い怒りを何処にぶつけてくれようか!
…と言う訳でネタにさせてもらいました。

|

« MicMac…やっとLV41(T_T) | トップページ | cwフィルム作品集 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/108365/11647386

この記事へのトラックバック一覧です: MFCモドキは、ヤメテ!:

« MicMac…やっとLV41(T_T) | トップページ | cwフィルム作品集 »