「初音ミク冒険記」、extern "C"とmain
CRTセキュリティ対応で「引数や戻り値も変わる」ものは
ちょっと面倒くさいと思った(ヤル気が失せた)ので、
とりあえず、そいつは泳がせておくことにして
エラーの数を減らしにかかってみた。
エラーの大半は、ボタン関連のPSPの定数なので
暫定対処としてWinwos版に同じ名前の定数を定義してみた。
たぶん、Windows版を動かしながらボタン関連を直した方が
良いんじゃないかな?と思ったので。
ボタン以外ではセーブデータ関連が問題あり。
とりあえず、Windows版では、関数の中身はコメントアウトした。
PSPの公式セーブ機能を使っていたので
この部分は、自前で作ることになるから面倒なのだ。
すると、残ったのは「PSP側の独自実装」になった。
なのでプラットフォームの違いを
吸収する関数を作ったりしてコンパイルを通す。
まぁ、全体的に問題を先送りした感はあるけど
その分、問題点も明確になったし良いかなと。
それにボタン関連とセーブデータ関連は、
もともと問題になることが予想できたところだったし。
というわけでコンパイルエラーは、
暫定的にではあるが解消された。
が、今度はリンクが通らない。
おかしいなぁ、Lua関連のライブラリもちゃんと定義しているのに・・・
Luaの勉強をした時のVC++のソリューションを確認。
やっぱりリンク関連の設定とか、インクルードの設定とかは問題ない。
むむ、何が違うんだろう?
ヘッダファイルも同じ物をインクルードしてるはずだし・・・
一応、確認してみるか。
うん、やっぱりインクルードしているのは問題ないね。
ん?
このextern "C"って何だろう?
ググってみてわかったこと。
VC++は、C++の考えで動くので何もせずにインクルードすると
C++の文法として扱われて、C++としてリンクしようとする。
(まぁ、当然だ)
でも、LuaはC++で書かれているわけじゃない。
C言語で書かれている。
なのでコンパイラにC言語で書かれているよ
と指令を出してやらないとダメみたい。
なのでPSP版では
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
と書いていたところはWindows版だと
extern "C"{
// luaはC言語で書かれている。(つまりC++では書かれていない)
// VC++は特に指令を出さないと普通にC++扱いとして取り込んでしまう。
// そうするとリンクで「○○○は未解決です」というエラーが出てしまう。
// このため、こいつらはC言語で書かれているよと指令を出す必要がある。
// そのおまじないが「extern "C"」で{}でくくるとその範囲が有効となる。
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
としないとダメみたい。
コメントは、かげさんが忘れないように書いただけなので
無くて良いけど。
これでビルド(コンパイル+リンク)すると
Luaの未解決シンボル問題は解決した。
残りはコレだ。
LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
CRTとついているのでコンソールアプリケーションだと言っている気がする。
あれ? プロジェクト作成の時、Windowsアプリケーションにしたから
コンソールアプリケーションではないはずなんだけど・・・
再びググってみた。
あ、そうか、Windowsアプリケーションなんだから
一番最初に実行される関数がmainじゃなくてWinMainじゃないか。
メッセージにもWinMainってあるじゃないか!
(仕事でVC++使ってた頃なら簡単に気づいたはずなのに・・・)
つーことは、こんな風にすると良いわけね
修正前
int main()
修正後
int
#ifdef PLATFORM_WINDOWS
WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
#else
main()
#endif
よし、イイ感じ。
さっき泳がしていた警告は残っているもののビルドが通った。
早速、実行してみよう!
ポチッとな。
・
・
・
あれ? 全画面表示になった後
真っ黒になったまま反応が無い?
しかも、終われないし・・・
黒い画面のまま
作業用にかけていたBGMだけが流れているのだった・・・
まだ、先は長いなぁ。![]()
明日あたり、タイトル画面を拝めると良いな。
| 【固定リンク】 | 【コメント (2)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: 「初音ミク冒険記」、extern "C"とmain:


コメント
このブログの新着コメントをRSSリーダに登録する為のxmlPSPが壊されたのでしばらくコメントできないです
今は1時間さけできるパソコンでうってます
投稿者: 安藤お前 (2012/03/04 21:40:00)
To:安藤お前さん
> PSPが壊されたのでしばらくコメントできないです
うわっ! それは大変だぁ[→V←]
> 今は1時間さけできるパソコンでうってます
貴重なパソコンタイムを使って
わざわざコメントをくれるとは!
ありがとうございます。[→◇←]
ショックが大きいと思いますが
気を落とさないでくださいね。[汗]
投稿者: かげさん (2012/03/04 22:25:36)