■過去ログ置き場に戻る■ 1- 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part18
1 名前: ◆Manna2uCLg :2005/04/15(金) 13:33:14
Visual C++入門者・初心者からの質問を、
お兄ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

  質問の仕方については次のページが大変参考になります。
  http://www.hyuki.com/writing/techask.html
  http://www.geocities.co.jp/Beautycare/4965/public/template.html
  http://myu.daa.jp/osiete/

■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
 (MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。

【前スレ】
★初心者にVisual C++を教えるスレ★ Part17
http://pc8.2ch.net/test/read.cgi/tech/1107926989/

過去スレ、関連スレなどは>>2-5ぐらい。

2 名前: ◆Manna2uCLg :2005/04/15(金) 13:34:37
【過去スレ】
Part17 ttp://pc8.2ch.net/test/read.cgi/tech/1107926989/
Part16 ttp://pc8.2ch.net/test/read.cgi/tech/1101022051/
Part15 ttp://pc5.2ch.net/test/read.cgi/tech/1097880265/
Part14 ttp://pc5.2ch.net/test/read.cgi/tech/1093672937/
Part13 ttp://pc5.2ch.net/test/read.cgi/tech/1089011118/
Part12 ttp://pc5.2ch.net/test/read.cgi/tech/1083585833/
Part11 ttp://pc5.2ch.net/test/read.cgi/tech/1077965179/
Part10 ttp://pc5.2ch.net/test/read.cgi/tech/1074933908/
Part09 ttp://pc5.2ch.net/test/read.cgi/tech/1068983609/
Part08 ttp://pc5.2ch.net/tech/kako/1063/10630/1063029371.html
Part07 ttp://pc5.2ch.net/tech/kako/1056/10562/1056280510.html
Part06 ttp://pc5.2ch.net/tech/kako/1052/10529/1052931903.html
Part05 ttp://pc5.2ch.net/tech/kako/1048/10486/1048698321.html
Part04 ttp://pc5.2ch.net/tech/kako/1044/10441/1044196393.html
Part03 ttp://pc5.2ch.net/tech/kako/1038/10381/1038160750.html
Part02 ttp://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
Part01 ttp://pc3.2ch.net/tech/kako/1023/10235/1023530449.html

3 名前:デフォルトの名無しさん :2005/04/15(金) 13:34:57
【関連スレ】
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/l50

Win32API質問箱 Build27
http://pc5.2ch.net/test/read.cgi/tech/1106103119/

鬱だ氏のう DirectX (Part 15)
http://pc5.2ch.net/test/read.cgi/tech/1096649788/l50

C言語なら俺に聞け! Part 101
http://pc5.2ch.net/test/read.cgi/tech/1107128274/

C++相談室 part39
http://pc5.2ch.net/test/read.cgi/tech/1106527792/

C/C++の宿題を片付けます 40代目
http://pc5.2ch.net/test/read.cgi/tech/1107625122/

【初心者歓迎】C/C++室 Ver.13【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1104843249/

4 名前: ◆Manna2uCLg :2005/04/15(金) 13:35:38
【関連サイト】
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/

MSDN ライブラリ
http://www.microsoft.com/japan/msdn/library/

Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

Google
http://www.google.co.jp/

【このスレの前身 VisualC++相談室 過去スレ】
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc5.2ch.net/tech/kako/1036/10368/1036897197.html

5 名前: ◆Manna2uCLg :2005/04/15(金) 13:37:04
過去スレの書き込み時に 「httpが多すぎ」 と警告されちまったので、
h 削ってあります。

6 名前:デフォルトの名無しさん :2005/04/15(金) 13:51:07
>>1


7 名前:デフォルトの名無しさん :2005/04/15(金) 14:03:04
>>1
もつ

8 名前:デフォルトの名無しさん :2005/04/15(金) 17:58:55
質問
class A : public CObject{
virtual void Serialize( CArchive& ar ) ;
}
class B : public CObject{
virtual void Serialize( CArchive& ar ) ;
}

template< typename DATA > class CM : public CObject
{
private:
CMap< int, int ,DATA, DATA > m_map;
public:
virtual void Serialize( CArchive& ar ) ;
}
CM< A > CM_A;
CM< B > CM_B;

template < typename DATA > class CN : public CObject
{
private:
CArray < DATA, DATA > m_array;
public:
virtual void Serialize( CArchive& ar ) ;
}

CN < CM_A > CN_A;
CN < CM_B > CN_B;

9 名前:デフォルトの名無しさん :2005/04/15(金) 18:02:00
このような構成でシリアル化を行いたいのですが
うまくできません。
どのように行えばよいか教えてください。

10 名前:デフォルトの名無しさん :2005/04/15(金) 18:02:28
うまくいかない、を説明するところから始めようか。

11 名前:デフォルトの名無しさん :2005/04/15(金) 18:16:22
各クラスに
DECLARE_SERIAL( A )
IMPLEMENT_SERIAL( A, CObject, 1 )
と記述すればよいと思っていたのですが
DECLARE_SERIAL( CN )
IMPLEMENT_SERIAL( CN, CObject, 1 )
と記入してもコンパイルエラーとなりますよね?
「クラスのテンプレート名で仮引数リストの指定がありません。」といわれます。
どのように記述すればいいのかが分かりません。

初歩的ですみません。。。


12 名前:デフォルトの名無しさん :2005/04/15(金) 18:34:25
全然初歩的じゃない。
これ実現しようとすると果てしなく面倒なことになりそう。
つか不可能かもしれん。

13 名前:デフォルトの名無しさん :2005/04/15(金) 18:56:55
そうなんですか。。。
地道に複数作ったほうが楽かもしれないですね。。。
CMapのArrayをもったクラスをつくりたかったのですが
蚤の脳ではできません。。。

14 名前:デフォルトの名無しさん :2005/04/15(金) 23:15:46
質問なんだけど、.NETにはClassWizardはないのかな?

15 名前:デフォルトの名無しさん :2005/04/16(土) 03:05:04
前スレにぬるぽ貼ったの誰だ

16 名前:デフォルトの名無しさん :2005/04/16(土) 11:15:48
struct A
{ void func(int) {} };

struct B : public A
{
B() { func(0); } // (a)
void func() {}
};

A a;
a.func(0); // (b)

(a)のところで「C2660: 'func' : 関数が不正な 1 個の実引数をともなって呼び出されました」となります。
引数からA::funcが呼ばれることはわかると思うのですが、A::func(0)としてやらなければなりませんでした。
ところが(b)の方はそのまま通ります。
どういう意図でこういうことになっているのでしょうか?

17 名前:デフォルトの名無しさん :2005/04/16(土) 11:43:09
>>16
B::funcがA::funcを隠している。
Bの中にusing A::func;を書いてみろ

18 名前:16 :2005/04/16(土) 11:51:00
>>17
using A::func;を書いたらB::func()の方がC2660で呼べなくなりました。
つかクラス内からはA::funcが隠蔽されて、外からは両方見えるというのはどうしてなのでしょうか?

19 名前:16 :2005/04/16(土) 11:57:18
勘違いでした。
B b;
と書いたつもりが
A a;
となってました。
BのインスタンスからはA::funcは隠蔽されてますね。
失礼しました。

20 名前:デフォルトの名無しさん :2005/04/16(土) 13:15:00
ダイアログベースでランチャーを作っているのですが、どうにも分からないことがあります。
ドラッグされたファイルを受け取って、そのファイルのアイコンをボタンに描画したいと思っているのですが、
アイコンの取得の仕方、描画の仕方はどのようにすれば良いのでしょうか?

HICON hIcon = ExtractIcon(AfxGetInstanceHandle(),path,0); // pathはファイルのフルパス

tipsサイトをうろついていたらこれでアイコンの取得ができるという説明を見かけたのですが、
あっていますでしょうか?
ボタンへの描画についてはオーナードローという方法でやればいいようなのですが、
どうにも要領がつかめませんorz
こうすればいい、というやり方がありましたらよろしくお願いします。

21 名前:デフォルトの名無しさん :2005/04/16(土) 14:11:24
すごく基本的な質問なのでしょうが
VC++でも
.NETであったりMFCであったり空のプロジェクト生成であったりする違いは
ただ単にそれぞれがカバーしているライブラリの範囲の違いという認識であってますでしょうか。
具体的には、MFC使ったら、.NETに収録されてるクラス群は利用できない。
空のプロジェクトを生成した場合、MFC、.NETで使えるクラス群は利用できない。
こういう認識であってますか。

ここ勘違いしてるとかあったら指摘していただけるとうれしいです。

22 名前:デフォルトの名無しさん :2005/04/16(土) 14:18:37
IDEの話でなら雛形ソースの作成の違いだよ。
空プロジェクト作成後にMFC用に自分で全部書いてもいいし

23 名前:21 :2005/04/16(土) 14:22:52
>>22
アドバイスありがとうございます。

>IDEの話でなら
そうです。Visual C++ the Spoke 使ってます。
プロジェクトを生成したら作成されるソースの違いなだけというわけですね。

>空プロジェクト作成後にMFC用に自分で全部書いてもいいし
こうすれば、空プロジェクトを生成してもMFCの提供するクラス群を使うことができると。

24 名前:デフォルトの名無しさん :2005/04/16(土) 17:34:50
リリースモードでコンパイルして実行すると(要はF5キーを押すと、ってことです)、
以下のようなメッセージが出てアプリが実行できません。

シンボル情報なし 
"hoge.exe"にはデバッグ情報が含まれていません(シンボルが読み込まれていません。)
デバッグを実行するにはOKを押してください。

指示通りにOKを押しても、何も反応がなく、アプリも実行されません。
プロジェクトの設定のどこかが変わってしまったためだと思うのですが、これって
どうやれば直るんでしょうか・・・


25 名前:デフォルトの名無しさん :2005/04/16(土) 17:41:45
それはデバッグ実行してるから

26 名前:デフォルトの名無しさん :2005/04/16(土) 20:28:12
統合開発環境で、.NETを選択してプロジェクトを生成したらフォームが作成されて
フォームデザイナを使ってWindowsのインターフェース部分を作りながら、コード書いていく
という便利な作り方ができますが

MFCや、空でプロジェクトを生成した場合、基本的なコードだけが生成されてフォームは
どこにも見当たりません。

フォームデザイナって.NETを選択して生成した場合にのみ使用できるものなのでしょうか。
それとも、MFCや空でもどこかいじればフォームデザイナ使えるのでしょうか。

27 名前:デフォルトの名無しさん :2005/04/16(土) 20:36:22
はぁ?

28 名前:デフォルトの名無しさん :2005/04/16(土) 20:38:04
ひぃ!

29 名前:デフォルトの名無しさん :2005/04/16(土) 20:42:07
MFCで一度もFORM見たこと無い(´・ω・`)

30 名前:26 :2005/04/16(土) 21:52:44
はぁ?とかひぃ!とか >>29 とか言われるということはMFCについて根本的に何か勘違いしてるようですね。
.NETしかいじったことなかったのですが、一通り参考書やり終わったので自分でアイデアを出して
簡単なアプリを作ろうと思ったのよ。

で、そのアプリに、jpeg画像を表示する機能をつけようとしていたところ、CImageというクラスを発見。
ところがCImageは、MFCが提供するクラスらしい。
いつものように.NETを選択してプロジェクトを生成して作り始めたから

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\afxv_w32.h(18):
fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>
こんなエラーが1つ表示されて先にすすめない。
「windows.hは、既にインクルードされてて、MFCアプリには必ずしもwindows.hは必要ない」

windows.h忘れてるよ。なら、つけたせばいいんだろうけど。
必要ないっていっても、ソースコードには#include "windows.h"なんて記述はどこにもないから
削りようもないし、しょうがないから、MFC選択してプロジェクト生成させて1から作り直したら
いいんじゃないかと考え付いたのよ。

ところがいざMFC選択して生成してみたところ、基本的なコードだけが生成されて、フォーム
らしきものは見当たらない。
なので、MFCはフォームデザイナ使えないのか。と思ったわけです。
MFC選択してプロジェクト生成させればCImageクラスがあっさり使えるんじゃないかと思ったのですが。
こういう場合、.NETで使える。別の画像表示クラスを探したほうが早いでしょうか。
CImageは使い方簡単そうだったから採用したんですが。

31 名前:デフォルトの名無しさん :2005/04/16(土) 21:58:24
>>30
他探せw

32 名前:デフォルトの名無しさん :2005/04/16(土) 22:13:26
>>30
おまえが言うフォームに近いものは
ダイアログベースのアプリかもしれない

33 名前:26 :2005/04/16(土) 22:13:25
CImageクラスは
#include "atlimage.h"
#include "afxwin.h"
をインクルードして

CImage img;
img.Load("sample.jpg");
CDC *pDC = CDC::FromHandle( img.GetDC() );
cdc.BitBlt( 0, 0, img.GetWidth(), img.GetHeight(), pDC, 0, 0, SRCCOPY );
img.ReleaseDC();
書いて、上のレスに記述したエラーが発生。

しょうがないから、他を探すということで
http://wisdom.sakura.ne.jp/system/msnet/msnet_win13.html
を参考に

Graphics g = e.Graphics;
Image img = new Bitmap("sample.jpg");
g.DrawImage(img , 0 , 0);

に書き換えたけど、なんとこれも上のレスに記述した同じエラーが発生した。

public static void Main(string[] args) {
Application.Run(new WinMain());
この部分の記述がいるのか。
Graphics g = g.Graphics;の部分はFormメソッドの外に書かれてる。
メニューの開くを押したら表示されるようにしたいのに(T T)
クラス発見しても全然使いこなせない。基本的なことがどうも消化しきれてないっぽい。
悔しい。

34 名前:デフォルトの名無しさん :2005/04/16(土) 22:20:38
というか中途半端に手を出さずに
基本から勉強した方がいいんじゃないだろうか

35 名前:26 :2005/04/16(土) 22:33:20
皆さんどうもアドバイスありがとう。
>>32
他の件でググって読んだページにたまたまMFCに関する記述が書いてあることがあって
そういえばMFCの記述があるところにダイアログベースがどうのとか書いてあった記憶がある。

MFCでプロジェクト生成するとダイアログベースのアプリしか作れないということなのかな。
単に画像表示させるだけのアプリだから、ダイアログで十分だなとは思うけど。
もうわけがわからなくなってきた。
開発環境の操作方法を勉強しながらアプリも1本作るという内容の参考書を一通りやって
さあ、自分で作ってみるぞと思ったものの。
用意されてるクラスを使うだけでもこの有様だから。
C++は、.NETとかMFCとかややこしい。
ここらへんもっとつっこんで勉強したほうがいいかもと思った。
ググって見つけたサンプルコードそのままコピペしても必ずといっていいほどエラーがでる。

http://wisdom.sakura.ne.jp/system/msnet/index.html
の解説も.NETだけど。よくみたらフォームとか部品を自分で記述してるし。
.NETって書いてるから、これ参考にしたら解決するだろうと思ったのに(T T)
フォームデザイナで部品を自分でフォームにドラッグしていってちょちょいと作ってって方法で
やったから。他の手法で作ったものを参考にしても自分のアプリに応用できない。

>>34 さんがいうように、自分で考えたアプリを作ってみるという段階じゃないのかも。
統合開発環境の操作覚えて、MSDNやgoogleで欲しい機能を実現できるクラスを探して、使い方見て
自分のアプリのコードに貼り付ければいけると思ったのに(T T)

36 名前:デフォルトの名無しさん :2005/04/16(土) 23:14:40
まずは.NETとWin32との関係について勉強しよう

37 名前:26 :2005/04/16(土) 23:27:33
>>36
どこらへんを勉強すればいいのか親切に教えてくれてありがとう。
実は、とはいってもどこらへんから優先的に学習すればいいの?という疑問がわいてたので

38 名前:デフォルトの名無しさん :2005/04/16(土) 23:30:57
RADできるのは、リソースで管理できる範囲だけ。
したがって、ダイアログはドラッグアンドドロップで作れるが、
それ以外のwindowアプリケーションは、コード書くしかない。
そういう仕様。

39 名前:デフォルトの名無しさん :2005/04/16(土) 23:39:05
26は、C# .NET のほうが向いている。絶対。

40 名前:26 :2005/04/17(日) 00:11:49
皆さんどうもアドバイスありがとう。

>>38
MFCや空だと、どこ探してもフォームデザイナ使えないと思ったら仕様なんですね。
そもそも、GUI部品をゴリゴリコード書くのが面倒くさいから、統合開発環境買ったという
いきさつがあるので。どうしてもGUI部品を楽に作りたいと思ったら.NET使うしかないということか。

>>39
今回の件でC++って、.NET MFC とかいろいろあって覚えるまでがちょっと大変とわかった。
C#って.NETだから、一度どれかの参考書なりサイトでマスターしてしまえば
クラス調べるときに、C++のように、これはMFCの提供するクラスだから…、とか
これは空で作ったものっぽいから…。とかいちいち考える必要ないだろうなとは思う。
自分の考えたアプリが完成すればいいわけだから、完成は早いにこしたことはないし
作りやすいにこしたことないし、調べやすいにこしたことはないと思う。
C#がそれを満たしてくれる言語なのかは、やってみなければわからない部分はあると思うけど。
>>39 さんの。向いている。「絶対」と。指摘してくれてるわけだから
使用言語をC#に変えてみようかと思います。C#の方が作る過程もスマートなんじゃないかと
思えてきた。

41 名前:デフォルトの名無しさん :2005/04/17(日) 01:13:59
>GUI部品をゴリゴリコード書くのが面倒くさい
ならC#かVBがいいかと

42 名前:26 :2005/04/17(日) 12:56:27
>>41
アドバイスありがとう。
VBも.NETになってからそこのところがどうなったかはわかりませんが
VBはかゆいところに手が届かなそうといったイメージがあるのでC#にします。

43 名前:デフォルトの名無しさん :2005/04/17(日) 18:02:02
>>42
つ[ Delphi ]

44 名前:デフォルトの名無しさん :2005/04/17(日) 18:20:37
プログラム童貞ですが、まず何からしたらいいでしょうか?

45 名前:デフォルトの名無しさん :2005/04/17(日) 20:24:04
>>44
剥けているかいないか、それが問題だ。

46 名前:デフォルトの名無しさん :2005/04/17(日) 21:52:55
あるメニューボタンを押したら、そのウィンドウを常に前面に
表示させるようにするプログラムを作りたいのですが、
どのように作ればよいのか、アドバイスお願いできませぬでしょうか・・・

47 名前:デフォルトの名無しさん :2005/04/17(日) 22:45:52
対象のウィンドウにSetWindowPosでいけるんじゃないかい?
MDIの場合はダメかもわからんです。

48 名前:デフォルトの名無しさん :2005/04/17(日) 22:57:01
>>47さんのお陰でいいサンプルも見つかりました。
ありがとうございました m(_ _)m

49 名前:デフォルトの名無しさん :2005/04/18(月) 02:00:58
2色しか使っていないビットマップをインポートしても
ビットマップは正しくインポートされましたが、ビットマップは256色以上含んでいるためビットマップエディタへ読み込めません
と出るのですが、どういうことでしょうか?表示はできるみたいなんですが・・・
また、リソースビットマップの透過はどうやるのでしょうか?

50 名前:デフォルトの名無しさん :2005/04/18(月) 07:02:46
DLLにある関数をしょっちゅう使いたい場合でも
やっぱり使う直前に::LoadLibrary()して、使い終わったら即::FreeLibrary()しなきゃ
なりませんか?
自前のアプリの初期化関数(OnInitDialog()とか)でLoadLibrary()してから
メンバ変数に関数ポインタせっとしてメソッドで使いまくり、終了するときに
OnDestroy()で解放できたらオーバーヘッド軽くなりそうな気がするんですが。

51 名前:デフォルトの名無しさん :2005/04/18(月) 08:24:15
>>50
使う直前にLoadLibraryして、使い終わったら即FreeLibraryなんて、誰に教わったの?

プロセス内で最初に1回LoadLibraryしたら、それっきりでいい。
FreeLibraryはしなくてもいい。
それで問題があるようなら、そのDLLの作りのほうがマズイよ。


52 名前:51 :2005/04/18(月) 08:24:40
というか、面倒くさいから、インポートライブラリ使えばいいと思う。

53 名前:デフォルトの名無しさん :2005/04/18(月) 09:44:51
>>49
保存されてるパレットが256色以上になってるんじゃない?
そのビットマップのプロパティを見ると分かるんじゃなかったかな。

54 名前:デフォルトの名無しさん :2005/04/18(月) 13:12:10
メニューアイテムのenable、disableを切り替えるにはどうすればいいですか?

55 名前:デフォルトの名無しさん :2005/04/18(月) 15:18:06
VC++.NET使ってるんですが
VC++6とまったくインターフェースに互換性がなくて困ってます(なんですかソルーションて)
デフォルトのコンパイル/リンクオプションはどこで設定すればいいんでしょうか
また、プロジェクト専用のオプションはどこで設定すればいいんでしょう

教えてください


56 名前:デフォルトの名無しさん :2005/04/18(月) 16:08:47
>>55
とりあえず1時間くらい、いじりまわせ。

57 名前:デフォルトの名無しさん :2005/04/18(月) 16:15:35
もう一週間以上いじってます
なんかIE触ってるみたいで気持ち悪いです…
汎用性ばかり重視して操作性を削るってなに考えてるんだMSは…



58 名前:デフォルトの名無しさん :2005/04/18(月) 16:32:11
一週間もいじってて未だにリンクオプションすら
見っけられないってちょっとおかしいぞ。

ホントにVC++6使ってのか?
俺も最初は戸惑ったけど、すぐに分かったぞ。

59 名前:デフォルトの名無しさん :2005/04/18(月) 16:38:33
慣れれば、.NETのほうが使いやすい

60 名前:デフォルトの名無しさん :2005/04/18(月) 17:02:41
プロジェクトごとのオプションは見つけたんですけど
チェックボックスとかじゃなくて手打ちなんですがそれで正解ですか
プロジェクト作るたびにわざわざ/I とか /MTとか打ちたくないんです
インクルードパスなんて決まってるしマルチスレッドアプリしか作らないし


61 名前:デフォルトの名無しさん :2005/04/18(月) 17:07:32
本当にVC使っているのか甚だ疑問に思えてきた・・・

62 名前:デフォルトの名無しさん :2005/04/18(月) 17:33:07
>>55
たぶんそれパチモノ。

63 名前:デフォルトの名無しさん :2005/04/18(月) 17:36:07
まじで!?
学校に入ってるやつですよ

64 名前:デフォルトの名無しさん :2005/04/18(月) 19:00:30
促されるようにVC++.NETを導入したんですが、ちょっと教えてください。
Cの勉強で最初に作るようなごくごく簡単な(Hello,worldの表示)プログラムをCで組みたいのですが
プログラムに間違いは無いにも拘らずエラーが出てビルドできません。

実行するビルド コマンド ラインがありません。
メイクファイル プロジェクト動作を実行しています。
[プロジェクト名] : error PRJ0003 : ' の起動中にエラーが発生しました。

実行するビルドコマンドラインがありません。
↑ここが問題なのは分かっているのですが、どう対処して良いのか分かりません。
どなたか教えていただけないでしょうか。

65 名前:デフォルトの名無しさん :2005/04/18(月) 19:10:31
ビルドコマンドラインを設定しろ

66 名前:デフォルトの名無しさん :2005/04/18(月) 19:33:02
ボタンコントロールにドラッグアンドドロップしたいのですが、どうしたらいいか分からないです。
新規に『CButton』を継承したクラス『CMButton』を作成、そこにWM_DROPFILESをインプリメント(?)して、
ダイアログクラスにCMbutton型のオブジェクト『m_Button』を宣言。
そしてダイアログクラス内の『OnInitDialog()』で『m_Button.SubclassDlgItem(IDC_MBUTTON,this)』
を実行して、サブクラス化してみたのですが、
起動直後に『wincore.cpp』内の『ASSERT(FromHandlePermanent(hWndNew) == NULL);』の所でエラーが出ます。
なので『WindowProc』をオーバーライドして、『WM_CREATE』が送られたときにサブクラス化してみると、
エラーは出なくなったものの、ドラッグしても『CMButton』の『OnDropFiles』が機能しません。
お助けください…orz

●ヘッダファイル
class CMButton :public CButton
{
public:
CMButton(void);
~CMButton(void);
protected:
//{{AFX_MSG(CMButton)
afx_msg void OnDropFiles(HDROP hDropInfo);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
●cppファイル
BEGIN_MESSAGE_MAP(CMButton, CButton)
//{{AFX_MSG_MAP(CMButton)
ON_WM_DROPFILES()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMButton::OnDropFiles(HDROP hDropInfo)
{


67 名前:デフォルトの名無しさん :2005/04/18(月) 20:51:49
DragAcceptFiles

68 名前:66 :2005/04/18(月) 21:11:35
>>67
レスありがとうございます。
書いていませんでしたが、 DragAcceptFiles() はダイアログクラス内の OnInitDialog() で宣言しています。
ボタンコントロールのプロパティの Accept Files も試してみましたが、どちらも機能しませんでした。
というかドラッグの受付自体は機能しているんですが、受け付けた後の
void CMButton::OnDropFiles(HDROP hDropInfo)
の処理が機能していないのです。


69 名前:デフォルトの名無しさん :2005/04/18(月) 21:11:57
MessageBox()でメッセージを出したいのですが、
親クラスを指定しない場合はNullにするとあったので
MessageBox(Null,"失敗しました","error",MB_ICONERROR | MB_OK);
としたのですが、4つの引数を持つことはできませんと言われてコンパイルエラーとなります。
Nullは定義されていないのかと疑って
MessageBox(,"失敗しました","error",MB_ICONERROR | MB_OK);
MessageBox(\0,"失敗しました","error",MB_ICONERROR | MB_OK);
MessageBox(0,"失敗しました","error",MB_ICONERROR | MB_OK);
と試しましたがいずれもダメでした。
調べたところ引数は4つのハズなのですがどこがどう間違っているのでしょうか?


70 名前:デフォルトの名無しさん :2005/04/18(月) 21:14:22
>>69
::MessageBox(NULL, TEXT("失敗しました"), TEXT("error"), MB_ICONERROR | MB_OK);

71 名前:デフォルトの名無しさん :2005/04/18(月) 21:46:31
>>69
MSDNライブラリでキーワード「MessageBox」を見れば、すぐわかるものを・・・。

72 名前:デフォルトの名無しさん :2005/04/18(月) 21:52:28
> MessageBox(0,"失敗しました","error",MB_ICONERROR | MB_OK);

これ通るだろ

73 名前:デフォルトの名無しさん :2005/04/18(月) 22:33:45
>>72
CWnd::MessageBoxってオチだろ。

74 名前:デフォルトの名無しさん :2005/04/18(月) 22:57:03
一応MSDNで調べてみて上記のような状態になってしまったので
質問させて頂きました。
MessageBox(0,"失敗しました","error",MB_ICONERROR | MB_OK);
ではやはり引数が4つでエラーとなります

解決策としては第一引数を完全に省くことで何故かできました。

CWnd::MessageBox
CWndに定義されているmessageBOxとそうでないものがあるようですね
調べてみます
どうもです

75 名前:デフォルトの名無しさん :2005/04/18(月) 23:16:22
Microsoft も紛らわしいモノを作ってくれたもんだ

76 名前:デフォルトの名無しさん :2005/04/19(火) 00:35:17
>>74
なんでMSDNで調べたのにわからないの?

MessageBoxを見ようとすると、候補がずらずらと出てくるじゃないか。
Win32API、MFCのCWnd、MFCのCWindow、WFC、などなど。

自分が呼んでいるMessageBoxが、いったい何なのかくらい、把握しとけって。
つーか、C++わかってないだろ。VC++以前の問題だよ。

普通は、>>70さんの書き込みで理解できるぞ。

77 名前:デフォルトの名無しさん :2005/04/19(火) 01:21:18
>>76
一応ここは初心者スレだぞ

78 名前:デフォルトの名無しさん :2005/04/19(火) 01:39:20
いや いいんです
Win32API、MFCのCWnd、MFCのCWindow、WFC、などなど
があることがわかっただけでも収穫でした

Javaで簡単なiアプリを作ってただけだったのでcとwindowsAPIを
平行してやっているのですが、なかなか厳しいのが現状です

79 名前:デフォルトの名無しさん :2005/04/19(火) 02:58:06
初心者にVisual C++を教えるのであって、C++を教えるのではない。



80 名前:デフォルトの名無しさん :2005/04/19(火) 02:59:16
MFCがWin32APIと同じ名前のメソッドを持ってるのはVisual C++の話だろ。

とはいえ、::の意味を知らない質問者にも困るが・・・。

81 名前:デフォルトの名無しさん :2005/04/19(火) 03:47:20
どうでもいいけど::←見えにくいな
::CreateWindow←だからって初心者スレらしく全角でもいいが
コピペして動かないとか言われても困るか…

82 名前:デフォルトの名無しさん :2005/04/19(火) 11:01:09
LoadLibraryしてGetProcAddressして得たC++関数を呼ぶ(実行する)には
どうしたらいいですか?
例えば ?OpenSoftkeyPallete@@YAPAUHWND__@@PAU1@@Z の場合。

83 名前:デフォルトの名無しさん :2005/04/19(火) 11:08:19
関数のアドレスが取得出来たって事は
その関数の呼び出し方法に則って呼び出せば良いだけじゃない?

84 名前:デフォルトの名無しさん :2005/04/19(火) 16:09:27
本来 return msg.wParam を返すとかなってますが、
エラーが起こったときは、return 1 じゃなくて、return 0 で良いのでしょうか?

85 名前:デフォルトの名無しさん :2005/04/19(火) 19:39:41
>>84
何の話だ?

86 名前:デフォルトの名無しさん :2005/04/19(火) 21:06:27
VisualStudio.NETtheSpokePremiumを買って、初めてVisual C++.NETを使おう
と思うのですが、何から始めていいのかわけがわかりません・・・
C++の入門書とVisualC++.NETの入門書一体どっちを買えばいいのですか?


87 名前:デフォルトの名無しさん :2005/04/19(火) 21:22:12
NETの入門書でも買ってまずはHelloWorldから始めましょう。

88 名前:デフォルトの名無しさん :2005/04/19(火) 21:28:08
>>87
でも、.NETの本ってC++がある程度わかった人向けのような気がする
のですが、気のせい?

89 名前:デフォルトの名無しさん :2005/04/19(火) 21:36:56
そう思うなら実際本屋さんへ行って確かめてみた方がいいかも。

90 名前:デフォルトの名無しさん :2005/04/19(火) 21:41:40
>>89
C++の本ではなく.NETの本じゃないとなにか困るんですか?

91 名前:デフォルトの名無しさん :2005/04/19(火) 21:45:58
いやそういう意味じゃなく両方の本を比べてみたらって事。
NETの入門書の最初の方をみて書いてある内容自体何がなんだか
サッパリならC++の入門書を買ったほうが良いだろうし。

92 名前:デフォルトの名無しさん :2005/04/19(火) 21:55:13
.NET本のほうはIDEの使い方も一緒に載ってるんじゃない?
俺はvcvars32.batを利用してコマンドラインから使ってる。

ところで、どこかにVCのデバッガの解説サイトって無いですか?

93 名前:デフォルトの名無しさん :2005/04/19(火) 21:59:46
>>92
解説の必要があるのかどうか・・・

94 名前:デフォルトの名無しさん :2005/04/19(火) 23:03:46
>>93
詳しく

95 名前:デフォルトの名無しさん :2005/04/19(火) 23:06:45
ヘルプで十分という事じゃないかと

96 名前:デフォルトの名無しさん :2005/04/19(火) 23:25:20
プログラムを覚えたいんですが、なにから始めたらいいでしょうか・・・


97 名前:デフォルトの名無しさん :2005/04/19(火) 23:28:17
とりあえず、そんな質問をしないようになればいいと思う

98 名前:デフォルトの名無しさん :2005/04/20(水) 00:24:15
>>96
なんで?

99 名前:デフォルトの名無しさん :2005/04/20(水) 01:04:53
>>86
C++の初心者ならC++の入門書
VC++.NETの初心者ならVC++.NETの入門書
どちらも初心者なら、両方の入門書をそれぞれ。

C++はプログラム言語
VC++.NETは処理系

この違いを区別せず、一度にやりましょう、という本もあるけどね。

100 名前:デフォルトの名無しさん :2005/04/20(水) 16:02:23
質問です。環境は XP、VC++ 6.0 です。

MFC を使って組んでいます。
実行中に 「半角/全角」を押すと、辞書がONになり、
キーを押したときの処理を奪われてしまいます。
(生成したウィンドウの左上に打った文字が出てくる)
これを回避するにはどうすればいいでしょうか。
「半角/全角」を押しても辞書がONにならないように……。

よろしくお願いします。

101 名前:デフォルトの名無しさん :2005/04/20(水) 16:24:53
キーボードの設定を変える

102 名前:デフォルトの名無しさん :2005/04/20(水) 16:29:18
>辞書がONになり

?辞書?


103 名前:デフォルトの名無しさん :2005/04/20(水) 16:36:21
>>100
「プリプロセッサの定義」に「WINVER=0x040A」を追加

#include <imm.h>
#pragma comment(lib,"Imm32.lib")

ImmDisableIME(0);



104 名前:デフォルトの名無しさん :2005/04/20(水) 17:09:26
>>101-103

IME をキーに調べればよかったんですね。
正常に動きました、ありがとうございました。

105 名前:デフォルトの名無しさん :2005/04/20(水) 17:13:41
VC++.netでコンパイルする際にアセンブラコードを生成させたいのですが、どうやったらよいのか分かりません。
どなたか知ってる方居ましたら教えていただけないでしょうか。

106 名前:デフォルトの名無しさん :2005/04/20(水) 17:19:42
>>105
プロジェクトのプロパティなどで、出力だかなんだかのタブにあるコンボボックスで
「アセンブラのみ」などを選択すればいい。

107 名前:デフォルトの名無しさん :2005/04/20(水) 17:26:58
>>106
見つけることが出来ました。ありがとうございます。

追加なのですが、コマンドラインから実行する際にもオプションで出来るのでしょうか?

108 名前:デフォルトの名無しさん :2005/04/20(水) 17:38:49
ついさっきインストールしたんだがソース窓に行がデフォルトで表示されて無いのな
小一時間探してるんだがみつからねorz
たしけてorz

109 名前:108 :2005/04/20(水) 17:42:45
書き忘れ .NETです

110 名前:デフォルトの名無しさん :2005/04/20(水) 17:45:20
>>108
ツール->オプション->テキストエディタ

111 名前:110 :2005/04/20(水) 17:47:57
->(Cなら)C/C++ ->全般

112 名前:108 :2005/04/20(水) 17:49:42
即レスThx
これがないとなんだか気持ち悪い…

113 名前:デフォルトの名無しさん :2005/04/20(水) 18:45:06
うげ、あると気持ち悪いんだが。
もしかして、ROM-BASICでauto使う気分なんだろか。

>>107
設定画面をよく見よう。設定の脇に(/FA)とか書いてないか?

114 名前:105 :2005/04/20(水) 19:35:23
>>113
/FAありました。とても助かりましたありがとうございました。

115 名前:デフォルトの名無しさん :2005/04/20(水) 19:42:10
VC++.net 2003で使えるクラスで、DelphiのTBitmapのScanlineのように、
ビットマップダンプイメージをポインタでそのまま操作できる画像表示クラスはありますか?


116 名前:デフォルトの名無しさん :2005/04/20(水) 20:01:56
Delphiスレで聞けば?

117 名前:デフォルトの名無しさん :2005/04/20(水) 20:31:58
それはどうなんだろうか

118 名前:デフォルトの名無しさん :2005/04/20(水) 20:45:18
>>115
無い。
DirectdrawのBltFastメソッド使え。

119 名前:デフォルトの名無しさん :2005/04/21(木) 13:41:26
VC++.NET2003でビルドしたものをデバッグ実行したら、

>HEAP[○○.exe]: HEAP: Free Heap block 3e61d0 modified at 3e61f8 after it was freed

このようなエラーが出ました。解放済みメモリにアクセスしたのが悪いのは
わかりましたが、それがソースプログラムのどの部分が原因で起こっているのかを
どうやって探せばいいのでしょうか?
VS上の呼び出し履歴では ntdll.dll!7c989d18() のようなものばかり並んでいるので、
どのクラス・関数でこのエラーが起きたのかもわかりません。
ソースは300ファイルぐらいありますので、「怪しいところをよく眺めて見る」という
対処法ではとても苦しいです。
合理的な検出が出来るようなツールの使い方もしくは検出テクニックを
教えていただけたらありがたいです。

なお、STLport4.6.2,boost1.32を使用しています。

120 名前:デフォルトの名無しさん :2005/04/21(木) 13:54:58
ここは「初心者に〜教えるスレ」ですよ

121 名前:デフォルトの名無しさん :2005/04/21(木) 14:42:48
>>119
free()を検索して、引き数をその直後でNULLにしておく。
Ex.
free(foo);→free(foo);foo = NULL;
まともなエディタを使えば一気に全部置換できるからそんなに手間でもなかろう。
#VisualStudioしか使えない? がんばってね。

122 名前:デフォルトの名無しさん :2005/04/21(木) 15:45:43
c++にもtryブロックがあると聞いたのですが。
tryが認識されません。
設定の例外処理もちゃんと有効にしているのですが。
もしかして、なにかincludeしないといけないのでしょうか?
ちなみに私はVCコンソールアプリケーションでやっています。

123 名前:デフォルトの名無しさん :2005/04/21(木) 15:49:15
>>122
>tryが認識されません。
具体的に。エラーメッセージが出たのならコピペ。

124 名前:デフォルトの名無しさん :2005/04/21(木) 15:49:25
MSDN、C++入門書などを読んで、構文を先ず理解してください。

#ただ「tryが認識されません」と書かれても、あなたがどんなコードを書いたのか誰にもわかりませんから。

125 名前:デフォルトの名無しさん :2005/04/21(木) 15:52:11
>>123
error C2065: 'try' : 定義されていない識別子です。
上記のエラーが出ました

126 名前:デフォルトの名無しさん :2005/04/21(木) 16:02:25
>>125
まずは該当部分を貼り付けろ。

127 名前:デフォルトの名無しさん :2005/04/21(木) 16:05:03
>>126
コードがかなり長いので一部のみ
printf("\t文字を入力してください(zで終了):");
try{
gets(str12);/*値を取得してstr12に格納*/
}catch(...){
printf("エラー");
}

128 名前:デフォルトの名無しさん :2005/04/21(木) 16:24:07
連レスすみません。
上記のコードでは一部過ぎてわからないと思うので全部の関数を丸ごと載せます。
長いので2回に分けて記述します
void mo12(void){
char str12[5]={0};/*結果を入れてもらう変数*/
int strbl;/*strlenghtの結果を入れる為の変数*/
putchar('\n');
for(;1;){
printf("\t文字を入力してください(zで終了):");
try{
gets(str12);/*値を取得してstr12に格納*/
}catch(...){
printf("エラー");
break;
}


129 名前:デフォルトの名無しさん :2005/04/21(木) 16:25:13
連レスすみません。
上記のコードでは一部過ぎてわからないと思うので全部の関数を丸ごと載せます。
長いので2回に分けて記述します
//str12[0]='z';
strbl=strlen(str12);//文字の最大数を測定
//元の値の表示
if(strbl>5){er=-3;error1(&er);break;}
putchar('\t');
for(i=0;i<strbl;i++){printf("%X ",str12[i]);}
printf("が入力されました\n\t");
for(count=0;count<strbl;count++){
er=mondai12(str12,count);/*文字をHEXコードに変換し、上位ビットと下位ビットを入れ替える関数*/
if(er<0){/*エラー処理*/error1(&er);}else{
//結果の表示
if(count==0){/*最初のみ表示*/printf("上位ビットと下位ビットを入れ替えると");}
printf("%X ",er);
}
}
printf("\n\n");
for(count=0;count<strbl;count++){/*大文字か小文字のzを検索該当する値があれば-5をerに代入*/
if(str12[count]==0x7a||str12[count]==0x5a){
er=-5;}
}
if(er==-5){break;}
}
}

130 名前:デフォルトの名無しさん :2005/04/21(木) 16:27:18
Cとしてコンパイルしている悪寒。

131 名前:デフォルトの名無しさん :2005/04/21(木) 16:28:28
ここC++のスレじゃないから
C++の質問はC++のスレへどうぞ


132 名前:デフォルトの名無しさん :2005/04/21(木) 16:31:22
>>131
このスレではないのなら別のスレで聞いてきます。
ありがとうございました

133 名前:デフォルトの名無しさん :2005/04/21(木) 16:39:21
>>132
移動するならこっちとか。
C++相談室 part40
http://pc8.2ch.net/test/read.cgi/tech/1113408957/


ソースの拡張子が*.cになってたりしないか?

134 名前:デフォルトの名無しさん :2005/04/21(木) 16:48:45
>>133ソースの拡張子は.cになってます(汗

135 名前:デフォルトの名無しさん :2005/04/21(木) 16:50:51
>>134
それじゃc++の機能が使える分けないじゃん。
*.cppに変えてもう一回試してみ。

136 名前:デフォルトの名無しさん :2005/04/21(木) 16:55:55
>>135
.cppに変えたら機能しました。
教えていただきありがとうございました。

137 名前:デフォルトの名無しさん :2005/04/21(木) 18:04:00
なんでこんな初心者が涌いてくるんだ?

138 名前:デフォルトの名無しさん :2005/04/21(木) 18:04:45
初心者スレだった・・・


139 名前:デフォルトの名無しさん :2005/04/21(木) 18:45:19
>>119
VC++に関係ない一般的なC言語での話は>>121さんがしてくれてるので、
私はVC++に特化した、より便利な方法を紹介します。

VC++にはデバッグ ヒープというものがあります。
そのようなエラーメッセージが出るのは、
問題を発見するためのデバッグ ヒープのメカニズムがうまく働いたからです。

まずは、MSDNライブラリで、
_CrtSetDbgFlag関数や、それに関連したところをあちこち読んでください。

具体的なやり方ですが・・・

そのエラーメッセージは、無効なヒープに書き込みの形跡があるかチェックした時に出ます。
チェックを行うのは、通常は、プログラムの終了時です。
(なので、その時のコールスタックを見ても、問題箇所はわかりません。)

そこで、
_CrtSetDbgFlag関数で_CRTDBG_CHECK_ALWAYS_DFを指定するか、
_CrtCheckMemoryをあちこちに挿入するなどして、
プログラム実行中に、ヒープのチェックをさせます。

そうすることで、どこまではチェックでエラーが出ず、
どこまで行くとチェックでエラーがでるかで、問題の範囲を絞りこむことができます。

便利のために、すべての関数の入り口と出口に、
FUNC_IN(funcname)、FUNC_OUT(retvalue)、といったマクロを仕込んでおくと、
いざという時に、チェックルーチン呼び出しを容易に仕掛けることができますよ。

ちなみに、毎回同じアドレスになるなら、デバッガでブレークポイントを張れば、
すぐに、そのアドレスに書き込んでいる箇所を発見できるかもしれません。

140 名前:121 :2005/04/21(木) 18:47:43
>>139
( `・ω・´)参考になった♪

141 名前:139 :2005/04/21(木) 18:49:20
補足

VC++自体に、メモリリークやヒープエラーの検出機能があるわけだけど、
それを使うのが面倒ならば、
CompuwareのBoundsChecker
のようなツールを使うと、ソースコードに手を入れずに、
同じような検出をしてくれます。

BoundsCheckerは単体売りもあるけど、他のツールとセットになったもののほうがお買い得。
無償バージョンアップの年間保守料金もあるけど、そんなにバージョンアップしないので、
毎回買うのと同じか、かえって高くつくので、予算計画が立てやすい以外にはメリットないかも。

142 名前:139 :2005/04/21(木) 19:07:37
補足

もちろん、freeしたポインタをNULLにしておくのは、ぜひやるべきです。
さっくりNULLポインタ例外で問題箇所を発見できる可能性が高いですから。

問題は、ポインタをコピーして覚え続けている人がいる、ということです。
そういう場合に、デバッグ ヒープが必要になるんです。

143 名前:デフォルトの名無しさん :2005/04/21(木) 19:08:13
ぬるぽおぉ

144 名前:デフォルトの名無しさん :2005/04/21(木) 19:20:40
■━⊂( ・∀・) 彡 ガッ☆`Д´)ノ

145 名前:デフォルトの名無しさん :2005/04/21(木) 21:43:01
#define free(p) (free(p), (p) = 0)

146 名前:デフォルトの名無しさん :2005/04/21(木) 22:32:39
>>138 (´゚c_,゚` ) プッ

147 名前:デフォルトの名無しさん :2005/04/22(金) 00:00:46
ifstreamのgetline()を使ってファイルを一行ずつ読み取りたいんですが、
一度に読み込むバッファ長を越えた行を読み込むと、eof()がきちんと認識されないみたいなんです。
例えば・・・

const int BUFLEN = 10;
char buf[BUFLEN];

ifstream file("hoge.txt");

while ( file.eof() == false )
{
  file.getline(buf, BUFLEN);
  cout << buf << endl;
}

↑では、10文字を越える文字数を読み込むと、その後は無限ループになってしまいます。
BUFLENを1000などの大きめの数字にしとけば問題ないですが・・・
これってgetline()の仕様なんでしょうか?


148 名前:デフォルトの名無しさん :2005/04/22(金) 01:01:55
無料でダウンロードできるVisual C++ Toolkitと
市販のVisual C++はどう違うんでしょうか?

149 名前:デフォルトの名無しさん :2005/04/22(金) 01:32:12
IDEが付くか付かないか

150 名前:デフォルトの名無しさん :2005/04/22(金) 01:35:54
ATLとかMFCとかも

151 名前:デフォルトの名無しさん :2005/04/22(金) 09:37:20
>>147
C++スレで教えてもらえば?

152 名前:デフォルトの名無しさん :2005/04/22(金) 11:18:40
オーバーロードをしたいのですがうまくいきません、なぜでしょうか?
エラーは、'func' : 2 のオーバーロードは 1 番目の引数を 'char' から要求の型に変換できません。(新しい機能 ; ヘルプを参照)
と出ています
コードが長い為一部省略します
#include<stdio.h>
#define RESULT_OK 0
int main(void){
 char str3_1=61;
 char str3_2=62;
 func(str3_1,str3_2);
}
char func( char *buffp ){
char cnt=0;
cnt++;
return cnt;
}
char func( char *destp, char* srcp ){
char rtn = RESULT_OK;

return rtn;
}


153 名前:デフォルトの名無しさん :2005/04/22(金) 11:36:52
>>152
うまくいってないのはオーバーロードじゃない。
char* 型の引数に char を指定して一体何をやりたいのかと。

154 名前:デフォルトの名無しさん :2005/04/22(金) 11:38:58
>>153
すみません、一部訂正します。
func(str3_1,str3_2);

func(&str3_1,&str3_2);

155 名前:デフォルトの名無しさん :2005/04/22(金) 11:53:06
>>152 154
C++スレで教えてもらえば?


156 名前:デフォルトの名無しさん :2005/04/22(金) 11:57:23
>>155 ここではだめですか?
ある意味初心者的な質問だと思うのですが。

157 名前:デフォルトの名無しさん :2005/04/22(金) 12:03:22
>>156
ここでもいいけど、先ずはそのアホさ加減を何とかしてくれ。

>152のエラーメッセージでは、引き数がcharだと言っている。
実際コードもfunc(str3_1,...でcharを渡している。
ところが>154ではfunc(&str3_1,...だと言う。
それならば、>152のようなエラーメッセージになるはずがない。

158 名前:デフォルトの名無しさん :2005/04/22(金) 12:05:48
>>154
>>152のエラーはこれで出なくなるはずだが。

159 名前:デフォルトの名無しさん :2005/04/22(金) 12:24:11
>>158
すみません、実行してみたら、エラーが出なくなってました。
よく確認、しなくてすみませんでした。
お答えいただきありがとうございました。

160 名前:デフォルトの名無しさん :2005/04/22(金) 12:28:22
スレ汚し!
二度と来るな!!

161 名前:デフォルトの名無しさん :2005/04/22(金) 12:28:29
おいおい、>157には挨拶なしかい。
しかし、どうでもいいけど全貌を見たくなくなるような小汚いソースだな。

162 名前:デフォルトの名無しさん :2005/04/22(金) 12:41:41
>>157
>>161
すみません、忘れてました。


163 名前:デフォルトの名無しさん :2005/04/22(金) 19:08:29
初心者って付けば、どんなスレでも構わない、なんて思わないでくれよ。

言語と標準ライブラリと処理系、この3つの区別くらいしてくれ。
というか、区別をしてない解説書を読むのはやめてくれ。

164 名前:163 :2005/04/22(金) 19:09:30
もとい
×標準ライブラリ
○ライブラリ

標準ライブラリでも、サードパーティでもいいが、
このスレで扱うライブラリは、MFCやATLなど、Visual C++特有のものだろ。

165 名前:デフォルトの名無しさん :2005/04/22(金) 22:39:48
そういう区別がつかない初心者を隔離する
スレだとばかり思っていた2005春

166 名前:デフォルトの名無しさん :2005/04/23(土) 08:40:29
昔プログラマをしていた者です。
ゲームが作りたくて、久しぶりにプログラムを組んだのですが、
いきなりLoadImage関数で詰まってしまっています。(SDKです)

case WM_CREATE
hbmp = (HBITMAP)LoadImage( hInstance, "gazou.bmp",
IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );
// hInstanceはWinMainにて保存しています。NULLではありませんでした。

FormatMessageで調べると"パラメータが正しくありません"と返ってきてしまいます。
ヘルプを見てもどこが悪いか分かりません。
LoadImageのDesired引数等を変えたりして1、2時間この1行で悩んでいます。。
おまぬけな質問ですが、どなたか教えてくださいませ。

167 名前:デフォルトの名無しさん :2005/04/23(土) 08:58:10
たった1、2時間か。もっと悩もうよ。

168 名前:デフォルトの名無しさん :2005/04/23(土) 09:07:32
>>166
インスタンスハンドルはリソース用だからNULLでいいんじゃないか?

169 名前:デフォルトの名無しさん :2005/04/23(土) 09:11:05
WM_CREATE内ではreinterpret_cast<CREATESTRUCT *>(lParam)->hInstanceで
CreateWindowExを呼んだときに指定したインスタンスハンドルを入手できる。

170 名前:デフォルトの名無しさん :2005/04/23(土) 09:29:19
Visual Studio で使える、↓みたいなのありませんか?
http://www.gnu.org/software/ddd/


171 名前:デフォルトの名無しさん :2005/04/23(土) 09:49:35
LoadImageでファイルから画像を読み込む場合、HINSTANCEは「NULLでなければならない」

172 名前:166 :2005/04/23(土) 10:58:31
>>167
昔散々やったことなので、時間が勿体無くて。。
他の人に聞くと一瞬で解決することが時々あるので質問させてもらいました。

>>168
リソースからロードする時はNULLで良い様な気がします。

>>169
WM_CREATEのlParamがCREATESTRUCT構造体へのポインタになってるんですね。
そういえばそんな記憶が。。

>>171
NULLでは駄目でした。

多くのレスありがとうございました。
もう少し悩んでみます。

P.S もしかして環境が悪いのでしょうか?
   WindowsME&VC++6.0です。

173 名前:デフォルトの名無しさん :2005/04/23(土) 11:00:42
>>170
詳しく

174 名前:171 :2005/04/23(土) 12:07:04
>>172
ハァ?(゚д゚)
LR_LOADFROMFILE指定してんのに、何リソースからロードする時とかNULLではダメでしたとか言ってんの?(゚д゚)

MSDN見たりとか、GetLastError→FormatMessageしてエラー見たりとかしたのか?
時間が勿体無くてとか、他の人に聞くと一瞬で解決したとか
甘えすぎなんだよ

175 名前:デフォルトの名無しさん :2005/04/23(土) 12:12:04
昔さんざんやったとか言う割にはお粗末だな


176 名前:デフォルトの名無しさん :2005/04/23(土) 12:13:20
コボラーでな。

177 名前:デフォルトの名無しさん :2005/04/23(土) 12:13:47
>>174
モチツケ
FormatMesageは既に明かしている。(>>166)

178 名前:170 :2005/04/23(土) 12:23:34
>>173
Visual Studio のデバッガだとリストとかのデータ構造を使ってるときに、
今実際にどういう値が入ってるのか把握するのが大変なので、

ttp://www.gnu.org/software/ddd/all.png

こんな感じに表示してくれるのがあったらいいなぁと思って書いてみました。


179 名前:デフォルトの名無しさん :2005/04/23(土) 12:30:34
VisualStudio以外のツールを求めてるなら完全なスレ違い。
よそへ行ってくれ

180 名前:デフォルトの名無しさん :2005/04/23(土) 12:47:19
visual studio .net2003の質問はいいのかな。。
インテリセンスの事だけど。

CreateWindow( xxx, xxx...と書いている時にはパラメータヒントが出てるんだが
他の行等にフォーカスし、その後また続きを書き始めようとすると
最初の括弧を書かないと、今は表示されません。

これを引数の","(コンマ)を入力するとヒントが出てくるようにはなりませんかね?
VBいぢっていた時は、これでヒントが出てきたので少し便利ですた。

181 名前:デフォルトの名無しさん :2005/04/23(土) 12:54:13
>>180
編集 → 一番下

182 名前:デフォルトの名無しさん :2005/04/23(土) 13:02:17
>>177
すまん、ついカッとなってしまったorz

>>172
まぁなんていうか、MSDN熟読しろ

183 名前:デフォルトの名無しさん :2005/04/23(土) 13:10:20
>>181
そういやショートカットがあったな。。
さんくす。コンマじゃぁ無理っぽいけど、まぁ慣れるようにします。

184 名前:デフォルトの名無しさん :2005/04/23(土) 17:00:17
1つのソリューションに複数のプロジェクトがある場合で、その中のプロジェクトのひとつを
別のソリューションに移動またはコピーしたいんですが、どうやればできますか?

185 名前:デフォルトの名無しさん :2005/04/23(土) 17:23:27
>>184
コピー元ソリューションの対象プロジェクトファイル(*.vcproj)をコピー先ソリューションのディレクトリにコピー。
コピー先ソリューションで既存項目の追加で対象プロジェクト(勿論コピーしたもの)を追加。
#但し、プロジェクト内の各ファイルについては適宜コピーするかプロジェクトファイルをテキストエディタで編集して相対パスにする。
##プロジェクトファイルを直接複数のソリューションに追加するのはやめた方がいい(若しくはできない)が、ソースファイルは共有可能。

186 名前:デフォルトの名無しさん :2005/04/23(土) 21:02:51
>>185
ありがとうございます。
IDE上からは出来ないんですね。

187 名前:デフォルトの名無しさん :2005/04/23(土) 21:26:47
visual c++ 2003.net なんですが
XPでプログラムを作ってw2000にファイルを
持って行きそこで実行するとエラーが出てしまいます。
「CLRエラー」ですとか「ほにゃららのハンドルされていない
例外が不明なモジュールです」などと表示されます。
原因はなんなのでしょうか?中学生ですけど教えてください。

188 名前:デフォルトの名無しさん :2005/04/23(土) 21:53:42
猫でもわかる を参照にして、
LRESULT CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
switch (msg) {
   case WM_INITDIALOG: SetTimer(hWnd, ID_MYTIME, 1000, NULL);
   return TRUE;(略
のようなプログラムを作っていてたら、
ダイアログプロシージャの戻り値ってBOOLじゃなかったっけ?
っていうような指摘を受けました。確かに戻り値は TRUE か FALSE ですけど、
どっちが正しいのですか?

189 名前:デフォルトの名無しさん :2005/04/23(土) 22:28:52
コピペなり、入力支援で作ってください。
頭で覚えるとバグの元です。

190 名前:デフォルトの名無しさん :2005/04/23(土) 22:41:07
>>187
Win2kに.Net Freamworkをインストールするか、あるいはVC側でマネージ拡張を使わないようにすればいいんじゃないのか?

191 名前:デフォルトの名無しさん :2005/04/23(土) 22:48:10
>>188
昔 BOOL
今 INT_PTR

192 名前:デフォルトの名無しさん :2005/04/23(土) 22:56:45
>>188
ついでを言えば実際の値はBOOLでもLRESULTでも大差ない
BOOLはintのtypedefだしLRESULTはlongのtypedef
どちらも現時点で主流のWindowでは同じサイズ

193 名前:デフォルトの名無しさん :2005/04/23(土) 23:02:53
>>191-192
WINDEF.h というのを見つけてんで、さっそく確認して見ますた。
そうだったんですね、BOOL っていうからてっきり1ビットかと思っていました。
大変勉強になりました。ありがとうございます。

194 名前:デフォルトの名無しさん :2005/04/23(土) 23:04:55
>>193
そもそも1bitのデータ型なんか存在しないわけだが

195 名前:デフォルトの名無しさん :2005/04/24(日) 01:41:39
>>194
bool bool bool bool bool bool bool

196 名前:デフォルトの名無しさん :2005/04/24(日) 01:56:08
>>195
バーカ。
bool は Visual C++ 4.2 では 4 バイト、Visual C++ 5.0 以降では 1 バイト。

In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool
with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a
size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4,
while in Visual C++ 5.0 and later, the same call yields 1.

197 名前:デフォルトの名無しさん :2005/04/24(日) 05:12:37
データ型とはちょっと違うが、ビットフィールド、ってのがあるよ。

で、多くのものが実際には32ビット幅なんだけど、
だからといって型を気にしなくていい、というわけじゃない。

198 名前:デフォルトの名無しさん :2005/04/24(日) 05:15:12
結構検索してみたんだけど・・無かったので質問させて下さい
vs.net2003でF1キーを押した時にヘルプが英語で表示されてしまいます。
日本語を優先的に表示させたいのですが、どこで設定すればいいのでしょうか・・?

フィルタ・言語設定等を日本語に設定してみても、
F1キーでは英語ヘルプが表示されてしまいます。
検索すれば日本語ヘルプは出てくるんだけど・・はぁ。。

199 名前:デフォルトの名無しさん :2005/04/24(日) 09:51:42
>>174
( ´,_ゝ`)プッ

200 名前:デフォルトの名無しさん :2005/04/24(日) 10:03:00
人に教えるレベルでもないのに
自惚れている馬鹿はどこにでもいる

201 名前:デフォルトの名無しさん :2005/04/24(日) 11:23:51
おいおい、今更煽りかよ

202 名前:デフォルトの名無しさん :2005/04/24(日) 11:57:04
187なのですが、同じXP上で動いていたプログラムが
今日になってエラーが出てしまうのは何が原因なのでしょうか?
w2kでも最初に実行した時はうまく動きましたが、
次からエラーになってしまいます。

>>190さんのおっしゃる通り、このパソコンには
.net freamworkが入ってますし、マネージ拡張を「はい」
にしないとビルドの段階でエラーになってしまいます。
お小遣いを出して解説書を買ったのですがのってないみたいです。

203 名前:デフォルトの名無しさん :2005/04/24(日) 12:42:43
>>196
実装は1バイトや4バイトでも
言語仕様としては1ビットなわけだが。

intが32ビットというのと同じくらい痛い発言。

204 名前:デフォルトの名無しさん :2005/04/24(日) 13:28:04
お小遣いというのが何ともかわいらしい

205 名前:デフォルトの名無しさん :2005/04/24(日) 13:31:42
だが大の大人のサラリーマンでもお小遣いな罠

206 名前:デフォルトの名無しさん :2005/04/24(日) 14:40:41
>>198
.NET IDE の
オプション -> 環境 -> 国際対応

Document Explorer の
オプション -> 国際対応

207 名前:デフォルトの名無しさん :2005/04/24(日) 16:07:52
結構調べてみたんですけど、よく分からなかったので教えてください。
visual studio.net使ってアプリケーション作れって課題出されたんです。
テンプレートでよく使われているのはMFCかwin32かのどちらかみたいなんですけど、
両者がどのように違うのかが良く分かりません。
出来れば、特徴とか記述方法の違いとか分かりやすく教えていただけると
うれしいです。

208 名前:デフォルトの名無しさん :2005/04/24(日) 16:17:50
多分、違い教えても君のレベルでは両方とも使えない

209 名前:デフォルトの名無しさん :2005/04/24(日) 16:36:04
その高慢な回答は全く無意味かと

210 名前:デフォルトの名無しさん :2005/04/24(日) 16:44:18
Win32=いわゆるWin32API。Windowsの機能に低レベルでアクセスできる。
MFC=クラスライブラリ。Windowsの機能にクラスを通じてアクセス可能
C++の知識が必要

でも>>208

211 名前:デフォルトの名無しさん :2005/04/24(日) 16:56:15
なんか簡単すぎる説明だな

Win32
  Win32APIやC/C++標準ライブラリなどを直接使ってWin32アプリを作る
  C/C++どちらでも作れる
  作ったアプリはWindowsが入っていて、使用APIとOSバージョンが合致してれば使える

MFC
  Win32APIやライブラリを分野ごとにクラスにまとめで使いやすくした(MS談)
  Microsoft Fundation Classというクラス群を使ってWin32アプリを作る
  クラスなので当然C++じゃないとダメ
  作ったアプリはMFCのDLLをインストールしてあるPCでないと動かない
  Windowsインストールしただけじゃだめ



212 名前:デフォルトの名無しさん :2005/04/24(日) 16:58:57
>>211
>なんか簡単すぎる説明だな

説明する方も良く分かってないみたいだからね

213 名前:デフォルトの名無しさん :2005/04/24(日) 17:00:35
ヘタレな俺の経験からいわせてもらうといきなりMFCより
Win32APIでシコシコ作った方が勉強になる

214 名前:デフォルトの名無しさん :2005/04/24(日) 17:10:11
つうかWinインストールしてあればMFCxx.DLLってインストールされなかったっけ
まぁバージョンの問題があるだろうけど

215 名前:デフォルトの名無しさん :2005/04/24(日) 17:15:16
スタティックリンクしたらMFCのDLLは要らない。

  作ったアプリはMFCのDLLをインストールしてあるPCでないと動かない
  Windowsインストールしただけじゃだめ


216 名前:デフォルトの名無しさん :2005/04/24(日) 17:17:26
>>214
御意。
例えば、Win2K以前にはMFC7.1以降のDLLはない。

>>207
どんなアプリケーションを作りたいのかを示さないと、斯くの如く混乱を招く。
作る課題はどんなものなのかね。

217 名前:デフォルトの名無しさん :2005/04/24(日) 17:18:31
漏れの持ってた98にはDLLそのものが無かったんだが

218 名前:デフォルトの名無しさん :2005/04/24(日) 17:18:54
>>215
誰があんなでかいもんスタティックリンクすんだよw

219 名前:198 :2005/04/24(日) 17:58:44
>>206
答えてくれてありがと。
だた・・まだ変更されないです。。

とりあえず、↓の目に付いた設定は日本語にしています。
ツール -> オプション -> 国際対応の設定 -> 言語 = 日本語
ツール -> オプション -> ヘルプ -> 言語の選択 = 日本語

Document Explorerの
オプション -> 国際対応の設定 -> 言語 = 日本語

"ShowWindow" 、"RegisterClassEx"など日本語訳があるのに
F1押してみると、何故か英語が表示されてしまうです・・

220 名前:デフォルトの名無しさん :2005/04/24(日) 18:50:05
>>203
>言語仕様としては1ビットなわけだが。
言語仕様のどこに1ビットって書いてあるか教えてくれ。

221 名前:デフォルトの名無しさん :2005/04/24(日) 18:53:30
バイト単位でデータを扱うものにビット仕様があるわけがない

222 名前:デフォルトの名無しさん :2005/04/24(日) 19:27:01
>>207
マニュアル読め
じゃいかんのかね 最近は・・・

たいてい書いてあるんだがね

223 名前:デフォルトの名無しさん :2005/04/24(日) 19:32:04
というかインターネッツでしらべれば一発なんだけど

224 名前:207 :2005/04/24(日) 19:55:37
>>216
エクセルファイルを開かないでデータのみを読み込んで、設定を入力
すると、計算して値の内容が合ってるかチェックできるような
アプリケーションなんですけど・・。
>>222
マニュアルは手元に無いので(回してインストールしたので)、
参照したいんですが出来ないのです。
>>223
どこかおすすめのサイトってありませんか?

225 名前:デフォルトの名無しさん :2005/04/24(日) 20:04:54
落としてきたんでしょw

226 名前:デフォルトの名無しさん :2005/04/24(日) 20:51:19
> マニュアルは手元に無いので(回してインストールしたので)、
> 参照したいんですが出来ないのです。

著作権法違反発見!!!!!

227 名前:デフォルトの名無しさん :2005/04/24(日) 21:11:06
アカデミックライセンスとかじゃないの?

228 名前:デフォルトの名無しさん :2005/04/24(日) 21:13:19
(CDをドライブ内で)回してインストール

229 名前:デフォルトの名無しさん :2005/04/24(日) 21:16:35
アカデミックライセンスでも回してインストールは駄目だろ。

230 名前:デフォルトの名無しさん :2005/04/24(日) 21:17:21
スゲー誤魔化し方だなw

231 名前:デフォルトの名無しさん :2005/04/24(日) 21:20:20
>>224
犯罪という意識がないんだろうな

232 名前:デフォルトの名無しさん :2005/04/24(日) 21:28:16
>>218
最近のPCはHDDの容量が多いので、スタティックリンクしたときの
メリットの方が多いですね。

233 名前:デフォルトの名無しさん :2005/04/24(日) 21:34:48
>>232
HDDの容量なんてどうでもいい罠

234 名前:デフォルトの名無しさん :2005/04/24(日) 22:00:50
どうせDLLヘル対策で実行ファイルと同じフォルダにDLL配置したりするから大差ないかも

235 名前:デフォルトの名無しさん :2005/04/24(日) 22:35:23
スクール アグリーメントとかじゃねぇの?

236 名前:デフォルトの名無しさん :2005/04/24(日) 23:15:01
そっちもさることながら、 「エクセルファイルを開かないでデータのみを読み込んで」の部分を誰か解説してくれ。

237 名前:デフォルトの名無しさん :2005/04/24(日) 23:17:20
俺のESPによると
「エクセルファイルを開く」とはxlsファイルをダブルクリックする事だと推測
つまりプログラムから読み込むのは「エクセルファイルを開く」にあたらない

238 名前:デフォルトの名無しさん :2005/04/24(日) 23:18:48
>>233
じゃ、なんでダイナミックリンクするの?

239 名前:デフォルトの名無しさん :2005/04/24(日) 23:52:02
猫のソケットプログラミングの
saddr.sin_addr = *((LPIN_ADDR)*lpHost->h_addr_list);
の一文の右の式の意味ってどういうこと?
lpHostこうぞうたいのh_addr_listの値をロングポインタ型のINADDRにキャストした
やつのポインタの中身を左辺に代入するってこと?

そもそもwsprintfのwとかLPIN_ADDRのLPとかなんのことなんでしょうか?


240 名前:デフォルトの名無しさん :2005/04/25(月) 00:10:58
w : winapi
l : long
p : pointer

241 名前:デフォルトの名無しさん :2005/04/25(月) 00:11:47
wの説明はネタだと信じたい

242 名前:デフォルトの名無しさん :2005/04/25(月) 00:15:47
w : wide -> wideってなんですか?(以下略

243 名前:デフォルトの名無しさん :2005/04/25(月) 00:15:49
ということは、lphostのh_Addr_listの中身をロング型のポインタに変換
したやつの中身(つまりアドレス?)がはいるということでしょうか。



244 名前:デフォルトの名無しさん :2005/04/25(月) 00:34:48
ていうか239でだいたい合ってると思うがどうか。
HOSTENT構造体のポインタlpHostのメンバのh_addr_listをLPIN_ADDRにキャストして参照してる。
h_addr_list自体はポインタのポインタ。要はネットワークアドレスの配列。

LPは普通のポインタだと思っとけばいいと思う。

245 名前:デフォルトの名無しさん :2005/04/25(月) 00:44:22
saddr.sin_addr = *((IN_ADDR*)*lpHost->h_addr_list);

246 名前:デフォルトの名無しさん :2005/04/25(月) 06:30:30
>>238
無い頭で考えろ

247 名前:デフォルトの名無しさん :2005/04/25(月) 06:53:29
なんとなくですがだいたいわかりました
ありがd

248 名前:デフォルトの名無しさん :2005/04/25(月) 10:08:25
CreateThreadでスレッドを作るだけで、複数のcpuを持つコンピュータで
実行させた場合それだけで複数のcpuに処理を分散させることになるのですか?

249 名前:デフォルトの名無しさん :2005/04/25(月) 10:54:49
>>246
結局、説明出来ないのですね

250 名前:デフォルトの名無しさん :2005/04/25(月) 11:02:47
>>248
むしろスレッドをどのcpuで実行させるかは指定できない。
OSが管理するので。



■過去ログ置き場に戻る■ 1- 次250 最新50
DAT2HTML 0.33f Converted.