VC++6.0のMFCでプログラムを組んでいます。

OnDrawクラス内であるテキストデータを読み込んで、配列に格納しておいてその中の値がある値を超えたら、文字表示。超えていなければ文字非表示としようと思っているのですが

if(w[16][m]<-700.0){
pDC->SetTextColor(RGB(0,0,0));pDC->TextOut(20,200,"表示文字");
}else{pDC->SetTextColor(RGB(255,255,255));pDC->TextOut(20,200,"表示文字");
}

としてfor文でmを増加させていくのですが、初めの評価だけでずっと変わりません。(初め-700以下なら文字がずっと表示され、以上ならずっと白で表示されます。赤(255,0,0)にして試してみましたところずっと赤が出ました。)

ネットを方々探しましたが、いまいちわからなく困っています。

わかりづらい質問かもしれませんが、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

まず、デバイスコンテキストにリージョンを選択するということが何を意味するかです。


SelectObjectの解説には、

> パラメータに領域を指定する形式のメンバ関数は、SelectClipRgn メンバ関数と同じタスクを実行します。

と書かれています。つまり、デバイスコンテキストへの描画を、リージョン内に制限することになります。

CDC::SelectObject
http://msdn.microsoft.com/ja-jp/library/sa8ahz7h(v=vs.80).aspx

これを解除するには、SelectClipRgnに対してNULLを与えます。

CDC::SelectClipRgn
http://msdn.microsoft.com/ja-jp/library/txy5hzk3(v=vs.80).aspx


次に、PaintRgnの解説では、単に領域を塗りつぶすとされています。この機能を使用する前に、リージョンを選択する必要があるとはかかれていません。今、開発環境がないので試せませんが、おそらくSelectObjectでリージョンを選択しなくても、PaintRgnは動作します。

CDC::PaintRgn
http://msdn.microsoft.com/ja-jp/library/z38612dh(v=vs.80).aspx


さらに、フォント・ペン・ビットマップ・ブラシなどを作成した場合は、それを削除しなければなりません。CFont・CPen・CBitmap・CBrushを使用した場合、これらのデストラクタで自動的に削除されるようになっていますが、デバイスコンテキストに選択された状態だと削除に失敗します。これらのリソースが削除されないと、使用しているリソースの量がどんどん増えていき、限界まで達すると画面表示に支障が出ます。
なので、デバイスコンテキストに選択したものは、元に戻しておく必要があります。
ブラシの場合であれば、

CBrush brushNew;
CBrush* pbrushOld;

pbrushOld = (CBrush*)pDC->SelectObject(&brushNew);
... // 描画などの処理
pDC->SelectObject(pbrushOld);

のようにします。(他にもSaveDCとRestoreDCを使う方法もあります)


ブラシを元に戻す処理を加えるのと、SelectObjectでリージョンを選択している行を試しにコメントにしてみてください。
もし、SelectObjectでリージョンを選択しないとPaintRgnがうまく動作しないようであれば、PaintRgnのあとにpDC->SelectClipRgn(NULL);を入れてみてください。
    • good
    • 0
この回答へのお礼

再度の回答、また詳しい回答ありがとうございます。

pDC->SelectClipRgn(NULL);

を挿入することでとりあえずは意図する表示ができました。

>なので、デバイスコンテキストに選択したものは、元に戻しておく必要があります。
ブラシの場合であれば、

CBrush brushNew;
CBrush* pbrushOld;

pbrushOld = (CBrush*)pDC->SelectObject(&brushNew);
... // 描画などの処理
pDC->SelectObject(pbrushOld);

のようにします。

の部分がまだよくわからないので、教えていただいたURLなどを参考に勉強してみます。

詳しい回答本当にありがとうございました。

お礼日時:2011/05/02 11:15

PaintRgnするだけなら、リージョンを選択する必要はないのでは?


あと、SelectObjectの戻り値を保存してませんが、ちゃんと元に戻してますか?
SelectObjectでリージョンを選択して、そのままにしてるために、リージョンの外側への描画が無視されているということはありませんか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>PaintRgnするだけなら、リージョンを選択する必要はないのでは?

そうなのですか。教科書まる写ししたため訳もわからず使っていました。

>あと、SelectObjectの戻り値を保存してませんが、ちゃんと元に戻してますか?

していません(汗)。よくわからずに使っているので・・・。

>SelectObjectでリージョンを選択して、そのままにしてるために、リージョンの外側への描画が無視されているということはありませんか?

きっとその通りだと思います。試しに

CBrush brushBrush(・・・);
CreateRectRgn(・・・);
pDC->SelectObject(&brushBrush);
としてみましたが、こうすると画像は表示されませんが、テキストは思い通りに表示されました。

リージョンを選択せずにPaintRgnするのはどうすれば良いのでしょうか?もしくは、リージョンを選択しても、外側への描画が反映されるようにするにはどうすれば良いのでしょうか?

ネットで色々探してみましたが分からずです。力不足な私に何かアドバイスいただけないでしょうか?

重ねての質問すみません。

お礼日時:2011/05/01 13:31

この部分だけ出されても困るので, できるなら OnDraw の部分は全部見せてほしいかな.


あと, w の宣言もお願い.

余談だけど, 「w[16][m] の値が (想定した通りに) 変化している」ことは確認できている?
    • good
    • 0
この回答へのお礼

>この部分だけ出されても困るので, できるなら OnDraw の部分は全部見せてほしいかな

大学の研究なので、全部を見せることはできません(涙)本当なら見せたいところですが・・・。

>あと, w の宣言もお願い.

#define LINE 424000
double w[17][LINE];

です。LINEが大きすぎるんですかね(汗)。

>余談だけど, 「w[16][m] の値が (想定した通りに) 変化している」ことは確認できている?

CBrush brushBrush(RGB(...));//...にはwから計算した値をintでキャストして代入
CRgn myRgn;
myRgn.CreateRectRgn(...);//...には任意のmにより変化する値を代入
pDC->SelectObject(&myRgn);
pDC->SelectObject(&brushBrush);
pDC->PaintRgn(&myRgn);

とうい処理を質問の記述のすぐ後にしていますが、これはmの変化に伴い変化します。映像のようになるのです。これに伴いw[16][m]もmに伴い文字を表示したり、しなかったりしたいのですが・・・。

今わかったのですが、この画像を表示する部分を無効にする(/**/でくくる)と思い通りTextOutの表示は表示されたりされなかったりします。

すべてのソースを記述できずにすみません。

お礼日時:2011/04/29 06:28

> for文でmを増加させていくのですが



それはどこでやってますか?
OnDrawの中でないのであれば、mをさせただけでは画面更新の必要があるとWindowsが感知してくれないので、OnDrawが呼ばれません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。しっかりOnDrawの中で増加させてます。

他にも同時にグレースケールの四角形も表示しているのですが、こちらはmに伴い再描画されます。

お礼日時:2011/04/28 13:21

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVisual C++ 6.0とVisual C++ 2005 についてですが・・・

Visual C++ 6.0でワークスペースと呼ばれていた物がVisual C++ 2005になるとソリューションと言う名前になったと聞きました。
また、Visual C++ 6.0で製作したファイルはVisual C++ 2005でも開けるけどVisual C++ 2005製作したファイルはVisual C++ 6.0では開けないと聞いたのですがVisual C++ 2005製作したファイルをVisual C++ 6.0でも開ける様に互換性を持たせる方法はありませんか?
学校と家で使っている環境が違うので互換性がもてれば両方で使えてとても便利になります。
御存知の方がいましたら御伝授お願いします。

Aベストアンサー

ソースファイルやヘッダファイル(拡張子CPP/C/H/HPPなど)はVisual C++ 6.0と2005で共用できるので、6.0用のプロジェクトファイル&ワークスペースと、2005用のプロジェクトファイル&ソリューションファイルを用意すれば両方の環境で開発を進めることができるでしょう。

但し、以下の点にご注意下さい。
・ソースファイルの追加や削除は両方のプロジェクトに対して行うこと。
・Visual C++6.0ではManaged C++が使えないのでManaged C++は使わないこと。
・MFCの仕様がだいぶ違うので、MFCも避けること。MFCを知り尽くしているのでしたらチャレンジはご自由に。
・C++コンパイラとしても若干仕様が違うので(for文内で定義された変数のスコープなど)、常に両方の環境でコンパイルできるか考えながら開発する必要があること。

QVC++6.0 MFC GetCommandLine()で取得したコマンドラインをすでに起動しているプログラムに渡す。

お世話になります。

VC++6.0 MFC で開発しております。

プログラムAでGetCommandLine()で取得したコマンドラインをすでに起動しているプログラムBに渡すにはどのような関数を使えばよいのでしょうか?

お手数ですが、何卒よろしくお願いします。

Aベストアンサー

>プログラムAに、「1のファイルを開け!というコマンドラインを渡し、
>プログラムAからそのコマンドラインをプログラムBに渡し、
>プログラムBからファイルを開くということがしたいのです。

>プログラムAB共に自分で開発しており、
>ファイルを開いて見れるアプリなのです。

プロセス間通信によりプログラムAからプログラムB
にコマンドラインを送信し、
プログラムB側で、
受け取ったコマンドラインを解析して
ファイルを開けば良いのでは?

プロセス間通信は、WM_COPYDATAでも、
共有ファイルでもいいし、他にも名前付きパイプ等色々あります。

受け側では、プロセス間通信により
受け取ったコマンドラインを解析し、
ファイルを開く関数にファイル名を引き渡し、
開かせればよいのではないでしょうか?

自分で開発したプログラムなのですから
ファイル名を引数で与えて開く関数は
作ってあるでしょう?

QCかC++どちらを覚えるべきですか?

初めまして。せいじと申します。よろしくお願いします。
プログラミング経験なしです。今30歳です。
遅すぎますが、これからC言語かC++言語をマスターしたいと思っています。
Windows 98 + Borland C++ Compiler 5.5
で勉強しようと思ってます。

Cの拡張されたものがC++だからC++を覚えようと思って、C++の本を買いました。
・新C++言語入門 ビギナー編 SOFTBANK Publishing 林 晴比古 著
・詳説C++             SOFTBANK Publishing 大城 正典 著
2冊ともまだ最初の方を読んで実践しただけです。

クラス、オブジェクト指向プログラミング等々が何なのか分かっていないのに、
C++をする意味があるのか、まずはCで十分ではないのか?
と思うようになってきました。

実際どうしたら良いのでしょう。
何も知らないならC++からでも良いのでしょうか。
違いが分からないならCで十分なのでしょうか。
みなさんの意見を聞かせてください。

よろしくお願いします。

初めまして。せいじと申します。よろしくお願いします。
プログラミング経験なしです。今30歳です。
遅すぎますが、これからC言語かC++言語をマスターしたいと思っています。
Windows 98 + Borland C++ Compiler 5.5
で勉強しようと思ってます。

Cの拡張されたものがC++だからC++を覚えようと思って、C++の本を買いました。
・新C++言語入門 ビギナー編 SOFTBANK Publishing 林 晴比古 著
・詳説C++             SOFTBANK Publishing 大城 正典 著
2冊ともまだ最初の方を読んで実...続きを読む

Aベストアンサー

seiji-h さん。こんにちわ。
プログラミングを今後主に何の目的で使いますか?

(1)仕事でC++が必要。
 頑張っておぼえましょう。

(2)文書データの加工など。。。
 今すぐPerl言語に切り替えましょう。

(3)趣味でWindowsアプリなどの作成を目指して。。
 そのままコツコツC++を続けていってください。

(4)歯ごたえのあるプログラミング言語を。。。
 そのままコツコツC++を続けていってください。

>実際どうしたら良いのでしょう。
>何も知らないならC++からでも良いのでしょうか。
どのようなことに興味をおぼえるかで、Cから始めるべきか、C++から始めるべきか
向き不向きがあります。

★簡潔な文法をもとに、ガリガリと自分の思うままに、プログラミングしたい。
とにかく自分で動くものを作りたいということなら、Cから始めるのが向いていると思われます。
★プログラミングすることよりも、プログラミング言語「自体」に興味があって、
一種の研究の対象と考えている場合は、C++の方が、おもしろおかしく学べると思います。

seiji-h さん。こんにちわ。
プログラミングを今後主に何の目的で使いますか?

(1)仕事でC++が必要。
 頑張っておぼえましょう。

(2)文書データの加工など。。。
 今すぐPerl言語に切り替えましょう。

(3)趣味でWindowsアプリなどの作成を目指して。。
 そのままコツコツC++を続けていってください。

(4)歯ごたえのあるプログラミング言語を。。。
 そのままコツコツC++を続けていってください。

>実際どうしたら良いのでしょう。
>何も知らないならC++からでも良いのでしょうか。
...続きを読む

Q【VC++6.0(MFC)】Access Violationの対応の仕方

いつも大変お世話になっております。
VC++初心者です。

現在、VC++6.0(MFC)で先人が作成したソースを改良しています。

デバグモードで動かすと、
以下のメッセージが表示されるのですが、
どのように対応すればよいか、教えていただけませんでしょうか。
「例外処理 (初回) は XXXX.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation」
(※XXXXはプロジェクト名です。)
(※デバグモードで動かすと同時に上記エラーが出力されます。)

上記のエラーが出ていても動かせるのですが、
デバグモード時に、メニューの「デバッグ」、「例外処理」で
「 Access Violation」の設定を
「ハンドルされてなければ停止」から「常に停止」に変更すると、
最初の画面も開けずに、混合モード画面の
7C95AB0A inc dword ptr [eax+10h]
という箇所で必ず止まって、落ちてしまいます。

ここから、どのように対処すればよいか、ご教授頂きたくお願いします。

いつも大変お世話になっております。
VC++初心者です。

現在、VC++6.0(MFC)で先人が作成したソースを改良しています。

デバグモードで動かすと、
以下のメッセージが表示されるのですが、
どのように対応すればよいか、教えていただけませんでしょうか。
「例外処理 (初回) は XXXX.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation」
(※XXXXはプロジェクト名です。)
(※デバグモードで動かすと同時に上記エラーが出力されます。)

上記のエラーが出ていても動かせるのですが、
デバ...続きを読む

Aベストアンサー

申し訳ありませんが、はっきり言って私にはお手上げ状態です。

混合モード画面で落ちた所から、コールスタック?スタックウィンドウ?(関数コールの履歴)を辿って、原因となったコードの箇所を見つければ、先に進むかもしれません。

QVisual C++を使用するには,C++の知識は必要?

Visual C++ を使用する必要が生じたのですが,C言語の知識しかなく,
VC++を使用するにあたり,新たにC++を勉強しなければならないか分かりません。
C++を勉強してから,VC++を勉強し始めるべきなのでしょうか?
また,もしC++の勉強をしなければならない場合,使用する参考書として「独習C++」を考えているのですが,この参考書で事足りるでしょうか?
回答よろしくお願いします。

Aベストアンサー

ANo.1の方に同感です。

私はMS-DOSでのC言語からVC++へジャンプしました。

VC++を理解するということは
 1.C++という言語
 2.windowsOS,API
 3.MFC
を理解するということです。

私のとっかかりの本は、3冊のシリーズで
 1.Windowsプログラミングについて
 2.C++について
 3.MFCについて(だった思う)
に分かれており、C言語の知識とwindowsのアプリを触った経験があれば順を追って素直に理解できるものでした。
#処分してしまったので正しい書籍名はわかりませんが、クリーム色のカバーでした。

ただ、これはあくまで入門書で、その後C++に関する本、MFCに関する本、WIN32APIに関する何冊か読まないと、やはり仕事はできません。

Q【VC++6.0(MFC)】「Out of memory」の対処の仕方を教えてください。

いつも大変お世話になっております。
VC++初心者です。

現在、VC++6.0(MFC)のソース修正を行っております。
そのソースを長時間実行させると、メッセージボックスで
タイトル:ソフト名
メッセージ:Out of memory
と出てきて悩んでいます。
(コンパイル、ビルドは成功しています。)
(そのソフトを立ち上げなおすと、しばらくの間は正常に動作します。)

大変お手数ですが、
この問題を対処する手順や怪しいと思われる箇所を
経験則でも宜しいので教えて頂けませんでしょうか。

Aベストアンサー

ほぼ間違い無く「メモリリーク」でしょうね。

・newしたオブジェクトをきちんとdeleteしているか?
・オブジェクトのポインタを保持する変数に上書きでnewしてないか?
・ヒープメモリの確保と開放(mallocとfree)は正しく行っているか?
・関数を呼ぶたびに生成されるオブジェクトを放置してたりしないか?

などをチェックしましょう。

QC/C++でアプリ開発

C/C++でアプリ開発

いまどきC++でアプリ開発なんてしないのででしょうか。
C/C++を使うのは組み込み分野とかぐらいなんでしょうか?
もし新卒の大学生がC/C++でアプリ開発するならどういう会社に入ればよいでしょうか?

Aベストアンサー

ソフトウェアハウスとかなら今でもC言語が必要になる案件は多いです
Windows向けソフトウェアの受託とか、Linuxアプリケーションとか。

ただ、C言語でそれなりの結果を出している
というわけでは無いのでしたら、
無理してC言語にこだわらない方がいいかもしれません。
Cで開発するだけの自信があるのでしたら、
それ以外の言語の仕事も十分に出来ますし、
そっちの方が仕事が捕まえやすいというのもあります。
それにC言語の仕様の多さは他の言語には類を見ないくらいに大きいですから、
他の言語の仕様を覚えてからでも、十分に役立たせることが出来る。

QVC++ 6.0へのサンプルプログラム(DLL入)のセットの仕方について

Visual C++ 6.0へのサンプルプログラム(DLL入)のセットの仕方について

購入したオシロスコープに、開発者向けサンプルプログラムが添付されています。
それは、Visual C++ 6.0の Win32 console application用のもので、次の4つのファイルです。
PS2000.dll
ps2000.h
PS2000.lib
PS2000con.c
(c++は、普通拡張子が*.cppですが、++機能使ってないようです。)

プログラムファイルが*.c(*.cpp)だけの場合は、空のプロジェクトを作って、そこに*.cを追加して、コンパイルすればよかったと思います。(以前やってたので)

しかし、今回*.dllや、その他のファイルが入ってます。
これらのファイルをプロジェクト(ワークスペース?)に登録する必要があると思うんですが、どうやるんでしょうか。

現在のワークスペースフォルダーの中味は次のとおりです。
(そのままビルド実行した後です。)
D:.
| PS2000.dll
| ps2000.h
| PS2000.lib
| PS2000con.c
| PS2105.dsp
| PS2105.dsw
| PS2105.ncb
| PS2105.opt
| PS2105.plg
|
\---Debug
PS2000con.obj
PS2105.pch
PS2105.pdb
vc60.idb
vc60.pdb


PS2105.plgの内容です。
--------------------構成: PS2105 - Win32 Debug--------------------
</h3>
<h3>コマンド ライン</h3>
一時ファイル "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP46.tmp" を作成し、次の内容を記録します
[
/nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Debug/PS2105.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"D:\C_KIHON\PS2105\PS2000con.c"
]
Creating command line "cl.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP46.tmp"
一時ファイル "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP47.tmp" を作成し、次の内容を記録します
[
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/PS2105.pdb" /debug /machine:I386 /out:"Debug/PS2105.exe" /pdbtype:sept
.\Debug\PS2000con.obj
]
コマンド ライン "link.exe @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RSP47.tmp" の作成中
<h3>アウトプット ウィンドウ</h3>
コンパイル中...
PS2000con.c
d:\c_kihon\ps2105\ps2000con.c(1257) : warning C4101: 'waveform' : ローカル変数は 1 度も使われません。
d:\c_kihon\ps2105\ps2000con.c(454) : warning C4761: 関数の仮引数と実引数のベース型が異なっています。実引数を仮引数の型に変換します。
リンク中...
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_set_channel@20" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_set_ets@16" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000SetAdvTriggerDelay@12" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000SetAdvTriggerChannelProperties@16" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000SetAdvTriggerChannelDirections@24" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000SetAdvTriggerChannelConditions@12" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_get_times_and_values@36" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_stop@4" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_ready@4" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_run_block@20" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_get_timebase@28" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_set_trigger@24" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_get_values@28" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_run_streaming@16" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_get_streaming_values_no_aggregation@40" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_get_streaming_last_values@8" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_run_streaming_ns@28" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_get_unit_info@16" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_set_sig_gen_built_in@40" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_set_sig_gen_arbitrary@44" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_close_unit@4" は未解決です
PS2000con.obj : error LNK2001: 外部シンボル "__imp__ps2000_open_unit@0" は未解決です
Debug/PS2105.exe : fatal error LNK1120: 外部参照 22 が未解決です。
link.exe の実行エラー
<h3>結果</h3>
PS2105.exe - エラー 23、警告 2

よろしくお願いします。

Visual C++ 6.0へのサンプルプログラム(DLL入)のセットの仕方について

購入したオシロスコープに、開発者向けサンプルプログラムが添付されています。
それは、Visual C++ 6.0の Win32 console application用のもので、次の4つのファイルです。
PS2000.dll
ps2000.h
PS2000.lib
PS2000con.c
(c++は、普通拡張子が*.cppですが、++機能使ってないようです。)

プログラムファイルが*.c(*.cpp)だけの場合は、空のプロジェクトを作って、そこに*.cを追加して、コンパイルすればよかったと思います。(以前や...続きを読む

Aベストアンサー

> プログラムファイルが*.c(*.cpp)だけの場合は、空のプロジェクトを作って、
>そこに*.cを追加して

普通のサンプルであればプロジェクトファイルもついてると思うのですが
なかったんですか?  という疑問はおいておいて
ほかのファイルでも基本的には *.c と同じです

ライブラリファイル(*.lib)をプロジェクトに追加すればリンクエラーがなくなって
実行モジュールができるはずです


dllファイルは実行モジュールと同じフォルダに置くか
windows\system32フォルダにおいておくだけでいいと思います
(存在しない場合実行時に読み込みエラーでメッセージが表示されるはずです)

QC++を学習するにあたって

質問は以下の3つですよろしくお願いします

1.vc++ と c++の違いを教えてください。
 vc++は開発環境でc++の画面をプログラミングするときに使うもの
 という認識でいいでしょうか。
2.vc++とc++の開発環境を教えてください。
javaでいうeclipsの様なものまたその開発環境はcやc++やc#でも使えるか否か

3.vc++ や c++ は制御系システムで用い業務系システムでは
 利用しないのでしょうか
 
初歩的な質問で申し訳けありませんがよろしくお願いします。

Aベストアンサー

1.「VC++」とは、マイクロソフト社の「Visual C++」という製品を略したものです。「C++」だけの場合は製品名ではなく、プログラミング言語名です。別に画面特定ではないです。

2.Windows上で一番メジャーな開発環境はマイクロソフト社の「Visual Studio」ですかね。C、C++、C#すべて使えます。
「Visual C++」はVisual Studioの一部です。

3.もちろん業務系でも使われます。アプリケーションやゲームの製作にも一番使われているのではないでしょうか。

QVC++ .Net2003 SDKプログラムからMFCプログラムへの移行

VC++ C初心者です
自社開発した画像形式の画像を表示するViewerを作成する事になり
SDKで開発を進めていましたが、MFCの方が開発効率が
良さそうなので、必要な部分(ファイルからPixcel単位のRGB値を読み書きする処理)を部品化してヘッダファイル・CPPファイルにまとめてMFCフォームへ移行を始めました

開発環境は
VC++ .Net2003です

上司からMFCベースの簡易Viewer「SimpleImage」(多分マイクロソフトのHPから拾って来たソースと思います)
を受け取り、元プログラムの主要な部分を関数にまとめて移行を始めたのですが、

ビルドでエラーが2つ発生して、先に進めなくなりました

〓エラー(1)〓
SimpleImage fatal error LNK1120: 外部参照 1 が未解決です。

〓エラー(2)〓
SimpleImage error LNK2019: 未解決の外部シンボル
"class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >
__cdecl GetUseFicFileName(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)
" (?GetUseFicFileName@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@@Z) が関数 "
public: void __thiscall CChildView::OnFileOpenimage(void)" (?OnFileOpenimage@CChildView@@QAEXXZ) で参照されました。







移行先のメインCPP内部で「私が作ったファイル
(以後、"abc.h"・"abc.cpp"と呼びます)includeを追記してビルドする処までは、問題無かった(ビルドが出来た)のですが、


メインのCPPファイル内で"abc.h"に記載された関数を呼び出そうとすると上記2つのエラーが出力され、先に進めない状況です


多分、ライブラリ等の参照先が上手に行なえていないのかと思っているのですが、初心者で原因が
まるで特定できないので質問させて戴きました


皆様!助言お願いしますm(__)m

VC++ C初心者です
自社開発した画像形式の画像を表示するViewerを作成する事になり
SDKで開発を進めていましたが、MFCの方が開発効率が
良さそうなので、必要な部分(ファイルからPixcel単位のRGB値を読み書きする処理)を部品化してヘッダファイル・CPPファイルにまとめてMFCフォームへ移行を始めました

開発環境は
VC++ .Net2003です

上司からMFCベースの簡易Viewer「SimpleImage」(多分マイクロソフトのHPから拾って来たソースと思います)
を受け取り、元プログラムの主要な部分を関数にまとめて移行...続きを読む

Aベストアンサー

>#include <atlstr.h>

おそらく不要でしょう。


MFCでは、デフォルトでstdafx.hというプリコンパイル済みヘッダを使用しています。
このため、ウィザードで作成分を含む各ソースでは、
#include "stdafx.h"
と、インクルードする必要があります。

個別のcppファイルでライブラリ等のヘッダをインクルードは基本的に行いません。ライブラリのヘッダを追加したい場合はstdafx.hに追記していきます。


人気Q&Aランキング