- ベストアンサー
DirectX9SDK(2005)について・・・
DirectX9初期のSDKから、2005のバージョンに切り替えたのですが、2005のSDKってDirectPlayサポートしてないんですか? 今まで使っていた関数などを使用したいのですが、どのようにしたら移植できるのでしょうか・・・ よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>DirectPlayを使うと高速になるのかな? >WinSockのSendには文字列しか遅れないのでしょうか? そんなわけありません。 Sendのデータを置く場所はどんなデータ型にも対応するように void*(あるいはchar*)になっているでしょう。 一般的に通信のプログラムはパケット単位でデータのやりとりをします。 でC言語ではこのパケットを構造体にします。 struct Packet1{ int a; char name[10]; }; また文字列と違い終端文字は無いため どこまでが一つのパケットなのか分からないため ヘッダに必ず、サイズとパケットの種類をつけます。 struct Packet{ int size; //パケットのサイズ int pettern; //パケットの種類 void* data; //実データ部 }; このvoid* dataの部分にPacket1なりが入ります。 Packet p; このpをSendで送ります。 あと気をつけなければいけない事は このやり方はテクニックというか ほとんどの通信ソフトに使われるものです。 こっちが1000バイト送ったからたいって向こうは必ず1000バイト 受け取るとは限りません。500*2だったり250*4だったりするのです。 ですがこのやり方を使えば、データサイズがヘッダについているので データが途中かどうかも受信部側で把握できます。 とりあえずWinSockの本を買うといいでしょう。 ここで説明しきれるものではありません。
その他の回答 (2)
- sha-girl
- ベストアンサー率52% (430/816)
>エラーの山で結局どうしたらいいのかさっぱりなんです エラーに内容を一つ一つみていく方法が唯一の方法です。 DirectPlayのサンプルが少ないのは あまり使われないのと需要が少ないからです。 (DirectPlayを使うメリットが少ない。) 素直にWinSockを使った方が良いのではないですか? あとDirectPlayのドキュメントは基本的に英語です。 もし使うなら、そのこととサンプルも少ないことを 覚悟する必要があります。 >SDKと言うのは間違っていたかもしれません。 >正しくはそのサンプルプログラムのCommon見たいなやつのことです^^; 別にDirectPlayのサンプルに限らず、バージョンが 上がると、コンパイルが通らなくなります。 あくまで最新バージョンを使用する為のサンプルなので・・・ ただDirectPlayの部分ではエラーがでてないはずです。 (基本的にバージョンアップで変更されるのはほとんどが DirectGraphics:即ち描画部分です。) その描画部分を把握すれば、回避できます。ただ何度もいいますが エラーに内容を一つ一つみていく方法が唯一の方法です。
お礼
回答ありがとうございましたm(_ _)m そうなんですか、DirectPlayを使うと高速になるのかな?とか思ってました^^; 簡単な通信だけならWinSockのほうがだんぜん楽ですね^^; エラー内容を見ていくのは自信がありませんので、WinSockで挑戦してみようと思います。 で、ひとつ質問してもいいですか? WinSockのSendには文字列しか遅れないのでしょうか? 構造体とかを送ることってできないんでしょうか^^; いつも数値なども文字列化して送っていたのでデータ量が無駄で無駄で・・・ ご存知でしたら教えていただけると助かります。 ありがとうございました。
- sha-girl
- ベストアンサー率52% (430/816)
何故そう思ったかはわかりませんがサポートはしているはずですし 英語ですがヘルプファイルはついてます。 コンパイルが通らないとすると 廃止になったインターフェース等があるので、それが原因ではないですか。 関数名が同じでも引数が変わっているものもあったりします。 同じ9でも初期と最新のAugust2005では 既に8と9の初期以上に違いがあります。 (DirectXSDKは3ヶ月に1回ぐらいバージョンアップしています。) 2005だけでも既にAugust2005 June2005 April2005 February2005 とバージョンアップしています。 >どのようにしたら移植できるのでしょうか とりあえずコンパイルしてエラー箇所をひとつずつ なおしていくという作業になるでしょう。
補足
回答ありがとうございます。返事が送れてしまいすみません・・・ SDKと言うのは間違っていたかもしれません。 正しくはそのサンプルプログラムのCommon見たいなやつのことです^^; 最近ではDirectPlayのサンプルがなく、仕方がなく昔の(April)サンプルを読んでいるのですが、そこにあるDirectPlay関係のCommonファイルを現在のバージョンへ移動できたらと考えました。 ですがエラーの山で結局どうしたらいいのかさっぱりなんです・・・ 何かいい方法はないでしょうか。 回答をお待ちしていますm(_ _)m
お礼
本当です、どんなデータでも遅れました^^; 構造体にまとめるとどんなデータもまとめて送ることができるんですね! いろいろ教えてくださりありがとうございましたm(_ _)m ここで学んだことを生かしてがんばりたいと思います!!