スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« サーバーも動きつつはある | トップページ | iPad AirをiOS8.0.2にした »

Windows版は特殊

今はOSX用Mirror-DTCのネイティブ版を開発中で、クライアントに続き、サーバーの開発を行っているのだが、開発言語はC++を想定している。なので、そのベースには、Java版ではなく、Windows版を使っているのだが、Windows版には特殊機能が多いので、変更量は多い。

OSX用のネイティブ版Mirror-DTCを開発するにあたって、ここまでは、あまり細かい話は書いてこなかったのだが、クライアント開発時にも、Windows版のソースコードをOSX用に移植する時点で、色々と、変更を余儀なくされた部分はあった。

例えば、Windows版では、sprintfという大昔から使われているC言語の関数を使っていると、危険だから、という事でワーニングが出るので、作者的にも、数年前には、推奨されているsprintf_sなんかの関数に置き換えて使う様になったのだが、こういった関数は全て使えない。

つまり、作者的には、元々、sprintfだとかfopenなんかのC言語用の標準ライブラリにある関数を普通に使ってコーディングしていたのだが、ある時点で、MSが推奨した関数に置き換えたにも関わらず、今回のOSX用ネイティブ版開発では、それらは一切使えないので、元の関数に戻す作業が必要になっている訳だ。

更に、DWORDだとかLONGだとかWCHARなんかのWindows特有の型定義についても、当然の事ながら、変更を余儀なくされているのだが、この辺については、基本的には、ヘッダーで定義を追加して対処できている。

ただし、WindowsのWCHAR型はUTF16の1文字(2バイト)なのだが、OSXでは文字にはUTF8(1バイト)が使われるので、WCHAR型はOSXでは文字定義としては意味を為さず、だからといって、単純にcharに置き換えてしまう訳にも行かない訳だ。

これは何故なのか、というと、Mirror-DTCの場合、文字列をネットワーク転送する事もあるので、OSXで文字列がUTF8になるからといって、従来のWCHAR型の代わりにOSXの文字列を転送しても、相手が文字列と認識しないからだ。

つまり、WCHAR型というのは、ネットワーク転送時にはUTF16として扱わなければならないのだが、OSXにはWCHAR型という型は存在しないので、状況に応じて、char型として使ったり、NSStringとして使ったりしなければならない。

と、いう事で、Windowsが定義している型というのは、基本的には、OSXには存在しないので、その型をどう扱うのか、というのは考えなければならないのだが、上記の様な問題は、まだ良い方だ。

作者的に、Windows版のコードをOSXに移植するにあたって、一番問題になったのは、実は、BOOL型だ。何故なら、このBOOL型というのは、OSXにも存在していたからだ。

つまり、Window用のコードにあるBOOL型というのは、そのまま、OSXでも型として扱われ、意味的にも似たようなモノなので、普通のプログラムなら、そのまま使えるかもしれないのだが、WindowsのBOOL型が4バイトであるのに対し、OSXのBOOL型は1バイトになっているので、Mirror-DTCの様な、ネットワークにデータを転送するプログラムからしてみれば、全然違う型になる訳だ。

と、いう事で、Windows版のC++コードをOSXに移植するにあたっては、上記の様な細々とした問題があるのだが、当然の事ながら、上記のような些細な問題以外に、そもそも、OSが異なる、という事に起因する違いもある訳だ。

特に、サーバーについては、OSの違いによる変更量が多くなっているのだが、大体は、Windows版にある機能を削除する事で対処できている。

つまり、WindowsにはOSXには無い機能が色々とある訳なのだが、これらはどういったモノになるのか、というと、例えば、UACダイアログだとかになる。

上記の様なモノはOSXにもUbuntuにも存在しないので、それら用のMirror-DTCサーバーは非常にシンプルに構築出来ている。

これに対して、Windows版のMirror-DTCサーバーというのは、Windows特有の機能に対応するために、色々な対処が必要とされているので、複雑な構成になっている。

そして、そのコードをOSX用に移植する場合には、そういう複雑な構成をシンプルな構成に変更する必要があるので、ちょっと面倒なのだが、既にJava版では、そういう構成に変更済みな訳なので、今は、コード的にはC++を使いつつ、構造的にはJava版も参考にしつつ、コーディングを行っている段階だ。

ちなみに、サーバーも、既に、メインループ的には動作している。つまり、ネットワークからの要求には応答できているので、接続や認証は行えているし、サーバー情報の送信だとか、クライアントからのコマンド受信なんかも行えている。

なので、後は、クライアントからのコマンド要求に対する実行コードを実装していけば良い段階に入っているのだが、Windows版の画面キャプチャー処理が、OSXから見れば、複雑怪奇なモノになっていたので、ちょっと、ブログ記事にしてみた訳だ。

= この記事に関連する公開中ソフト =

Mirror-DTC

Mirror-DTC

(2015/02/15追加)

« サーバーも動きつつはある | トップページ | iPad AirをiOS8.0.2にした »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/60382313

この記事へのトラックバック一覧です: Windows版は特殊:

« サーバーも動きつつはある | トップページ | iPad AirをiOS8.0.2にした »

2018年9月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google