Microsoftは最近、新しいPhone 7プラットフォーム用のツールとドキュメントをリリースしましたが、(私のような)大きなC ++コードベースを持っている人は、ネイティブ開発をサポートしていません。この決定が覆されているという憶測を見つけましたが、私はそれを疑っています。そのため、C ++ / CLIでコンパイルするように適応させることで、このコードベースをPhone7で利用できるようにすることがどれほど実行可能かを考えていました。もちろん、ユーザーインターフェイスの部分は移植できませんでしたが、残りの部分についてはよくわかりません。誰もが同じような経験をしましたか?私は重い低レベルのものを実行するコードについて話しているのではありませんが、テンプレートとスマートポインターが非常に頻繁に使用されています。
6 に答える
/ clr:safeオプションを使用して、C ++/CLIで検証可能なマネージコードを生成できます。問題は、通常のc++コードのほとんどがそのオプションでコンパイルされないことです。
c ++ / cliは、理論的には、XAMLから生成されたC#を、コードビハインドファイルのメインクラス内で使用できるマクロ定義に置き換えるトリックを使用して、WPF/Silverlightで使用できます。私はこのテクニックを考案しましたが、理論を超えてそれを採用する動機はありませんでした-言語を混合することは非常に幸せです。
ロジックコードの純粋なセーフモードでc++/ cliを使用する限り、これはまだ不可能かもしれませんが、誰かが今それをどのように試しているのか聞いてみたいです。2008年にSilverlightについて調査しているときに、この気の遠くなるようなSilverlightフォーラムのコメントを見つけました。
C ++プロジェクトのMSILをSilverlight互換のDLLにコンパイルして、Silverlight&C++を試してみました。良いニュース:それは機能し、Silverlightプロジェクトからこのコードを呼び出すことができます。悪いニュース:C ++コンパイラは、Silverlightで許可されていないMSIL命令を使用しているようです。
したがって、これを試してみると、最も単純なプログラムでも、 「操作によってランタイムが不安定になる可能性がある」という例外がすぐに発生します。私には、コンパイラーの動作がかなり異なる必要があるため、Silverlight forC++がすぐに表示される可能性は低くなります。
現在、 WinPhone7でサポートされている言語はC#のみです。
MSが将来的にVBとC++/ CLIのサポートも追加することを完全に期待していますが、ネイティブコードの着物がすぐに公開されることは期待していません。
ネイティブコードには、特にセキュリティや信頼性など、克服できない問題が多すぎます。マネージコードは、静的な検証がはるかに簡単で、実行中の制御がはるかに簡単です。
C ++コードをC#に移植することに腹を立てている場合は、MSがObjective-Cへの移行を強制しなかったことを嬉しく思います;)
私たち自身の経験から、適切に記述されたC ++をC#に移植するプロセスは、実際には、最初に予想されるよりもはるかに少ない労力で済みます。確かに、学習曲線はありますが、どのポートでもそれがあります。実際、コアアプリとデータエンジンをC#に移植することで大きなメリットが得られたため、チーム全体を再構築してC#でコーディングし、必要に応じてC#をC++に移植しました。これまでのところ、2つのモジュールのみをC ++に移植し、代わりに相互運用機能を介してネイティブコードからC#コードを呼び出しています。
繰り返しになりますが、WinPhoneは、最高の、生産性の高い、次世代の開発ツールとプラットフォームを使用したまったく新しいプラットフォームであることを忘れないでください。それはあなたのお父さんのWinMoではありません。
C ++のサポートが非常に重要であると思われる場合は、MSに必ず知らせてください-(敬意を持って専門的に)MSDNフォーラムや近くの開発者イベントで自分の立場を述べてください。
Update1:2012-12-17:
ネイティブC++はまだWindowsPhone7で正式にサポートされていませんが、Windows Phone8はネイティブC++コードをサポートするようになったため、既存のC++コードベースをWindowsPhone 8(およびWindows 8とWindowsデスクトップアプリ)に簡単に移植できます。 。
現在、Windows8 / Phone8プラットフォームとAPIの間に100%の互換性はありませんが、2つのプラットフォームは今後数回のリリースでますます統合されると思います。
これは、WindowsとMicrosoftの他のグループとの間の緊密な協力に対する主要な障壁の1つが最近会社を辞めた今、特に当てはまります;)
Update2:2014年4月15日:
// BUILD / 2014での最近の発表に従って、Windows 8.1、Windows Phone 8.1、XboxOneで実行されるC++とXAML、C#/ VBとXAML、またはJavaScriptとHTMLで「ユニバーサル」アプリの構築を開始できるようになりました。Windows Phone 8.1ユニバーサルアプリの構築の詳細については、この記事をお読みください。
開発のアイデア全体はSilverlightに基づいています。このSilverlightプロジェクトには、C ++で記述されたマネージDLLを問題なく追加できると思いますが、ネイティブコードを使用することはできませんでした。
今夜、自分のマシンにツールをインストールする予定で、これを試してみます。
MSがパスを離れて新しいものを作成することを決定した場合、それはMSの決定です。それでは、事実に直面しましょう。Silverlightはまだ成功していません。MSは、Apple、Android、およびRIMのために大きなシェアを失いました。アプリケーション開発者は、自分のアプリケーションのビジネスケースを評価し、Windows7電話のシェア獲得を信頼するかどうかを判断するだけです。私が経営している会社では、MS Windows Phone 7をこれ以上サポートしないことにしました。これは、これやその他の技術的な理由ではなく、港への投資の見返りを信じていないからです。この新しいプラットフォームの市場での成功が見られれば、将来的にApple、Symbian、Andoid、MeeGoのサポートを開始します。すべてC/C ++をサポートしており、実績のあるアプリケーションコアを再利用できます。だから、なぜまったく心配するのですか。個人的なテクノロジーの好みはゲーティングであってはなりません。
トーマス
いよいよ地平線に!
したがって、Windows Phone開発者に送信された、将来の開発の好みとXNAについての調査は、調査では一度も言及されていません(Windows Phone開発者に送信された調査-私はそれについて言及しました)
しかし、彼らは尋ねます:
モバイルアプリ/ゲームでC++をどのように使用しますか?
- 上から下までC++であるアプリ/ゲームを開発する(UI、ビジネスロジック、およびプラットフォームAPI)
- ビジネスロジックにC++を使用してから、プラットフォーム抽象化レイヤーを作成します
- ビジネスロジックにC++を使用し、サードパーティのランタイムエンジンを使用する
- C++を使いたくない