« 「初音ミク冒険記」、CRTセキュリティ強化対応 | トップページ | Windowsゲーム「初音ミク冒険記」、とりあえず起動できた! »

2012.03.03

「初音ミク冒険記」、extern "C"とmain

| |コメント (2)|トラックバック (0)

 このエントリーをはてなブックマークに追加

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)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: 「初音ミク冒険記」、extern "C"とmain:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml

PSPが壊されたのでしばらくコメントできないです
今は1時間さけできるパソコンでうってます

投稿者: 安藤お前 (2012/03/04 21:40:00)

To:安藤お前さん
> PSPが壊されたのでしばらくコメントできないです

うわっ! それは大変だぁ[→V←]

> 今は1時間さけできるパソコンでうってます

貴重なパソコンタイムを使って
わざわざコメントをくれるとは!
ありがとうございます。[→◇←]

ショックが大きいと思いますが
気を落とさないでくださいね。[汗]

投稿者: かげさん (2012/03/04 22:25:36)




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。