アプリケーションを32ビットから64ビットに移植しています。このアプリケーションには、gSoapで生成されたANSICソースコードが含まれています。生成されたいくつかのsoap関数のプロトタイプにはint
、引数リストに次のようなデータ型が含まれています。
int PASCAL FAR setsockopt (
__in SOCKET s,
__in int level,
__in int optname,
__in_bcount_opt(optlen) const char FAR * optval,
__in int optlen);
ただし、stdsoap2.cで呼び出されると、この例の5番目の引数にsizeof
マクロが渡されます。
if (setsockopt(fd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
{ ...
}
sizeof
マクロは、size_t
単なる。であるタイプの値を返しますunsigned int
。32ビット環境でコンパイルする場合は問題ありませんが、64ビット環境でコンパイルする場合は 「からへの変換で データが失われる可能性があります」という警告が表示されます。unsigned __int64
int
データ損失の問題を理解しています。私の質問は、内部として渡される各マクロの(int)
型キャスト以外の問題に対処するために、コード内のどこにどのように配置する必要があるかです(単独で32の警告があります)。可能であれば、自動生成されたソースファイルの編集は避けたいと思います。sizeof
int
stdsoap2.c
stdsoap.c
gsoap
メソッドに精通している人のために、私は以下を含めました:
#ifdef WITH_SOAPDEFS_H
# include "soapdefs.h" /* include user-defined stuff */
#endif
soapdefs.h
私のプロジェクトで使用しています。このファイルはプロジェクト全体の範囲を持っています。おそらくこのファイルは問題に対処するための良い場所になるでしょう、そして問題はどうやって?