CとVisual C++ 6.0を混合することはできますか?
例えば、あるファイルのデータを読み込むCのプログラムがあります。
そのプログラムはある変数に値を格納しています。
その同じ変数を使い、Visual C++ 6.0のプログラムで同じ変数名で
値を処理することは可能ですか?可能であれば方法を教えてください。
Cというのは何を意味しているのでしょうか。
Visual C++と分けているのですから,Visual C++のC modeとは別なのですよね。
>CとVisual C++ 6.0を混合することはできますか?
ここで言われている C とはプログラム言語の C ですよね?
一方 Visual C++ 6.0 は、C および C++ の統合開発環境(エディタ+コンパイラ&リンカー+デバッガー+α)であり、プログラム言語の名称ではありません。おおざっぱに言えば Microsoft 社が販売している C( および C++ )のプログラムを開発するための道具です。
もしかして C と C++ の話なのでしょうか?
それとも名称の判らないとある C の開発環境で作成したプログラムと、VC++ 上で作成されたプログラムの話なのでしょうか?
用語の使い方が不適切なため、このままでは PEN さんが質問したいことを誰も理解できずに終わってしまうのではないかと思います(^^;
説明不足でした。Visual C++ 6.0というソフトを使用しています。
このソフトはヘンゼルの記憶の言っているように色々使えます。
例としては、QuickC時代のいわゆるWindowsが存在していなかったときに
使用していたC言語をこのソフトで書けます。
#include<stdio.h>
main(){
int a;
a=100;
printf("%d",a);
(省略)}
これが私が伝えたいCでした。
ところがWindows時代になりVisual C++ 6.0が出てきました。
そして例えばMFCなどのVisual C++ 6.0で使用する昔のC言語以外の
言語
void CSmp1View:OnDraw(CDC* pDC)
{(省略)
pDC->OutText();
(省略)
}
ビジュアル系のことです。
うまく言えませんが、昔のC言語で作成したプログラムを現在のWindows
時代のVisual C++ 6.0のMFCなどに再利用する方法を質問したいと
思っています。
Visual C++ 6.0の書店で市販されているものは昔見たC言語と違う
形で書かれていました。
具体的に言いますと昔のCで作成したファイル入力のプログラムを使用し
読み込んだデータをMFCなどのプログラムを使って読み込み、MFCなどを使って表やグラフのようなビジュアルの出力をしたいと思っています。
MFCはC言語でなくC++言語を利用したライブラリです。
基本的に,Win32 APIを薄くラップしたクラス群と,
非定型処理のみを書けばよいようにしたフレームワークからなります。
MFCを使うにしろ,Win32 APIを使うにしろ,
グラフィック表示をしたいのであればそれについての知識が必要です。
QCのプログラムを移植したいだけであれば,
単純にメイクファイルのqclをclに置き換えて,
ソース中のintをshort intに置き換えれば,大抵動きます。
#far/near/hugeは削除する必要がある。
勉強不足。
管理人さんCとVC混合にするには?の記事を削除してください。
Quick-C は DOS 時代わたしも使っていました。懐かしいです♪
で、移植についてですが、ANSI 標準関数のみを用いて書かれていれば、ソースのほうは VC++ 上でもだいたいそのままでコンパイル & リンクが通ると思います。
その際の注意点については YuO さんが述べられているとおりです。
また、そもそも VC++ 上で開発するからといって、C++ で書かなければいけない、といったことは全くありません。C でも OK です(^^)b
さらにグラフィカルな表示をあきらめてコンソールアプリとして作成すれば、そのまま or わずかな修正で以前のプログラムが動くはずです。
また、ウィンドウ(非DOS窓)を表示したい場合でも、過去に作成したソースを流用しつつ、Win32API をコールするプログラムを全て C で書くことも可能です。ただしこちらはコンソールアプリよりかなり(では弱いかな、ものすごく!)大変です。
MFC を使うかどうかは別として、新しく作成する部分を C++ で書きたい場合には、別の注意が必要です。
C++ から C の関数を「そのまま」では呼べないからです。
この場合 C で書かれた「関数」を C++ に移植するか(拡張子を .cpp にするだけでもけっこういけます(笑))、extern "C" をつけて宣言しておく必要があります。
逆にいうとたったそれだけで OK ですが。
ついでに。
「VC++ 6.0」の入門書はそのほとんどが問答無用で MFC を使ってプログラムを作成することについて書かれています。そのため C++ についてある程度は理解していないと本のサンプルを修正して使うこともままならなかったりします。
おそらく入門書の巻頭か巻末の方に C++ の言語仕様について書かれた章があると思いますので、まずはそこをじっくり読んで理解するとだいぶ違うと思います。
もっとついでに。
ウィンドウを開いてグラフィック表示したりすることが、実はなかなか大変だったりします(^^;
すでに知識をお持ちでしたら問題ないと思いますが…そうでなかった場合、それなりに腰を据えて取り掛からないと、VC++ や MFC といったレベルではなく、もっと大量の用語の海に溺れて窒息してしまう可能性があります。
ヘンゼルの記憶さん、返事ありがとうございした。Quick-Cを知っている
人に会えうれしいです。イメージをどう伝えて良いのか悩んでいました。
ベースをCで書き表示はビジュアルにと思っていました。
簡単には動かないみたいですね。
Quick-C時代にも描画はありましたがかなり大変でしたし、ライブラリも
現在では対応していないものなどもあります。
昔に比べ現在のプログラムの方が簡単に書け綺麗に描画できると聞き
そのようにしたいと思っていました。
DOS 時代のグラフィックライブラリはハードウェアに直にアクセスしていましたので、現在では特殊なエミュレータ環境を除き全く使えません(^^;
で、VC++ にこだわらなければまた別の解決方法があるかもしれません。
VB や C++Builder 、他にも探せばきっといろいろあるかもです。
わたしは触ったことがないので何ともいえませんが、こういった他の環境(VB の場合は言語も違う)の方が簡単だという意見を多数見聞きしています。
VC++ には VC++ のよさがあるのはもちろんですが。
>昔に比べ現在のプログラムの方が簡単に書け綺麗に描画できると聞き
>そのようにしたいと思っていました。
DOS 上でウィンドウを開いてボタンやエディットボックスを配置し…なんてことをやろうと思ったら確かに昔はつからったと思います。
実際、影付きで動いたりサイズが変わったりするポップアップを表示したり、自由に配置できないものの押せばへこむボタンやキーでもマウスでも選択できるリストボックスのようなものを、自作ゲーム用に作ったことがありますが…これをやるだけで非常に時間がかかり肝心のゲーム部分を作る気力を失いました(^^;
VC++6.0 + MFC で上のことをただ実現するだけなら数分で出来ます(笑)
ともかくどの言語、どの開発環境を選んでも、最初は覚えることがたくさんあると思います。
頑張って下さいp(^^)q
> ベースをCで書き表示はビジュアルにと思っていました。
> 簡単には動かないみたいですね。
Console-base Application(MS-DOS時代のプログラム含む)と,
Window-base Applicationでは描画の方法が根本的に異なります。
Console-base Applicaitonでは,プログラム側が描画のタイミングを指定します。
それに対して,Window-base Applicationでは,基本的にシステムから指示が来たタイミングで描画します。
#指示を要求したり,指示無しに描くこともできます。
> 昔に比べ現在のプログラムの方が簡単に書け綺麗に描画できると聞き
> そのようにしたいと思っていました。
何をもって「簡単」とするのかは人それぞれだと思います。
Window-base Applicationの場合,システムから指示が来るのは決まったタイミングではないです。
例えば,他のウィンドウの裏に隠れていた部分が表に出てきた時,といった感じで描画要求が来ます。
その為,ある程度グローバル変数的な変数が不用意に必要になってきたりします。
> DOS 上でウィンドウを開いてボタンやエディットボックスを配置し…なんてことをやろうと思ったら確かに昔はつからったと思います。
結局それは,ライブラリの問題では?
PC-9801用のWindow Libraryなんてのも市販されていましたよ。
Windowsだって,一からボタンやエディットを作るとなると骨の折れる作業であることには変わりないです。
>> DOS 上でウィンドウを開いてボタンやエディットボックスを配置し…なんてことをやろうと思ったら確かに昔はつからったと思います。
>
>結局それは,ライブラリの問題では?
>PC-9801用のWindow Libraryなんてのも市販されていましたよ。
>
>Windowsだって,一からボタンやエディットを作るとなると骨の折れる作業である>ことには変わりないです
確かに…。
比較対照があいまいでいいかげんな発言になっていました。申し訳ありません。
Quick-C で市販(フリーでもあったのだろうか)ライブラリなしだと大変。
VC++ 6.0 で MFC 使うなら簡単。ただし C++ を知らないとちょっと大変。
DOS では GUI をサポートしていないので、自分で書くかライブラリを利用するなどアプリ側で全部やらなければならない。
Windows ではもちろん GUI をサポートしているが、便利なライブラリを使わず Win32API を直接叩いて利用する場合はそれなりに大変(少なくとも MFC に頼り切っているわたしには)。また外観や動作を好みのものに変える場合結局自分で描画することになるかもしれない。
というところでしょうか。
ヘンゼルの記憶さん、ありごとうございます。
いっそう勉強します。
また何かあればよろしくお願いします。