• 締切済み

C言語記述されたものをMFCに移植

C言語(SDK)で、記述されたソースコードを C++(MFC)で記述したいのですが、 ダイアログベースでSDKだとEnableWindowなどの 処理が増えて、バグの要因となってしまい自分自身で 最後は状態が分からなくなってしまうことがあります、 それで、MFCにして処理を減らそうと思いました。 基本的にはXXXDlg.cppに書きますが、 関数だけのファイルをMFCとして書き換えたいのですが、 メンバを使うことができません。 XXXDlg.hをincludeしたのですが、駄目でした。 どのようにしたらよろしいのでしょうか?

みんなの回答

  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 >関数がたくさん作ってあるので、 >取りあえずはそのまま暮らすメンバにして >使ってみようと思うのですが、 >駄目なやり方でしょうか? 出来ますが... あんまり、お奨めは出来ません。 (一つのクラスにPublicのメンバ関数としておいて、そのクラスのobjectを作成(newを使用)して使用する) なぜなら、ぜんぜん、クラス設計がデタラメになってしまう可能性があるからです。 まずは、クラスのことを勉強されることをお奨めします、それから、既存の関数をどのように生かすかを考えた方が良いのではないでしょうか?

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

 MFCに移植って事は、どちらの事を指しているのでしょうか? 1)MFCを使用したプログラムに生Cのソースを移植したい。 2)プログラムをクラス化したい。 --- 1の場合には、すべての関数を、ダイアログのメンバ関数として新規に作り直して、組込み直せばOKです。 しかし、処理の軽減には繋がらないと思います。クラスCE設計を行って、作り直すつもりで居ないと、処理が繁雑になるだけです。 2の場合には、頑張って下さい。設計からのやり直しが必要になります。

coolguys
質問者

補足

(1)と(2)の両方をしたいのです。 関数がたくさん作ってあるので、 取りあえずはそのまま暮らすメンバにして 使ってみようと思うのですが、 駄目なやり方でしょうか?

関連するQ&A

  • Visual C++ 2005 MFCアプリのクラス作成について

    Windows XP SP3 Visual C++ 2005 pro MFCアプリケーション シングルドキュメント 以上の環境でアプリケーションを作りたいと思っています。 C++は、C言語をベースという意味ではそれなりにはわかっているつもりです(自信はないですが...)。 本当はSDKを学んだ方がよろしいんでしょうが、時間の都合上MFCでやることにしました。 ちなみに、VC++を使ったプログラミングは初めてのものです。 そこで質問なのですが、 通常のC++においてクラスを作るときは、cppファイルとhファイルで分けてつくってmainのcppでインクルードしますよね。 VC++ MFCも 「C++クラスの追加」 でウィザードを利用してあるクラスAを作成てみまして、わかる方にはわかるでしょうけど、もちろん以下のように出力されました。 A.h------------------ #pragma once class A { public: A(void); public: ~A(void); }; A.cpp---------------------- #include "A.h" #include "StdAfx.h" A::A(void) { } A::~A(void) { } そしてとりあえず、その状態で何も手を加えずにとりあえずコンパイルにかけてみたところいきなり以下のようなエラーが出ました。 error C2653: 'A' :識別子がクラス名でも名前空間名でもありません。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません warning C4508: 'A' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。 error C2653: 'A' : 識別子がクラス名でも名前空間名でもありません fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します 何も手を加えていない状態でこのようなエラーが出るということは、どこかでこのhやcppをインクルードする必要があるのだろうとは思います(でもそういう類のことはウィザードで作成した際に、VC++が自動でコーディングしてくれたりしないのでしょうかね...)。 むしろ、MFCでこのような単純なC++クラスを作ること自体があまり好まれないことなのでしょうか。 もちろんこのクラスを作っていってから、ある処理をさせていこうと思っているので、自分としては以前から行っていたC++のようにコーディングしていきたいと思うのですが、もし好ましくないようならどのファイルにMFC的ではない、ただのC++的なクラスを定義したりすればよろしいのでしょうか。 もしくは、好ましくなくても何らかの対処方法があれば教えていただきたく思います。 Webで調べても MFCクラスの作成などのことしか書いてないので、ちょっとわからなくて困っています。よろしくお願いします。

  • c言語の記述で困っています。

    c言語の記述で困っています。 USBは、メッセージベースの通信バスであるため、PCとUSBデバイスが通信を行う際は、コマンドとデータをテキストまたはバイナリ形式で送受信しています。各USBデバイスには固有のコマンドセットがあります。USBデバイスからの応答を読み取るにはRead/Write関数を使用して、それらのコマンドを計測器に送る必要があると思いますが、具体的にreadやwriteでどのようにc言語で記述したらいいのかわかりません。分かりやすいサンプルやホームページ等ありましたら教えて下さい。よろしくお願いします。 ちなみに、私が使用しているUSBデバイスのコマンドはhexです。

  • C言語による楕円関数の記述

    C言語で楕円関数を記述したいのですが、記述方法がわかりません。 書籍はあるのですが、「絶版」になっているので見ることが不可能です。

  • MFCでinputbox

    先ほどの図書館システムを質問したものですが、MFCには簡単にInputboxを出せる関数はあるのでしょうか?それともダイアログを小さくするとか...? 今考えてみたら、SDKで出来そうですよね。SDKのどの関数がVBでいうInputboxに相当するのでしょうか?また,その関数はどうやって呼べばいいのでしょうか?

  • C言語 main関数とsum関数の記述順について

    はじめまして。 【苦しんで覚えるC言語】(Web版)でC言語を学んでいる初学者です。 【第1部:C言語基礎編】>【関数の作り方】>【自作関数を作る】の部分(http://9cguide.appspot.com/11-01.html#S2)でつまづいています。 下記のような、1から100までの数字の合計を表示するプログラムが例題として取り上げられています。 しかし、ここが理解できないので、次の【プロトタイプ宣言】に進めずにいます。 例題1  sum関数をmain関数の後に記述した場合(プログラムが実行されない)。 #include <stdio.h> int main(void) { return 0; } int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } 例題2  sum関数をmain関数の先に記述した場合(プログラムが実行される)。 #include <stdio.h> int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } int main(void) { return 0; } 例題1の場合、【まずmain関数を作り、次にsum関数を作りました。この場合、main関数を解析している段階では、sum関数は発見されておらず、従って、main関数の中では、sum関数を使うことは出来なくなってしまいます。】との説明がありますが理解できません。 コンパイラがどのような順番でプログラムを処理しているか理解できていないので分からないのだと思います。 例題1の場合と例題2の場合の両方について、コンパイラがどのような順番でプログラムを処理しているのかを具体的に教えてください。 どうかよろしくお願い致します。

  • C言語を記述するシートの書き方

    こんばんは。 現在C言語を学んでいるのですが、課題としてC言語のプログラムを書いてくるようにとプリントが渡されました。そのプリントはプログラムを書く欄として横に長い長方形の枠があって、左のほうには8ミリぐらいの間隔で点線が縦に3本引かれています。 プログラムは分かるのですが、これをどうこのプリントに書けばいいのか分かりません。「main」や「#include」といったものを点線内に書いて、他の処理は普通に残りの白い余白に書けばいいのでしょうか? お願いいたします。

  • C言語について。

    ここでいうC言語のモジュールとは、関数の事でしょうか?教えていただけると嬉しいです。以下の文章です。 C言語のプログラムは、通常いくつかの関数によって構成されています。この関数とは、1つの処理単位を表すものでモジュールともいいます。

  • ソースファイルの分割について

    a.h クラスの定義 a.cpp クラスのメンバ関数の定義 b.h #include "a.h" クラスの定義 b.cpp クラスのメンバ関数の定義 ----c.cpp---- #include "a.h" #include "b.h" a.hで定義したクラスの宣言 b.hで定義したクラスの宣言 メインの処理 ----------------------------------------- b.cppで定義しているクラスのメンバ関数にて a.cppで定義したクラスのメンバ変数にアクセスしたいのです。 どうするのが一番良いのでしょうか? a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスを extern宣言してみたのですがエラーが出てコンパイルが通らないです。

  • C言語の次のステップは?

    現在、C言語を学習していてコンソールアプリケーションや Web上のCGI等は作れるようになってきました。 次の学習ステップとしてWindowsのアプリケーション作成 か、C++の言語学習にするかを悩んでいます。 C言語でのWindowsアプリケーション開発であれば、SDK(Win32API)に よる開発になると認識しています。この場合であれば特にC++の知識は 不要でしょうか?それともSDKでの開発の場合でもC++の知識は必須に なるのでしょうか? MFCとかを使うのであれば、C++の知識は必須ですよね? あるいはこれからの開発ではオブジェクト指向の知識は必須である ということでC++の学習を経て、Windowsアプリの開発について学習した 方がよろしいでしょうか? 最終的な目標はC/C++にてWindows/Linuxアプリの開発ができるように なりたいと思っています。 当面Windowsアプリを開発するにあたって、C→SDKもしくは C→C++→SDK/MFCのどちらが効率的な学習ステップになるのでしょうか? 皆さんのアドバイスをいただければ幸いです。

  • C言語からC++の関数をコールする方法について

    初めて質問させて頂きます。 質問は2つあります。 ●1つ目の質問です。 この度、C言語ベースのプログラムに、C++で作成した関数を使用することになりました。 方法としてextern等を駆使しつつ、ラッパー関数を使って対応しております。 そこで質問なのですが、この場合、ラッパー関数に使用するファイル形式はcppまたはcのどちらが正しいのでしょうか?(どちらでも動きました) ●2つ目の質問です。 Windows環境(vs2005)では無事、CからC++の関数を呼ぶことに成功はしました。 しかし、本当に動かしたいのはLinuxでの環境になります。 先程作成したラッパー関数のファイルとC++で作成した関数のファイルをライブラリ(soファイル)化したものを使用し、コンパイルとリンクは問題なく通すことに成功したのですが、 実行させてみると、Cの関数からラッパー関数をコールしているのは確実なのですが、ラッパー関数の処理を通らず、プログラムが止まってしまいます。 試しにラッパー関数の処理を「return 0;」だけにして実行させてみましたが現象は変わらずでした。 そのため、ラッパー関数を呼ぶための何かに問題があると思っています。 ここで質問なのですが、ビルドのときにライブラリをリンクさせるだけでは駄目なのでしょうか。また、他に思い当たることがありましたらご教示頂きたいです。 Windows環境(vs2005)では期待する動作をしているためプログラムは問題ないと思っています。