C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: C++のWindowsフォームアプリケーション


(過去ログ 132 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■78047 / inTopicNo.1)  C++のWindowsフォームアプリケーション
  
□投稿者/ あけみ (1回)-(2015/12/09(Wed) 21:49:38)

分類:[C/C++] 

2015/12/09(Wed) 21:50:23 編集(投稿者)

質問させていただきます。
C#はある程度覚えたのでC++を覚えてみようと思ったのですが
Visual Studio Exprees だと 私のパソコンにあるものでは
2010まではWindowsフォームアプリケーションのテンプレートがあるようですが
それ以降はテンプレートがないのです。
調べたらWindowsフォームアプリケーションを作成する方法はあるようなのですが
なんで、VisualなのにC#はあってC++にはないのでしょうか?
よろしくお願いいたします。

引用返信 編集キー/
■78048 / inTopicNo.2)  Re[1]: C++のWindowsフォームアプリケーション
□投稿者/ Azulean (556回)-(2015/12/09(Wed) 22:09:33)
No78047 (あけみ さん) に返信
> C#はある程度覚えたのでC++を覚えてみようと思ったのですが

Windows フォームアプリケーションが使えた言語は C++/CLI であり、純粋な C++ とは異なります。
C++/CLI でアプリケーションが作れることは、「C++ ができる」とイコールではありません。


> 調べたらWindowsフォームアプリケーションを作成する方法はあるようなのですが
> なんで、VisualなのにC#はあってC++にはないのでしょうか?

C++/CLI は GUI を作るものではないと Microsoft が位置づけを定めたからです。
その決定根拠として明らかにできるものを私は知りませんが、少なくとも、Visual C++ は Windows フォーム アプリケーションを作る環境ではないと位置づけられているのは現状です。
https://support.microsoft.com/ja-jp/kb/3001686
引用返信 編集キー/
■78049 / inTopicNo.3)  Re[2]: C++のWindowsフォームアプリケーション
□投稿者/ ?????? (2回)-(2015/12/09(Wed) 22:20:59)
ご回答いただきまして、ありがとうございます。
そうなるとVisual C++はどういった場合に使うのが有用なのでしょうか?
引用返信 編集キー/
■78050 / inTopicNo.4)  Re[3]: C++のWindowsフォームアプリケーション
□投稿者/ Azulean (557回)-(2015/12/09(Wed) 22:52:51)
No78049 (?????? さん) に返信
> そうなるとVisual C++はどういった場合に使うのが有用なのでしょうか?

ネイティブコードでないと書かないといけない部分であるとか、過去の資産やライブラリなど、C/C++ でないとどうしても使えないものを使うとか、よっぽどの事情がなければ C# を使った方がいいとは思います。
引用返信 編集キー/
■78055 / inTopicNo.5)  Re[4]: C++のWindowsフォームアプリケーション
□投稿者/ あけみ (2回)-(2015/12/10(Thu) 07:39:27)
ご返答ありがとうございます。
そうですか。しかし、C++の方が処理速度が速いと聞いているのですが
そういう事を考えるとC++/CLIの方がいいのかなという気もしてるのですがいかがでしょうか。
引用返信 編集キー/
■78056 / inTopicNo.6)  Re[5]: C++のWindowsフォームアプリケーション
□投稿者/ 774RR (350回)-(2015/12/10(Thu) 08:53:04)
pure C++ と C++/CLI は別言語です(似て非なるもの)
Windows というか Visual Studio の世界では次のように考えてよいです。

pure C/C++
・いわゆる native 命令を直接生成する (よって x86 と x64 と ARM は別 EXE になる)
・とにかくひたすら超高速が求められる用途向け
 コンピュータ将棋の思考ルーチンとか、データベースの検索エンジンとか
・デバイスドライバ等 native でないと実装できない用途向け
・異プラットフォーム (Linux や 「組み込み」) とソース共有する用途向け
・ GUI 部品も用意されている (MFC 等) が、古いまま更新されていない
・古い言語であり「熟練したプログラマが正しいコードを記述する」ことを想定している
 つまり、初心者が使うと簡単に誤ったコードを記述しうる
・プログラマが誤らない前提で、誤りを検出する機構が実行時には無効になっている分だけ速い
 が、誤ったプログラムを実行すると何が起こるかわからない

C++/CLI
・いわゆる IL 命令を生成する。 IL とは中間言語。よって x86/x64/ARM 等で共通な EXE になる
・実行時に IL 命令を native 命令に変換しながら処理をする
 よって初回の実行は遅いことがある(2回目は既に変換済みなので native と速度が同じはず)
・下記 C#, VB.NET 系プログラムと pure C/C++ の仲介をするものと位置づけられている
 なので GUI 部品等は一応用意されているが Visual Studio のデザイナでサポートされてない

C#, VB.NET
・いわゆる IL 命令を生成する。 IL とは中間言語。よって x86/x64/ARM 等で共通な EXE になる
・実行時に IL 命令を native 命令に変換しながら処理をする
 よって初回の実行は遅いことがある(2回目は既に変換済みなので native と速度が同じはず)
・ GUI プログラムを Visual Studio のデザイナで作るためのものと位置づけられている
 なので最新の GUI 部品が使える
・新しい言語であり「プログラマは簡単に誤る」ことを想定している
 つまり、初心者が使ってもバグりにくいが、上級者には若干うざったらしい表現が必要となっている
・プログラマの誤りを検出する機構が実行時にも有効になっている分だけ若干遅い
 が、誤ったプログラムを実行すると高い確率で検出されて異常動作をさせにくい

C++ と C++/CLI とで「どっちが良い」かは用途次第っす。
でもまあ 2015 年時点で C++/CLI は特定目的の専門家以外は使う必要が無い言語と位置づけられてます。
Windows 以外の機械 (Linux 等) も考えるなら C や C++ を学んでみるのも良し
Windows と心中する気なら C# を極めてみるのも良し

今この瞬間には「その必要がある」のでない限り C++/CLI に手を出さないほうが良いと思うっす。
何のために必要かがわからないのであれば手を出す必要は皆無っす。

引用返信 編集キー/
■78058 / inTopicNo.7)  Re[6]: C++のWindowsフォームアプリケーション
□投稿者/ ぶなっぷ (63回)-(2015/12/10(Thu) 10:01:29)
なんつーか、実用的にどうなの?という目線で話してみたいと思います。

774RRさんがお話になっているように、現在ではC++/CLIは
「C#, VB.NET 系プログラムと pure C/C++ の仲介をするもの」
という側面が強いので、それがどういう意味なのかを簡単に解説してみたいと
思います。

C#はご存じなので、値型と参照型の差は分かりますよね。

C#で言うところの参照型は、C++/CLIでは^を付けて表します。
(例) C#の String型(小文字のstringはエイリアスであり実体はString)は
     C++/CLIでは String^型になる

参照先へのアクセスは C#では . を使うが、C++/CLIでは -> を使う
(例) 文字列変数 Name があるとき
  C#では Name.Length で文字数を参照できますが、C++/CLIでは Name->Length
  で参照します。

などなど、100%ではないですが、C#とC++/CLIのコードはほぼほぼ(私的感覚では95%
以上)1対1に移植することが可能です。

それとは別に、C++/CLIではネイティブのC++と同様のコードを書くこともできます。
(ネイティブなのでCPUに応じた最適化が可能であり、通常はIL版より高速です)

その特徴を生かして、処理速度の必要な部分はネイティブコード(C++)で書いて、
GUIはC#で書いて(互換性があるのでC+++/CLIでGUIを書くこともできるが、C++/CLI
ではラムダ式が使えないため、デリゲートに渡すメソッドをいちいち作成せねばなら
なかったりして面倒)、その橋渡しをC++/CLIに任せるというのが一般的ではない
でしょうか。

注意点は、C#側(IL側)はプラットフォームに[Any CPU]を選択できますが、
C++側(ネイティブコード側)はプラットフォームごとに別々にビルドせねばならない
ということ。

短い文章に無理やり詰め込んだので、分かりづらかったらすいません。

引用返信 編集キー/
■78077 / inTopicNo.8)  Re[7]: C++のWindowsフォームアプリケーション
□投稿者/ ?????? (3回)-(2015/12/11(Fri) 21:12:49)
ご丁寧に教えて頂いてありがとございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -