アプリ版:「スタンプのみでお礼する」機能のリリースについて

いまさら、のしつこいような質問で゛申し訳ありません。

今だによくわかっていないので、教えてください。

今、64bitのwindowsのwowで動いている32bitアプリを純粋に!?
64bit上で動かすにはどうしたらよいか、、、
コンパイラーを64bit版にする程度しか、わかりません。

ソースコード的にどれ(データ型?、関数?)をどのように直せばいいのか、
探すのは得意なほうだと思っているのですが、なかなか見つかりません。

下記の情報はあってるでしょうか?

int
CString
time_t
などが変更必要?という情報は見つけましたが、(あってますか?)



int → long? 、 printf()では %d → %ld? 
CString → リコンパイルだけでよい?
time_t → 使ってますがソースコード的にどう変更したらよい?


他にもいろいろあると思うのですが
対象のアプリがかなり旧いので(VisualStudio6.0 c++)、よけい探せないのかも知れません。

VisualStudioも64bit対応用に新しく買ってもらわないといけないと思うのですが
はたして使いこなせるか。(これは別問題ですね)


修正規模を出せと言われてるのですが、
どう返事をしたら良いものか、

どうかアドバイスをお願いいたします。

A 回答 (5件)

>もしかして何もしなくていいのかな、、、というところです。


>ホントですかね???

Windows の場合は、アプリでは何もしなくてよいことも多いですよ。

ただし、Windows では整数型のサイズが変わらないので、
動きますけど、32ビットの制限がそのまま残ったりします。
    • good
    • 1
この回答へのお礼

tknakamuriさん、ありがとうございます。

今も聞かれたところなんですが、
  IISでwowを有効にすれば、何もしなくても大丈夫です。
と答えておきました。

が、のちのち!?、ゆくゆく!?のことも考えて、
64bit化を調べないといけないようです。

他の人の調査結果を見てみて、自分に関係するところは

32bit固定で判断しているところを64bitにする。
0xffffffff→0xffffffffffffffff
などがありました。

具体的で申し訳ありませんが教えてください。

関数のreturn値を 0 か -1 などで処理を行っていますが
これは64bitでも問題ないですよね?

あとは開発環境の問題(VisualStudioが古い)は別質問したい遠と思います。

お礼日時:2014/10/08 09:37

>ポインタでint/longを使っているところ


>(つまり int  *pt  など?)

いえ、整数型でポインタ型を格納したり
ポインタ演算したりしていた場合、
修正が必要になるということ。

特に、各種ハンドル型がポインタ型で64bit
になることをしらない人が多いようです。
    • good
    • 1
この回答へのお礼

tknakamuriさん、ありがとうございます。

まだよく理解できていないのですが、
ポインタ型の格納はしていないし、
演算もしていないので
もしかして何もしなくていいのかな、、、というところです。

ホントですかね???
(って聞いてもわかりませんよね。^^;)

お礼日時:2014/10/06 17:38

>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のサイズと同じと仮定しコーディングしてないかとかになると思います。
    • good
    • 0
この回答へのお礼

wormholeさん、ありがとうございます。

int ---> long はあるとき、
  意識してintは使わずにlongにしてるよ
という話を聞いたことがあるから...でした。

例えば10回loopなどは、桁が越えることは無いから
変更しなくて良い...と言うことですよね?

time_tは演算しています。
ある期間の範囲を演算して、規定の数を超えてるか、などチェックしています。
ここは修正ですね。

なかなかデータ型などの使い方の基本がわかっていないので
まだ わからないことばかりです。

お礼日時:2014/10/06 12:02

Windows の 64bit化は Windows のモデルが LLP64 なので


意外と修正は少ないです。

修正規模は ミドルや通信系なら1~2%、アプリなら 0.2~0.5% かな。

注意はやっぱりポインタサイズと整数型のサイズが一致しなくなること。
Windows の各種ハンドルはポインタなので int/long で受けたりしてたら修正が必要。
time_tを long で格納なんてのもよくある話ですね。

後、MFC や ActiveX とか使っているアプリは 32bit DLL に依存しているものがあるので
そのDLLの64bit板を入手できないとアウト というのがよくあります。
    • good
    • 0
この回答へのお礼

tknakamuriさん、ありがとうございます。
修正規模はそれほど多くないとのこと、助かりました。

ポインタでint/longを使っているところ
(つまり int  *pt  など?)
を調べて、、、演算していたらint64とかに変更すればよいのですね?
その場合、桁を越えそうに無いところは変更しなくてもいいのですよね?

お礼日時:2014/10/06 11:54

ポインタやintが32ビットだと想定して書かれている部分さえ無ければ、API関数の呼び出しを64ビット版の呼び出しに書き換えてリコンパイルするだけで済む筈です。



まったくの蛇足ですが、似てるコールサインの知り合いが居て、知り合いかと思ってちょっとビックリしました(良く見たら最後の1文字が違ってた。当方、8エリアのフロリダコールでした。局免を流してしまって10年経ちますが)
    • good
    • 0
この回答へのお礼

chie65535さん、ありがとうございます。
特に32ビットを想定して作っていないのでよくわからないのです。

API関数の呼び出しを書き換えるってことは
書き換えれば、vc6.0でもコンパイルできるということでしょうか?

お礼日時:2014/10/06 11:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A