一見便利そうな関数ですけど、どんなふうに使うつもりなのかちょっと気になります。
サーバ・クライアント間のコネクション開始とか、ゲームとはあまり関係ないところに使うのであれば
それほど大きな問題は無いと思いますけど、ゲーム中にも使うとなるとちょっと疑問です。
というのも、NetWorkSend 関数は多分 TCP 使っていると思いますけど (DXライブラリには詳しくないので、的外れだったらごめんなさい)
int や float ひとつ毎に TCP 通信するのはちょっとやりすぎな気がします。
winsock で TCP 通信を行った場合、環境にもよりますけど1/60 秒に数回 send するだけで処理落ちしてしまいます。
(リアルタイムなゲームを作る場合だとちょっと致命的。スレッド使ったりすればある程度軽減できますが)
送信するデータはできるだけ構造体または配列にまとめて、送信回数をできるだけ少なくするように設計した方がいいですよ。
あと、たかぎさんの示してくれた例のように、データは文字列化して送受信した方が良いです。(シリアライズに多少時間がかかっても)
YuO さんの指摘のような環境毎の差を考慮する必要が殆ど無くなりますし、何よりデータが文字列なのでデバッグしやすくなります。
ちょっとおせっかいかもしれませんが、以下に以前に私が携わったネットワークゲームで使ったシステムのイメージを張っておきます。
さらっと書いただけなので多分バグあるかも。
あと、Name にスペース文字があると不具合が出ます(^^;
コード:
enum DataType
{
PLAYER_DATA = 1,
};
struct PlayerData
{
char Name[10];
int HP;
float X;
float Y;
/// 文字列化 (buf_ は十分に大きいこと)
void serialize( unsigned char* buf_ )
{
// buf_[0] はデータの種類を示すマジックナンバー
// buf_[1] は文字列部分のサイズ (最大 255)
// buf_[2] 以降に文字列データ
buf_[0] = PLAYER_DATA;
sprintf( &buf_[2], "%s %d %f %f", Name, HP, X, Y );
buf_[1] = strlen( &buf_[2] );
}
/// 復元 (buf_ には serialize() で文字列化されたものが入っている)
void deserialize( unsigned char* buf_ )
{
if ( buf_[0] == PLAYER_DATA )
{
sscanf( &buf_[1], "%s %d %f %f", &Name, &HP, &X, &Y );
}
else
{
// エラー
}
}
};