- ベストアンサー
アプリを32bitから64bit移行
- 32bitから64bitへのアプリの移行方法について教えてください。
- 現在、64bitのWindowsのwowで動いている32bitアプリを純粋に64bit上で動かすためにはどうしたら良いでしょうか。ソースコードの変更が必要なのでしょうか。
- 修正規模を出すように言われていますが、どのように返答すれば良いでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>もしかして何もしなくていいのかな、、、というところです。 >ホントですかね??? Windows の場合は、アプリでは何もしなくてよいことも多いですよ。 ただし、Windows では整数型のサイズが変わらないので、 動きますけど、32ビットの制限がそのまま残ったりします。
その他の回答 (4)
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
>ポインタでint/longを使っているところ >(つまり int *pt など?) いえ、整数型でポインタ型を格納したり ポインタ演算したりしていた場合、 修正が必要になるということ。 特に、各種ハンドル型がポインタ型で64bit になることをしらない人が多いようです。
お礼
tknakamuriさん、ありがとうございます。 まだよく理解できていないのですが、 ポインタ型の格納はしていないし、 演算もしていないので もしかして何もしなくていいのかな、、、というところです。 ホントですかね??? (って聞いてもわかりませんよね。^^;)
- wormhole
- ベストアンサー率28% (1626/5665)
>int → long? 、 printf()では %d → %ld? どういう意味でしょうか? 64ビット化に合わせて扱えるデータも64ビット化するのならintからint64_tなどにする必要はありますけど、そうでないならintはintのままで構いません。 例えば10回ループするのに for (int i = 0; i < 10; i++) { ... } としてたのを64ビット化するからといって for (int64_t i = 0; i< 10; i++) { ... } なんてする必要ないですよね。 >time_t → 使ってますがソースコード的にどう変更したらよい? time_tで単純に扱ってるだけならほとんど問題ないかと。 演算などしてたら問題あるかもしれませんが。 他に注意する点としてはポインタのサイズをintのサイズと同じと仮定しコーディングしてないかとかになると思います。
お礼
wormholeさん、ありがとうございます。 int ---> long はあるとき、 意識してintは使わずにlongにしてるよ という話を聞いたことがあるから...でした。 例えば10回loopなどは、桁が越えることは無いから 変更しなくて良い...と言うことですよね? time_tは演算しています。 ある期間の範囲を演算して、規定の数を超えてるか、などチェックしています。 ここは修正ですね。 なかなかデータ型などの使い方の基本がわかっていないので まだ わからないことばかりです。
- 中村 拓男(@tknakamuri)
- ベストアンサー率35% (674/1896)
Windows の 64bit化は Windows のモデルが LLP64 なので 意外と修正は少ないです。 修正規模は ミドルや通信系なら1~2%、アプリなら 0.2~0.5% かな。 注意はやっぱりポインタサイズと整数型のサイズが一致しなくなること。 Windows の各種ハンドルはポインタなので int/long で受けたりしてたら修正が必要。 time_tを long で格納なんてのもよくある話ですね。 後、MFC や ActiveX とか使っているアプリは 32bit DLL に依存しているものがあるので そのDLLの64bit板を入手できないとアウト というのがよくあります。
お礼
tknakamuriさん、ありがとうございます。 修正規模はそれほど多くないとのこと、助かりました。 ポインタでint/longを使っているところ (つまり int *pt など?) を調べて、、、演算していたらint64とかに変更すればよいのですね? その場合、桁を越えそうに無いところは変更しなくてもいいのですよね?
- chie65536(@chie65535)
- ベストアンサー率44% (8803/19962)
ポインタやintが32ビットだと想定して書かれている部分さえ無ければ、API関数の呼び出しを64ビット版の呼び出しに書き換えてリコンパイルするだけで済む筈です。 まったくの蛇足ですが、似てるコールサインの知り合いが居て、知り合いかと思ってちょっとビックリしました(良く見たら最後の1文字が違ってた。当方、8エリアのフロリダコールでした。局免を流してしまって10年経ちますが)
お礼
chie65535さん、ありがとうございます。 特に32ビットを想定して作っていないのでよくわからないのです。 API関数の呼び出しを書き換えるってことは 書き換えれば、vc6.0でもコンパイルできるということでしょうか?
お礼
tknakamuriさん、ありがとうございます。 今も聞かれたところなんですが、 IISでwowを有効にすれば、何もしなくても大丈夫です。 と答えておきました。 が、のちのち!?、ゆくゆく!?のことも考えて、 64bit化を調べないといけないようです。 他の人の調査結果を見てみて、自分に関係するところは 32bit固定で判断しているところを64bitにする。 0xffffffff→0xffffffffffffffff などがありました。 具体的で申し訳ありませんが教えてください。 関数のreturn値を 0 か -1 などで処理を行っていますが これは64bitでも問題ないですよね? あとは開発環境の問題(VisualStudioが古い)は別質問したい遠と思います。