• ベストアンサー

MFCとC++/CLIとの比較

MFCを使ってプログラミングを今までやっていましたが、C++/CLIへ移行しようと思っています。 ただ、MFCとC++/CLIではプログラミングの自由度に差はあるでしょうか? ここでの自由度とは、思い通りの処理・機能を実現し易いかことです。 処理・機能に関しては具体的にはまだ決まってないので、一般的な話で構いません。 あと、主観で構わないのでMFCとC++/CLIとどちらが好みかも教えてもらえると幸いです。理由も聞かせてもらえるとベストです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

自由度という部分だけをとれば、CLIで行き詰っても、ネイティブコードを呼び出せばいいだけですから、差はありません。 問題なのは、あまりにもネイテイブコードを呼び出す必要が多すぎて、うんざりすることです。 ネイテイブコードを呼び出した場合は、MFCが使えないので、APIということになり、「ありゃ、パラメータは何だったっけ」ということになります。 多くの人が指摘することですが、CLIをやるなら、VBかC#で、許される許容度の中で工夫して、コーディングしたほうがいいと思います。 よくよくのことがないかぎり、それでニーズは満たせます。 C++に関するサイトはたくさんありますが、CLIに好意的な意見はほとんどありません。 SDKやMFCをやっていると、CLIって、「かゆい所に手が届く」感じで、なんだか幼稚に見えるんですよ。 そんなこともないんですけれどね。 もし、すでにC++/CLIに触っていたら、なんとなくニュアンスは分かると思います。 ただ、CLIがどうかということは別として、MFCの将来は、あまり明るくないかもしれません。

その他の回答 (3)

回答No.4

ところで、MFCは温存したまま/clrオプションつけてre-buildすれば C++/CLIのもとでMFCが動きますけど。

回答No.2

僕ならUI回りをC#、既存資産はC++のまま。 その両者をC++/CLIで仲介させます。

回答No.1

MFCはライブラリ、C++/CLIは言語です。 比べようがありません。

oeilvert
質問者

お礼

お返事ありがとうございます。 質問の仕方がまずかったですね。 例えば、C++とMFCという組み合わせとVisualBasicと比較した場合、VisualBasicの方がより手軽にプログラムを組むことができると思うのですが、より細やかな処理となるとC++とMFCの組合せと比較すると融通が聞かない部分があると思うんです。 なので、C++/CLIという言語に移行した際にこういった不便な部分もでてくるのかな?と思った次第です。

関連するQ&A

  • MFC,C++/CLI,C#の共存

    CCDカメラからの画像を画像処理ボード(MV-10というボードです)で受け取り、そのデータを使ったWindowsプログラムを開発したいと考えています。 開発はVisual C# 2005か Visual C++ 2005(C++/CLI)で行いたい(理想としては、フォームなど外観はC#、内部処理はC++)のですが、画像処理ボードのライブラリがMFCとなっていました。 色々と調べて、MFCとC++/CLIを共存させることが出来るらしく、またC#とC++/CLIを共存させることも出来るらしいと言うことが分かったのですが、具体多的な方法が分かりません。 具体的な方法が記述されている書籍や、ウェブサイトなどがありましたら、教えていただきたいです。

  • MFC と CLIどちらを学ぶべきか。

    今後の将来性と処理速度を考慮して、MFCとCLIでどちらを学習しようか悩んでいます。 作りたいソフトはいろいろありますが、画像閲覧ソフトやデスクトップユーティリティ、株価のデータ収集ソフト・簡単なゲーム等を作りたいです。 MFCについては入門書を一通り読み終えており、簡単なソフト(ホント、お粗末なものです。)くらいは作れます。CLIについては、flameworkを使う事は知っていますが、具体的にはまだ理解していません。 入門書等はCLIの内容が多いと聞いたのですが、将来的に考えてCLIを学んだほうが良いでしょうか?個人的には、処理速度が速い?MFCを使いたいとは思っていますが、今後MFCが枯れてゆく技術であればCLIにしたいとも思っています。また、学習の難易度は問いません。 ご意見をお願い致します。

  • 【VC++】MFC、C++/CLI(CLR)、C#の違い、及び、これからの展望

    いつも大変お世話になっています。 VC++初心者です。 VC++6.0(MFC)、VC++2005(CLR)(C++/CLI)(Express Edition)を 同時期に使い始めて何ヶ月か経ちました。 現在では、CLIの方が圧倒的に開発スピードが早く(扱いやすい)、 逆に、MFCの開発スピードが遅く(扱いにくい)、イライラしっぱなしです。 (CLIの開発では、WEBにあるC#のコードを参考にしながら、  コーディングしています。) そこで、何点か疑問に思ったので、ご回答頂けませんでしょうか。 (1)CLIとC#を区別した理由は何なのでしょうか。 (2)MFCはこれからも使われるのでしょうか。  (MFCで新規開発をすることは、まだまだ大勢なのでしょうか。) (3)VC++2005以降、MFCは有償らしいのですが、  VC++6.0(MFC)とVC++2005(MFC)は何か変わったのでしょうか。  (コーディングしやすくなっていますか?) (4)個人差はあると思いますが、開発スピードが一番早いのは、  CLR、C#、MFCのどれでしょうか。   すぐに返信ができないと思いますが、 宜しければ、ご回答頂けると幸いです。

  • C++/CLIで画像処理

    お世話になります VC 2010 C++/CLIで作成されている、既存プロジェクトに以下のグラフィック機能を追加したいのですが、 色々試しては挫折してます。 実現可能なライブラリを教えていただけないでしょうか。 【補足】 ・既存プロジェクトはそれなりに大きなものなので、既存部の書き換えは考えておりません ・既存プロジェクトはPictureBoxで出来る範囲の色々な描画を行っているので、ここはそのまま残す予定 【追加機能】※ 以下は新規に子フォームを作成して、独立した機能として追加予定 1. 異なるサイズの画像(写真)を重ねて描画する(これは、単純なので標準の機能を始め全てで出来ます。) 2. 上面の画像を半透明にして、背景の写真を透過 (上面画像の背景を透過するのではなく、上面画像の全体を透過) 3. 上面の画像をマウスに追従して移動 4. 上面の画像の4点を個別にマウス指定で変形 5. 1~4で出来上がった画像の合成&出力 【試したもの】(理解ミスが有るかもしれません) ※事前検討で実現困難なライブラリも小細工できないかと、念のためそれぞれ試しております。 1. 標準の機能 ・アドバイスをいただき、透過はできたのですが、4の変形ができない (画像データを変形毎に計算して求めるのは非現実的なので適用していません・・変形後も移動が有る為) 2. OpenCV ・透過処理がアルファブレンドなので、3の処理が遅い (理想はOpenGLの様にZバッファを使用して、背景が透過するもの・・・背景を意識しない処理のみで済むもの) ・透過処理がアルファブレンドなので、同サイズの画像か背景を上面と重なる部分を検出して切り出す必要がある (上面の画像の変形を考えると、背景を上面に合わせて切り出すのは困難) ・4が矩形しか対応していないので、ひし形までしか変形できない (視点の変更で形状こそ求めているものに近くなるが、今回の用途ではユーザーに単純操作で変形させてあげる必要がある) 3.OpenGL ・画像単体での読み書きができない (テクスチャマッピング機能を用いるか他のライブラリを併用する必要がある) ・平面ポリゴンを定義して、テクスチャマッピングをした場合、4の変形時にマッピング画像が追従するようにする必要がある 4.DXLib ・追加機能に対応する機能を持ってはいるが、そもそもCLIに対応していない 5.GDI+ ・CLI対応のサンプルが見つからない? (CLI以外のサンプルは多々見かけるのですが、ウインドウのハンドルやポインタの使い方が異なり、苦戦中) ・そもそも、説明しているサイトが少ない (私のような素人がみるとどれがGDI+の記述でどれが標準の機能なのか判らないものばかり  せめてGDI+のXXXを使用すると以下のソースになるみたいな説明がされているサイトがが有れば教えてください) 6.Direct2D ※まだ検証してません

  • C++/CLIのクラスについて

    現在, VC++2008のC++/CLIを用いてプラグラムを作成しています。 値を与えると,計算した値を返すクラスを一回の処理の何度も使用しています。 Keisa^ kei = gcnew Keisa; kekka1 = keisan->exec(1); kekka2 = keisan->exec(2); kekka3 = keisan->exec(3); delete kei; ///上記のkekkaを使用した処理/// kekka1=0; kekka2=0; kekka3=0; 上記のように書いて,実行すると,  kekka2にはkekka1 + kekka2を合計した値 kekka3にはkekka1 + kekka2 + kekka3を合計した値 のように,積算した値になってしまいます。(しかもなぜか,releaseフォルダ内の.exeファイルから実行した場合のみです...) クラスを使用した後の後処理に問題があるのかもしれませんが,知識がなくわかりません。 お分かりの方がいらっしゃいましたら,ご教授お願い致します。

  • C++でGUIプログラムを作るには?

    C++のプログラムの参考書にはコンソールプログラムの例しか ありませんが、C++/CLI(Windows Form)やMFCなどを使わずに APIとかで作るとしたらどうすれば出来るのでしょうか? ただのCであればWinMainとメッセージ処理のプロシージャを 用意してそこの中にプログラムをしてあげれば良いのですが…。

  • VC++/MFCでリフレクション

    Javaでは、ObjectのgetClass()でClassクラスの インスタンスが取れ、実行時に指定した、メソッド名や、引数で、動的にメソッドを呼びだすようなリフレクション機能が使用できます。 同様のことをC#でも実装したことがあります。 VC++/MFCにて、このようなリフレクションをやるやり方を教えてください。 C++の標準あるいわ、MFCの機能など、どちらでもよいです。 メタクラス型のようなものを実行時に取得して、リフレクションする方法だと思います。 質問の内容はVC++.NETやVC++/CLIではないです。そちらのほうでのやり方は既に発見しました。

  • 【GUI】MFCからC#への移行についての必要性

    今まで主にMFCを用いたコーディングをしていたのですが GUIをMFCからC#に移行する作業を検討しています。 そこでCoreとなるソースはC++にしておきたいので 「MFC ダイアログベース」 から 「C++ DLL」に移植を考えてます。 その為、今テストとしていくつかのソースコードをDLL化してみましたが MFCのAPIによるエラーが非常に多く作業量が膨らむばかりです。 ここで質問ですが、このような作業は将来的にメリットを生み出す事かどうか 個人差があるかとおもいますが皆様からのご意見頂けないでしょうか? 私の方で気づいたメリットは以下の点だけで、作業に価値があるか少しずつ疑問になってます・・・。 ・WPFなどを使える事からGUI周りのレベルが上がる ・今後、C#による需要が多くなると見込んでいるため。 作業量が多く挫折しそうです。。。

  • 【C++/CLI】コンボボックスの値と文字列比較、一致した場合インデックスを返す

    VC++2005の.NET、言語はC++/CLIにてアプリを作成しています。 コンボボックスの中に、下記値が入っているとします。 【コンボボックス】 aaa bbb ccc これらの値に対し、String型の変数に格納された文字列「bbb」で、 コンボボックスの中に入った値と比較していき、値が等しければ、 コンボボックスのインデックス(この場合は「1」)を返すという プログラムを作成したいのですが、そのような処理を実現させるような、 コンボボックスのメンバ関数、APIなどについてご存知の方おられましたら、 ご教示お願い致します。 下記に雛形を記載します。 String str; str = "bbb"; //ここにコンボボックスの中の値と順番に比較する処理 if ( 比較結果が等しい ) { //該当する値のインデックスを返す }

  • Visual C++で文字列の検索を実現したい。

    プログラミング初心者です。 今、Visual C++で(MFCは使っていません)勉強として日記帳のアプリケーションを作っています。 その日記に記録する内容は初期化ファイルに保存するという方法を取っているのですが、例えば一ヶ月間その日記を使って書いたとして、その一ヶ月間で書いた内容の中から「プログラミング」という単語が入った日を検索する、という機能を入れたいのですが実現方法が分かりません。 もし、参考になる書籍・Webページ・あるいはアドバイスそのもの、がありましたら教えていただきたいです。 お願いします。