5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

★初心者にVisual C++を教えるスレ★ Part34

1 :デフォルトの名無しさん:2009/06/19(金) 12:39:29
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。

質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html

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

過去スレ、関連スレなどは>>2-4辺り。

【過去スレ】
Part33 ttp://pc12.2ch.net/test/read.cgi/tech/1235292263/
Part32 ttp://pc11.2ch.net/test/read.cgi/tech/1225422971/
Part31 ttp://pc11.2ch.net/test/read.cgi/tech/1217494948/

2 :デフォルトの名無しさん:2009/06/19(金) 12:40:01
Part30 ttp://pc11.2ch.net/test/read.cgi/tech/1210170833/
Part29 ttp://pc11.2ch.net/test/read.cgi/tech/1203007556/
Part28 ttp://pc11.2ch.net/test/read.cgi/tech/1196430042/
Part27 ttp://pc11.2ch.net/test/read.cgi/tech/1189394427/
Part26 ttp://pc11.2ch.net/test/read.cgi/tech/1176387917/
Part25 ttp://pc11.2ch.net/test/read.cgi/tech/1168354839/
Part24 ttp://pc10.2ch.net/test/read.cgi/tech/1158296664/
Part23 ttp://pc8.2ch.net/test/read.cgi/tech/1140711893/
Part22 ttp://pc8.2ch.net/test/read.cgi/tech/1131443284/
Part21 ttp://pc8.2ch.net/test/read.cgi/tech/1124806288/
Part20 ttp://pc8.2ch.net/test/read.cgi/tech/1120222322/
Part19 ttp://pc8.2ch.net/test/read.cgi/tech/1116209988/
Part18 ttp://pc8.2ch.net/test/read.cgi/tech/1113539594/
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 :デフォルトの名無しさん:2009/06/19(金) 12:40:19
【このスレの前身 VisualC++相談室 過去スレ】
part 1 ttp://piza.2ch.net/tech/kako/970/970607517.html
part 2 ttp://piza.2ch.net/tech/kako/981/981630730.html
part 3 ttp://piza2.2ch.net/tech/kako/993/993186053.html
part 4 ttp://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 ttp://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 ttp://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 ttp://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 ttp://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 ttp://pc5.2ch.net/tech/kako/1036/10368/1036897197.htm

【関連スレ】
■MFC相談室 mfc20d.dll■
http://pc11.2ch.net/test/read.cgi/tech/1230219816/
Win32API質問箱 Build80
http://pc12.2ch.net/test/read.cgi/tech/1244057140/
【C++】 DirectX初心者質問スレ Part23 【C】
http://pc12.2ch.net/test/read.cgi/tech/1242977486/
C言語なら俺に聞け(入門篇) Part 49
http://pc12.2ch.net/test/read.cgi/tech/1244297476/
【初心者お断り】ガチ規格準拠C専用スレ Part133
http://pc11.2ch.net/test/read.cgi/tech/1201153965/
C++相談室 part70
http://pc12.2ch.net/test/read.cgi/tech/1244942050/
C/C++の宿題片付けます 127代目
http://pc12.2ch.net/test/read.cgi/tech/1244449887/
【初心者歓迎】C/C++室 Ver.66【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1243440528/

4 :デフォルトの名無しさん:2009/06/19(金) 12:40:37
【関連サイト】
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
MSDN ライブラリ ※変更された
http://msdn.microsoft.com/ja-jp/library/default.aspx
Platform SDK Update ※変更された
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
Google
http://www.google.co.jp/

Platform SDKの中で一番新しいのはこっち
Microsoft Windows Server 2003 R2 Platform SDK Web Install
http://www.microsoft.com/downloads/details.aspx?FamilyID=0baf2b35-c656-4969-ace8-e4c0c0716adb&DisplayLang=en
(ISO版などあり)
これ以降、Platform SDK + .NET Framework SDKとして
Windows SDKが公開されていて、その中で一番新しいのはこれ。
Windows SDK for Windows Server 2008 and .NET Framework 3.5
http://www.microsoft.com/downloads/details.aspx?FamilyID=f26b1aa4-741a-433a-9be5-fa919850bdbf&DisplayLang=en
少し前のバージョン(Vista + .NET 3.0の初期版)には日本語版もあったけど、
日本語化されているのは専ら.NET Framework部分だけ。
VC6対応の、最後のPSDKはここ。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm

5 :デフォルトの名無しさん:2009/06/19(金) 13:46:33
Visual c++ で hello world と表示させる方法を教えてください。
ソースファイルに以下のプログラムを書いてもエラーが出ます。
ヘッダーファイルにも何か書かないとダメですか?


#include <stdio.h>
{
printf ("hello world\n");
return 0;
}

6 :デフォルトの名無しさん:2009/06/19(金) 13:48:30
もう一度>>1をよく読み直せ

7 :デフォルトの名無しさん:2009/06/19(金) 13:51:18
本当にこれだけ書いたのか?

8 :デフォルトの名無しさん:2009/06/19(金) 13:52:15
>>5
mainがない。

9 :デフォルトの名無しさん:2009/06/19(金) 13:52:34
#include <stdio.h>
int main(void)
{
printf ("hello world\n");
return 0;
}

10 :デフォルトの名無しさん:2009/06/19(金) 13:53:48
>>7-8
#include <stdio.h>
main()
{
printf ("hello world\n");
return 0;
}

これだけ書きました。エラー1です。

11 :デフォルトの名無しさん:2009/06/19(金) 13:54:57
>>9
エラーでませんでした。みなさん、ありがとうございました。

12 :808:2009/06/19(金) 14:14:31
「スレ立てるまでも無い質問スレ」の
テンプレ作成してくれた>>809-812さん、スレ立てしていただいた>>818さん、
本当にどうも助かりました。このスレは、私の生きがいみたいなもので・・

立てられなくて困っていたので、本当に助かりました。どうもありがとう。

13 :デフォルトの名無しさん:2009/06/19(金) 14:18:50
うひゃー。うれしいな。僕の居場所が一つ元に戻った( ´Э`)

14 :デフォルトの名無しさん:2009/06/20(土) 20:38:54
VC2008(MFC)使ってるんだけど、デバッグが出来るメモ帳位にしか使えてないです。
もっと高度なIDEの使い方を勉強したいので、お勧めのサイトや本があったら教えて下さい。

15 :デフォルトの名無しさん:2009/06/20(土) 21:34:16
MFCなのにメモ帳位にしか使えてないんなら
IDEを必要としていないと言うことだ。
必要もないのに勉強するだけ無駄

16 :デフォルトの名無しさん:2009/06/20(土) 21:37:23
IDEの使い方の解説ってあんまりないな。
人の使いかを見てて「え、こんな機能あったの?」って気づくことがある。

17 :デフォルトの名無しさん:2009/06/20(土) 23:48:30
Visual C++のExpressEditionって
C#とかVB.bet
などと違って
.netFrameworkとかいうやつ入れなくても動かせるの?

18 :デフォルトの名無しさん:2009/06/20(土) 23:48:44
>>14
>もっと高度なIDEの使い方
具体的にはどんな使い方が君とっての「高度な」使い方になるのかな?

19 :デフォルトの名無しさん:2009/06/20(土) 23:49:51
>>17
まずは試してみよ

20 :デフォルトの名無しさん:2009/06/20(土) 23:55:02
>>19
質問の仕方悪くてすまん。
作成俺が必要かってことじゃなくて
作ったexeを実行するために必要かってこと。
.net必須だとexeネットで配布しても実行できない人多いよね。

C#とかVB.netだとHello World一行表示するプログラムでも.netFramewok必要だったが
C++は必要ない?

21 :デフォルトの名無しさん:2009/06/20(土) 23:59:24
>>20
ライブラリをスタティックリンクしてEXEを作成すると、ランタイムライブラリの類は不要。単体で実行できる。

22 :デフォルトの名無しさん:2009/06/21(日) 00:49:42
レスしてくれた人ありがとう。

>>18
ほんの一例なんだけど、ウィンドウにCWnd::SendMessage(Postも)とか良くするよね。
その時に、

#define WM_USER_EXAMPLE (WM_USER+1)

LRESULT OnUserExample(WPARAM, LPARAM);

ON_MESSAGE(WM_USER_EXAMPLE, OnUserExample)

LRESULT CExampleWnd::OnUserExample(WPARAM wParam, LPARAM lParam)
{
  return 0;
}

こんなの、いちいち適所に書かなきゃ(コピペ)ならなくて面倒ですよね?
何か一つ忘れただけで、コンパイルエラーとかうっとうしいし。
これを一発で(綺麗に)入れてくれる機能とか?低レベルな使い方だったらゴメン。
あくまでも自分にとって高度なだけです。

後は自分が思いもつかないような便利な使い方が沢山ありそうなので、そういうのを
勉強したいと思いました。やっぱりMSDNコツコツ読むしかないですかね。

23 :デフォルトの名無しさん:2009/06/21(日) 01:31:28
なんとなくできそうな気もするけど、やり方は僕にもわからない。

>#define WM_USER_EXAMPLE (WM_USER+1)
#define WM_USER_EXAMPLE (WM_APP+1) // こっちにしとき。

24 :デフォルトの名無しさん:2009/06/21(日) 02:03:38
それはコードスニペットが近い機能だと思う。

そもそも、IDEの支援を当てにするなら、C#とかにしたほうがいい。
C++は、インテリセンスが運良く出て来れば万々歳って言語だから。

25 :デフォルトの名無しさん:2009/06/21(日) 08:49:37
>>21
初心者ですみませんが、EXEファイルはどうやって作るんですか?

26 :デフォルトの名無しさん:2009/06/21(日) 10:45:50
コード書いてビルド

27 :デフォルトの名無しさん:2009/06/21(日) 17:53:23
DLLはプロジェクト分けてビルドしないといけないの?

28 :デフォルトの名無しさん:2009/06/21(日) 18:06:44
分けなくてもいいよ

29 :デフォルトの名無しさん:2009/06/21(日) 18:10:30
ソリューションは分けなくてもいいけど、プロジェクトは分ける

30 :デフォルトの名無しさん:2009/06/21(日) 18:35:09
分けなくてもいいよ

31 :デフォルトの名無しさん:2009/06/21(日) 19:25:13
具体的にどうやればできるんでしょうか?
dllはなんとかビルドできたんですがmainのほうのプロジェクトがビルドできません

32 :デフォルトの名無しさん:2009/06/21(日) 19:34:48
具体的にどうできないのかを書かないなら一生ヘルプとgoogle先生とにらめっこしてろよ
ここはコミュニケーションが取れる人間のための場所だ

33 :デフォルトの名無しさん:2009/06/21(日) 19:57:29
dllのほうのproject

[dll.h]
#ifdef DLL
#define DECLSPEC __declspec(dllexport)
#else
#define DECLSPEC __declspec(dllimport)
#endif
void DECLSPEC DLLFunc();

[dll.cpp]
#include <iostream>
#define DLL
#include "dll.h"
void DLLFunc() {std::cout << "DLLFunc()" << std::endl;};

34 :デフォルトの名無しさん:2009/06/21(日) 19:58:11
mainのほうのproject

[main.cpp]
#include "dll.h"
int main(void) {
  DLLFunc();
  return 0;
}

・ソリューションエクスプローラー上でdll.hをコピー
・dllのほうのprojectのプロパティ->構成の種類をDLL
・依存関係でmainの依存先をdllに
・ソリューションのビルド
ここまでやったんですが、
・デバッグで使用する実行ファイル名を指定してください
といわれたので、何もいじらずにC:\WINDOWS\system32\regsvr32.exeを選択
したんですが、デバッグなしで開始したら
・DLLが指定されていません
と表示されてなにも実行されません
なにが問題なんでしょうか

35 :デフォルトの名無しさん:2009/06/21(日) 19:59:04
書き忘れましたdll.hは実ファイルの方もmainのprojectにコピーしました

36 :デフォルトの名無しさん:2009/06/21(日) 20:46:27
>>34
2つは同じソリューションだよね。
mainのほうをスタートアッププロジェクトにしている?
あと、regsvr32はこういう普通のDLLには無関係。

37 :デフォルトの名無しさん:2009/06/21(日) 21:30:33
スタートアッププロジェクトをmainに設定したら期待通りに動きました
どうも有難うございました

38 :デフォルトの名無しさん:2009/06/22(月) 07:53:32
VC6のリソースエディタにてダイアログボックスにタブコントロールをつけたのですが
画像のようにタブ内の編集を行いたいのです
どのようにすれば編集は可能なのでしょうか?
http://sakuratan.ddo.jp/uploader/source/date113469.jpg

サンプルソースなどあると助かります

39 :デフォルトの名無しさん:2009/06/22(月) 10:50:52
>>38
どうやったらその画面になるの?
ソースコードの画面から切り替えられないよ。

横レスすまん。

40 :デフォルトの名無しさん:2009/06/22(月) 13:51:08
スレ勃てるまでもないスレでシカトされてしまったんでこっち来ました。
思いつきでこんなクラス書いてみました。

class CLocalTime
{
private:
  char buf[32];
  SYSTEMTIME SysTime;
public:
  CLocalTime()
  {
  }
  operator char *();
};

CLocalTime::operator char *()
{
  GetLocalTime(&SysTime);
  sprintf_s(buf, 31, "%04d/%02d/%02d %02d:%02d:%02d",
            SysTime.wYear, SysTime.wMonth, SysTime.wDay,
            SysTime.wHour, SysTime.wMinute, SysTime.wSecond);
  buf[31] = '\0';
  return buf;
}

これで、例えば printf なんかで使うときに、
printf("通過![%s]\n", (char *)CLocalTime());
ときちんとキャストすればちゃんと表示されるんですが、
printf("通過![%s]\n", CLocalTime());
だけで表示させるにはどうすればいいんでしょうか。operator CLocalTime &() を
追加してみましたがダメでした。CAtlStringA なんかは後者できちんと表示されています。

41 :デフォルトの名無しさん:2009/06/22(月) 14:25:20
C++言語の質問だったらC++スレへ

42 :デフォルトの名無しさん:2009/06/22(月) 18:31:26
>>40
「ダメ」だけだから無視される。エラーが出たならエラーメッセージ、そうでないならどうダメだったか書くのが常識。

43 :デフォルトの名無しさん:2009/06/22(月) 20:31:33
>>40
CStringの定義を辿ってみろ。
メンバ変数が文字列へのポインタ1つしかない。
だから、可変個引数でもconst char*を渡したかのような振る舞いが可能になっている。

44 :デフォルトの名無しさん:2009/06/22(月) 21:07:43
素直に class CLocalTime::ShowTime() 関数作る

45 :デフォルトの名無しさん:2009/06/23(火) 16:20:56
private メンバ変数への値を返すのはいかがなものかと

46 :デフォルトの名無しさん:2009/06/23(火) 17:30:15
>>40
キャストなしで可変長引数の関数にクラスを渡したら、
どのメンバ関数が呼び出されるんだろうと思って、MFCの
CStringで確認してみたら、クラスがそのまま値渡しされてる
だけだったな。

CStringの場合、クラスのメンバ変数がchar*だけだったから、
結果的にchar*の変数を渡したのと同じ動きになってた。

(const char*)でキャストすると、operator char*()が呼ばれて、
メンバ変数のchar*の変数を渡してた。(可変長引数の関数に
渡される値は結果的に同じ)

そのCLocalTimeは、メンバ変数が二つあるから、それが二つとも
スタックに詰まれて、おかしな動きになってるんだろうな。

47 :デフォルトの名無しさん:2009/06/23(火) 17:59:16
ひょっとして1project 1クラスが基本なの

48 :デフォルトの名無しさん:2009/06/24(水) 06:04:29
VC2008EEを使っています。
デバッグ中にアサートで停止した時に、実行したコードを1行ずつ巻き戻す事ってできないでしょうか?

49 :デフォルトの名無しさん:2009/06/24(水) 06:29:00
>>48
巻き戻し自体はできない
しかし、現在の実行行(正確には次に実行する行)はアセンブラレベルではは eip レジスタに格納されているので、
逆アセンブラウィンドウを開いて、このレジスタの値を書き換えることで、
実行済みの行を含む任意の箇所にジャンプできる

この機能を使うことで、変数の値を書き換えながら、実行済みの行を無理やり再実行させたりできる…はず(うろ覚え)
当然、レジスタやメモリの値も自分で書き戻してやる必要があります

50 :デフォルトの名無しさん:2009/06/24(水) 07:08:05
>>49
thx
レジスタやメモリいじるのは大変そうだ・・・。

51 :デフォルトの名無しさん:2009/06/24(水) 15:37:45
ソリューション内でStdAfxを共有したい場合はどう設定すればいいんでしょうか?

52 :デフォルトの名無しさん:2009/06/24(水) 17:01:51
>>51
お店に行き
10万支払う

53 :デフォルトの名無しさん:2009/06/24(水) 17:12:03
どこのお店でしょうか?

54 :デフォルトの名無しさん:2009/06/24(水) 17:52:26
>>53
ggrks

値段も
ggrks

55 :デフォルトの名無しさん:2009/06/25(木) 00:00:28
普通のプログラム(hello world出力のみなど)をつくりたいときは、どのプロジェクトの種類を選んだらいいのですか?

56 :デフォルトの名無しさん:2009/06/25(木) 00:05:51
コンソール アプリケーション

57 :デフォルトの名無しさん:2009/06/25(木) 00:12:54
空のプロジェクト

58 :デフォルトの名無しさん:2009/06/26(金) 18:18:00
C:\Documents and Settings\maria15\My Documents\Visual Studio 2008\Projects\aab\Debug

C:\Documents and Settings\maria15\My Documents\Visual Studio 2008\Projects\aab\aab\Debug
があるんだけど、なんで?

C:\Documents and Settings\maria15\My Documents\Visual Studio 2008\Projects\aab\Debug
にだけ、aab.exe があります。
これだけを配布すればいいんですか?

59 :デフォルトの名無しさん:2009/06/26(金) 18:19:13
aab\Release\aab.exe を配布します。
Debug版はランタイムライブラリがないので動きません。

60 :デフォルトの名無しさん:2009/06/26(金) 18:34:57
>>59
ありがとう。
aab\Release
のフォルダがありません。
どうすればファイル作成できますか?

61 :デフォルトの名無しさん:2009/06/26(金) 18:38:54
aab\aab\

62 :デフォルトの名無しさん:2009/06/26(金) 18:41:03
ツールバー or 構成マネージャを使って、アクティブを Debug から Release に切り替えろ。

63 :デフォルトの名無しさん:2009/06/26(金) 19:00:57
>>61-62
\aab\Release
ができました。
フォルダの中に
aab.exe
aab.pdb
が作成されました。
両方ZIPでまとめて配布ですか?

64 :デフォルトの名無しさん:2009/06/26(金) 19:02:19
exeだけ

65 :デフォルトの名無しさん:2009/06/26(金) 19:08:27
>>64
わかりました(^^)!

66 :デフォルトの名無しさん:2009/06/26(金) 19:42:05
(^^)<ホイミン!!

67 :デフォルトの名無しさん:2009/06/26(金) 19:43:41
ねえ、今VC6で
しこしこMFCやってんだけどそろそろ
買い換えようと思うんだけど、VC6からVS2008に
あくまでMFC使用しかしないということで移行する価値ってある?

68 :デフォルトの名無しさん:2009/06/26(金) 19:52:47
★2009年最新在宅ワーク!★☆13






http://doudu.youkoso.sa-suke.com/


69 :デフォルトの名無しさん:2009/06/26(金) 20:16:10
VS2010がもうすぐ出る

70 :デフォルトの名無しさん:2009/06/26(金) 20:55:22
そういうために評価版がある。

71 :デフォルトの名無しさん:2009/06/27(土) 03:11:33
いくつかのCソースファイルとヘッダファイルとmakefile(よく分かりません)
が入ったフォルダを落としたんですが
こういう形であるソースコードをvisual studio 2003で
コンパイル、実行するにはどうすればいいですか?

72 :デフォルトの名無しさん:2009/06/27(土) 03:15:43
コマンドラインで設定用のバッチファイルを呼んでからnmake

73 :デフォルトの名無しさん:2009/06/27(土) 03:21:02
#include <stdio.h>

int main(void)
{
char a;
int x;

printf("数字は?");
scanf_s("%d",&x);

printf("文字は?");
scanf_s("%c",&a);

printf("数字は%dです。\n",x);
printf("文字は%cです\n",a);

return 0;
}

正常に動作しません。エラー、警告ともにでませんが、デバッグで異常がでます。


数字は?(:8と入力する)8
文字は?数字は8です。
文字は
です。

と出ます。文字の入力ができません。どうしてでしょうか?

74 :デフォルトの名無しさん:2009/06/27(土) 03:22:05
>>72
すみません。
設定用のバッチファイルを呼ぶってどうすればいいんですか?

75 :デフォルトの名無しさん:2009/06/27(土) 03:25:27
>>73
scanf()は使わんから細かい挙動を知らんけど、
表示から考えると、8のあとの改行が%cでよまれてるっぽいな。

76 :デフォルトの名無しさん:2009/06/27(土) 03:33:39
>>75
本当ですね。

数字は?(8gと入力)8g
文字は?数字は8です。
文字はgです

と表示されます。やっぱり謎です。

77 :デフォルトの名無しさん:2009/06/27(土) 07:40:10
スレ違いくさいけど

scanfは、標準入力から直接受け取らないで、バッファに一旦入力した文字を格納する。
8を入力したとき、バッファには"8","\n"が格納される
それをscanfが読み込んで、バッファには"\n"が残っている
で、次のscanfでは「入力待たなくてもバッファの残りを代入すればよくね?」と考えて改行を読み込んじゃう

8gと入れたときは\nをgに置き換えてるだけ

78 :デフォルトの名無しさん:2009/06/27(土) 08:34:04
scanf関数は、罪作りな関数だと思うよ。
入門しか使わないくせに、癖が強すぎて入門者殺し
実用的なプログラ身ではscanf関数はまったく使わない

79 :デフォルトの名無しさん:2009/06/27(土) 11:54:19
すいません。VC初心者です。

Visual Studio 2008 Express Edition と platform SDK で Win32プログラムを
作りたいんだけど、普通のC言語で作れますか?


80 :デフォルトの名無しさん:2009/06/27(土) 11:57:24
>>78
どうせ初心者にはおまじないと大差ないレベルなんだから
安全な方法をブラックボックスとして与えればいいのにねー
なんでscanfなんだろう

81 :デフォルトの名無しさん:2009/06/27(土) 12:22:03
C言語ができた当時はアセンブラレベルが当たり前だったから
scanf程度でも十分初心者に優しかった。

82 :デフォルトの名無しさん:2009/06/27(土) 16:27:32
>>79
できる

83 :デフォルトの名無しさん:2009/06/28(日) 10:25:18
vc++がc++0xに対応するのはいつごろなんですか?
template typedefとか使いたいんですけど

84 :デフォルトの名無しさん:2009/06/28(日) 14:48:05
こんなところで日本語で質問しても誰も見てないと思うが

85 :デフォルトの名無しさん:2009/07/02(木) 22:40:17
アラビア語じゃないとね

86 :デフォルトの名無しさん:2009/07/03(金) 00:06:09
いちいち文字参照で書き込まないといけないから面倒臭いんだよね、2chだと

87 :デフォルトの名無しさん:2009/07/03(金) 15:15:44
>>83
次のVisual C++ 2010から少しずつ始まる。
http://www.codeguru.com/forum/showthread.php?t=466893

88 :デフォルトの名無しさん:2009/07/04(土) 01:09:09
VC++2008EEでWin32アプリを作ってます。
ウィンドウに配置したコントロールのDisabledの値を変更するにはどうすればいいでしょうか?

89 :デフォルトの名無しさん:2009/07/04(土) 01:23:24
>>88
EnableWindow

90 :デフォルトの名無しさん:2009/07/07(火) 17:49:35
他人の作ったWindowsアプリのメンテナンスをすることになりました。(製作者は行方不明です)
が、最初のところでいきなりつまづいてしまいました。
プログラムのエントリポイントがどこにあるのかわからないのです。

ソースのあるフォルダ全体に対してgrepをかけてみたのですが、mainもWinMainも見あたらず、
リンカのオプションにも/ENTRYは使われていませんでした。
プロジェクトファイルにもEntryPointSymbolの記述がありません。

私はこれ以外にエントリポイントを指定する方法を知らないのですが、
あとはどこを見ればいいのでしょう?
環境はVisual Studio 2008です。

91 :デフォルトの名無しさん:2009/07/07(火) 17:55:56
言語がC++なのは確かなことだと思うが、MFCで作成されたものならどちらのエントリポイントもソース中には存在しない。


92 :デフォルトの名無しさん:2009/07/07(火) 18:05:05
>>90
MFCならプロジェクト名.cppにInitInstance()があるからその辺りがほぼエントリポイントだが、
そのレベルだととてもじゃないがメンテナンスは無理。
先ずはMFCアプリの解説本を読んで簡単なMFCアプリを作れるようになってからだと思う。
# 逆に言えば、エントリポイントなんて意識する必要ないことを知っていれば簡単なんだけどね。

93 :デフォルトの名無しさん:2009/07/07(火) 18:22:46
すいません。書き忘れていましたが、InitInstanceもgrepで探したんですが存在しませんでした。
で、Visual StudioでF11を押したら、とりあえずエントリポイントっぽいところが出てきました。
恥ずかしいことに、ステップ実行にはブレークポイントが必須だと思い込んでいました。
いきなり頭からステップ実行できたんですね。

そのあと順にステップ実行していったら、別のDLLの中でインスタンスの初期化をしていました。
どおりで、ソースをいくら見てもわからないわけです。

とりあえず「MFC」でぐぐったら、どういう物なのかわかってきました。
ありがとうございました。

94 :デフォルトの名無しさん:2009/07/07(火) 18:32:09
で、MFCなの?
.netだったりしてないよね?w

95 :デフォルトの名無しさん:2009/07/07(火) 20:19:45
>>89
ありがとうございます。

もう一つ質問です。
2008EEのWin32アプリでは「クラス追加ウィザード」というのは使えないのですか?
使えない場合、自前でやる方法があれば教えてください。

96 :デフォルトの名無しさん:2009/07/07(火) 21:20:01
質問です
input関数で.txtのデータを読み込むのですが
読み込んでTextBoxに表示させるとvbTabで空けた空白の長さが整わないのです
どうすれば整いますか?

FileOpen(1, fname, OpenMode.Input)
TextBox4.Text = "クラブ名" & vbTab & "男子部員数" & vbTab & "女子部員数" & vbCrLf & vbCrLf
Do Until EOF(1)
Input(1, club) : Input(1, dansi) : Input(1, josi)
TextBox4.Text = TextBox4.Text & vbTab & club & dansi & josi & vbCrLf
Loop
FileClose(1)

環境はVisual Basic 2008 Express Edition
Windows Formでやりました

97 :デフォルトの名無しさん:2009/07/07(火) 21:23:26
>>96
スレ違い

98 :デフォルトの名無しさん:2009/07/07(火) 21:31:26
>>97
だと思うなら誘導しろ。

99 :デフォルトの名無しさん:2009/07/07(火) 21:36:24
>>98
VBのスレを知らんから誘導できん。すまんな。

100 :デフォルトの名無しさん:2009/07/07(火) 21:43:30
すいません、スレタイちゃんと読んでませんでした
Visual まで読んで あっVB とか思い込んでました

101 :デフォルトの名無しさん:2009/07/08(水) 02:06:18
連番のjpegファイルからmotion jpegのaviファイルを生成したいのですが、
そういう機能を持った商用の良いライブラリはないでしょうか。
PIC Video codec等はアプリケーションに見えるのですが、
ライブラリとして使えないものでしょうか。

102 :デフォルトの名無しさん:2009/07/08(水) 10:17:00
OpenCV

103 :デフォルトの名無しさん:2009/07/08(水) 20:27:55
vc++eeでwin32apiアプリケーションを作る勉強をしてるのですが
CppUnitを導入しようと思いまして、テストの出力を出力ウィンドウなどに送りたいと思います。

TRACEマクロはMFCじゃないと使えないようですし、何か方法あるのでしょうか?

コマンドプロンプトを起動してcoutしても出ないようですし。

よろしくお願いします。

104 :103:2009/07/08(水) 20:34:31
すいません
見つけました

OutputDebugStringですね

散々探して見つからなくて、書き込んでちょっと探すと見つかる・・・
このパターンが多いな
失礼しまいた。

105 :デフォルトの名無しさん:2009/07/09(木) 00:56:20
2日前にVS2008EEを入れてC++の勉強を始めました。
テンプレートの一番最初にあるWindowsフォームアプリケーションを選択して
フォームにボタンを置いてネットのサンプルをそのままコピペしたのですがコンパイルできません。
書き足したのはこの1行だけです。

(前略)
private void button1_Click(object sender, EventArgs e)
{
   HWND hWnd = FindWindow("無題", null);  //←追加
}
(以下略)

どう直せばいいんでしょうか?

106 :デフォルトの名無しさん:2009/07/09(木) 02:18:43
>>105
その1行自体は<windows.h>をインクルードすればいいのだが、
フォームアプリケーション(というよりCLRプロジェクトすべて)は、
<windows.h>ベースの仕組みではないから、お前が見ているであろうサンプルすべてが参考にならないぞ。

107 :デフォルトの名無しさん:2009/07/09(木) 02:37:34
http://opencv.jp/sample/
動的輪郭に興味があり↑の物体追跡(Object Tracking)のサンプルコードを動かそうと思ったのですが、

warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
error C3861: 'snprintf': 識別子が見つかりませんでした。
エラー 1、警告 3

となってしまいます。
opencvの設定についてはttp://imagingsolution.blog107.fc2.com/blog-entry-134.htmlを参照して行いました。
環境はVisual Studio 2008です。

問題点のご指摘よろしくお願いします。

108 :デフォルトの名無しさん:2009/07/09(木) 06:01:38
たぶんそれVC用のソースじゃないから
VC用のソースを探すかVC用に修正して使う。

109 :デフォルトの名無しさん:2009/07/09(木) 11:55:32
>>106
ありがとうございます。
VC++でぐぐっても、対象となるコンパイラのバージョンが明記されてないサイトが多くて困っています。
今のところVC++6.0やVS2005のサイトが多いでしょうか、
ある程度知識が付けば、ソースを見て判別できるようになると思うのですが。

最初に選ぶプロジェクトのテンプレートを変えれば、ヘッダの追加をしなくてもそのまま動く環境になりますか?
それとも2005用のソースを2008でコンパイルするには、毎回手直しが必要になってしまうものなんでしょうか。

110 :デフォルトの名無しさん:2009/07/09(木) 13:15:51
>>109
いや、大抵のことはバージョン問わず使える。

VC++で作れるアプリには、ネイティブアプリとマネージアプリと2種類あって、これがまるで別物。
Windowsフォームアプリケーションのプロジェクトは後者。<windows.h>を使うのは前者。
VC++のプロジェクトの中では、Win32アプリケーションなどが前者に属する。

自分が何を使って作りたいのか決め、それについての解説だけを追わないと混乱する。

111 :デフォルトの名無しさん:2009/07/09(木) 14:19:23
>>110
わかりました。
つまり、昔ながらのstatic xxx main関数があって、ソースの先頭に#include hoge.hが並んでいるような物が
今はネイティブアプリと分類されている、という解釈でよいでしょうか?

112 :デフォルトの名無しさん:2009/07/09(木) 14:38:31
それは標準C/C++

113 :デフォルトの名無しさん:2009/07/09(木) 18:17:12
あまりにも自分が無知すぎるので少しぐぐってきました。
「新しいプロジェクト」でテンプレートが5つのグループに分かれていますが、
CLRのグループに属しているのがマネージドアプリなんでしょうか。

すると一番下のWin32というのが、昔SDKと呼ばれていたものに相当するのかな?
古いサンプルを動かしたいときはMFCかWin32を選べばよさそうに思えます。

こんな理解で合ってますか?

114 :デフォルトの名無しさん:2009/07/09(木) 18:41:18
その5つぐらい全部試してみたって1時間もかからないだろうし、
自分の目で確認したほうが人に聞くよりはるかに理解しやすい。

115 :デフォルトの名無しさん:2009/07/09(木) 18:54:05
なんか初心者以前の質問が多いけど
最近はVCの入門書売ってないのか?

116 :デフォルトの名無しさん:2009/07/09(木) 19:07:48
VS2008でC#を使う、みたいに特定の環境に向けた本ならたくさんあるけど、
移植とか移行とか処理系の世代間の差異を解説したものは少ないと思うよ
ライブラリの比較とか、ソースの記述方法の変化みたいな話はCマガジンとかでよく見る

117 :デフォルトの名無しさん:2009/07/09(木) 19:44:31
いや、だからまず自分の環境用のそういう本買って初心者になれよって話だろ。


118 :デフォルトの名無しさん:2009/07/09(木) 22:23:24
ここは入門者もOKのスレじゃん

119 :デフォルトの名無しさん:2009/07/09(木) 23:33:39
初心者ですが質問いいでしょうか?
officeファイル(ppt,pptx,doc,docx)からファイルの情報(テキスト)を取得できる
プログラムは作れますか?
できればofficeの入ってないPCで実行したいです

120 :デフォルトの名無しさん:2009/07/09(木) 23:35:03
スレ違い


121 :デフォルトの名無しさん:2009/07/10(金) 01:03:46
どこのスレにいけばいいでしょうか?


122 :デフォルトの名無しさん:2009/07/10(金) 08:36:41
>119
現実にそういうプログラムが存在するか調べる。
存在するならどうやってるか調べる。

123 :デフォルトの名無しさん:2009/07/10(金) 10:57:53
>>122
初心者に優しくないのなら書き込むな。
立ち上げるな

124 :デフォルトの名無しさん:2009/07/10(金) 11:30:07
ここは子供電話相談室か?
小学生なら小学校の教科書の範囲を勉強すればいいし
初心者なら入門書の範囲を勉強すればいい
教科書の範囲外は卒業してから

125 :デフォルトの名無しさん:2009/07/10(金) 13:40:10
このスレ終了

126 :デフォルトの名無しさん:2009/07/10(金) 13:53:58
>>119
取り出したい情報による。
ファイルサイズとか更新日時なんてのはOfficeとか関係ないし
作者名や会社名は文字列がそのまま入ってるから、それっぽいデータなら
なんとか取り出せないこともない。
ちゃんとしたBuiltinDocumentPropertiesなんかの情報が欲しいんだと、
Officeのインストールされてないマシンではちょっと難しい。
それこそファイルのヘッダから構造体のポインタを追っかけるような
プログラムになると思う。初心者スレで質問してるレベルでは無理。

127 :デフォルトの名無しさん:2009/07/10(金) 14:11:45
>>120>>122>>124
>初心者スレで質問してるレベルでは無理。
=初心者ぷっ!w

128 :デフォルトの名無しさん:2009/07/10(金) 14:37:06
OOoでテキスト出力すれば良いんじゃね?

129 :デフォルトの名無しさん:2009/07/10(金) 15:16:06
次レス予測
「会社のマシンなのでOOoとか勝手にインストールできないんです」

130 :デフォルトの名無しさん:2009/07/10(金) 18:11:21
「OOoって何ですか?」ではないかと

131 :デフォルトの名無しさん:2009/07/10(金) 19:46:26
>>119
どの程度のことをやりたいかにもよるが、いずれにせよ基本的に適当なライブラリを見付けてそれを使えと言うことになる。
ただし、2007形式のほうはXMLをZIPで固めただけなので、その手のライブラリがなくてもなんとかなるかもしれない。
参考: http://www.atmarkit.co.jp/fjava/special/ooxml02/ooxml02_2.html

ただ、Officeの存在を当てにしていいならそのほうがずっと簡単。
OfficeそのものがプログラムからOffice形式のファイルを読み書きその他するライブラリとして機能する。

132 :119:2009/07/10(金) 20:54:14
お返事ありがとうございます
OpenOfficeで開けばいいのですがそこを自動化するプログラムを作成したいです。
>>126
具体的には以下の情報です
docファイル 本文、作者、更新時間
pptファイル 使われているテキスト、ノート、作者、更新時間

>>131
2週間ほど勉強してdocx,pptxはそのzip展開して情報を取り出すことまでできました。
docファイルとpptファイルがどうしようか悩んでいます。
バイナリ仕様が公開されているようですがどうも理解できません

>>126さんにあるようにヘッダから構造体、ポインタを勉強。
又は、利用できるライブラリ(フィルターでいいんでしょうか?)を探す。
この方法でいいんでしょうか?

133 :デフォルトの名無しさん:2009/07/10(金) 20:59:50
>131
そんなのとっくの昔にやってるってさ

134 :デフォルトの名無しさん:2009/07/10(金) 21:23:49
>>132
XDOC2TXT 呼び出せよ 割と使っているのは多い

135 :デフォルトの名無しさん:2009/07/10(金) 21:29:37
フィルタ活用事例
GoogleXdoc
Namazu for Win32
Hyper Estraier
Meadow2
MiGrep
VxEditor
smoopy
Transwise
EBView
サーチクロス

xdoc2txtはPDF,WORD,EXCEL,一太郎などの各種バイナリ文書から、テキスト要素を抽出する汎用テキストコンバータであり、
Windowsのコマンドラインで動作します。
xdoc2txtは各種文書の構造を直接解析しているため、単独で変換できます。
WORDや Acrobatなど、作成元のアプリケーションをインストールする必要はありません。
高速に動作するので、各種全文検索エンジンのフィルタに最適です。
ワープロ文書の種類は、拡張子から判別します。次の拡張子のファイルに対応しています。

リッチテキスト Microsoft WORD 2007(OOXML) Microsoft Excel 2007(OOXML) Microsoft PowerPoint 2007(OOXML)
.doc Microsoft WORD ver5.0/95/97/2000/XP/2003 Microsoft Excel ver5.0/95/97/2000/XP/2003
.ppt Microsoft PowerPoint 97/2000/XP/2003 OpenOffice.org Open Document
一太郎 ver5 一太郎 ver6 一太郎 ver7 一太郎 ver8/9/10/11/12
OASYS/Win 新松/松5/松6 Lotus 123 Windows3.1 Write Adobe PDF Webアーカイブ HTML
OutlookExpressのエクスポート形式


http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html

136 :デフォルトの名無しさん:2009/07/10(金) 21:38:28
どうみてもVCとは全く関係ない展開なんだが

137 :デフォルトの名無しさん:2009/07/10(金) 21:47:52
結局VC全然使う必要なかった

138 :デフォルトの名無しさん:2009/07/10(金) 21:55:41
xdoc2txt調べてみます
ありがとうございました。
こういう質問はどこでするのが適切でしたか?

139 :デフォルトの名無しさん:2009/07/10(金) 22:12:28
さすがにそれぐらい考えろや…
officeでもプログラムでも、いくらでもキーワード出るだろ

140 :デフォルトの名無しさん:2009/07/11(土) 22:39:34
#pragma once
ってプリプロセッサですよね?
どうやってプリプロセッサで
 インクルード1回だけ
ってのを実現しているのでしょうか?


141 :デフォルトの名無しさん:2009/07/11(土) 22:42:08
>>140
一般的なインクルードガードの手法はご存じない?

142 :デフォルトの名無しさん:2009/07/11(土) 22:45:41
質問です。
タスクトレイにアイコンを表示する方法を調べています。
調べてみたら、Shell_NotifyIconという関数を
使用すればいけることが分かりました。
とりえず、コンパイルだけ通してみようと試しましたが、
うまくコンパイルが通りません。
どうすれば、コンパイルを通せるようになるでしょうか?

エラーメッセージが
error LNK2028: 未解決のトークン (0A00000F)
"extern "C" int __stdcall Shell_NotifyIcon・・・・で参照されました。

error LNK2019: 未解決の外部シンボル
"extern "C" int __stdcall Shell_NotifyIconW・・・・で参照されました

Shell_NotifyIconを使用している関数の中身は

NOTIFYICONDATA notif;
Shell_NotifyIcon(NIM_ADD, ¬if);

しか書いていません。

環境はVC++2008 Express EditionのWindowsFormで作成しています。

よろしくお願いします。

143 :140:2009/07/11(土) 22:49:33
>>141
存じ上げています。
 #ifndef ***
 #define
 本ソース
 #endif
ですよね。

プリプロセッサは
コンパイラに引き渡す前の字句の置き換えを行うものだと
いう認識なのですが、
そうだとすると
#pragma once
ではどうやっているのか不思議だなぁということです。

144 :デフォルトの名無しさん:2009/07/11(土) 22:58:56
>>143
それなら話は簡単。内部的には同じことをやっていると思われ。
例えば/usr/include/stdio.hに#pragma oneceと書いてあったら、
#ifndef _USR_INCLUDE_STDIO_H
#define _USR_INCLUDE_STDIO_H
...
#endif
と書いてあると見做せばいいわけだ。

あとはここも要チェック。
スレを勃てるまでもないC/C++の質問はここで 11
http://pc12.2ch.net/test/read.cgi/tech/1245059383/686,687

145 :デフォルトの名無しさん:2009/07/11(土) 23:07:28
>>140
ようするにプリプロセッサが特別扱いで処理している。
字句の置き換えはやることの1つに過ぎない。

>>142
プロジェクトのプリパティのリンカの「追加の依存ファイル」のところにshell32.lib追加してみたら?

146 :デフォルトの名無しさん:2009/07/11(土) 23:08:13
>>144
なるほど。
ファイル名を利用しマクロ化しているなどの実装が考えられるというわけですね。

ありがとうございました。


147 :デフォルトの名無しさん:2009/07/11(土) 23:11:55
>>142
#include <shellapi.h>
#pragma comment(lib, "shell32.lib")

148 :142:2009/07/11(土) 23:22:17
>>145
>>147
ご回答ありがとうございます。
>>147さんの方法でコンパイルが通りました。
ありがとうございました。


149 :デフォルトの名無しさん:2009/07/12(日) 10:23:17
本屋に行ったけどCたすたすの本は少なく
#が多いんだけど
どっちで勉強してもいいんだろうか

MFCとかCOMとかAPIっていまさら何ですかね

150 :デフォルトの名無しさん:2009/07/12(日) 11:08:52
>>149
そりゃ両方できた方がいい
MFCが必要かどうかは作りたい物によるけど、COMとAPIは知らんと話にならんぞ

151 :デフォルトの名無しさん:2009/07/12(日) 11:41:42
ありがとうございます
じゃあ、その二つは早急に習得します
一か月ぐらいでかな

152 :142:2009/07/12(日) 12:36:29
質問です。
前回と同じで、タスクトレイにアイコンを表示する方法を調べています。
今度はLoadImageという関数を使用している部分でコンパイルエラーになります。

エラーメッセージが
未解決のトークン (0A00000B) "extern "C" void * __stdcall LoadImageW
・・・・で参照されました

error LNK2019: 未解決の外部シンボル "extern "C" void * __stdcall LoadImageW
・・・・で参照されました。

fatal error LNK1120: 外部参照 2 が未解決です。

ソースは

HINSTANCE hInst = GetModuleHandle(NULL);
NOTIFYICONDATA icn;
icn.hWnd = hwnd;
icn.uID = 100;
icn.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
icn.uCallbackMessage = WM_USER + 1;
icn.hIcon = (HICON)LoadImage(hInst,
MAKEINTRESOURCE ( "IDI_ICONTRAY"), IMAGE_ICON, 16, 16, 0 );
Shell_NotifyIcon ( NIM_ADD, &icn);

環境はVC++2008 Express EditionのWindowsFormで作成しています。

前回と同様、何かをインクルードすればいいのでしょうか。
現在はwindows.hとshellapi.hをインクルードしています。

よろしくお願いします。

153 :デフォルトの名無しさん:2009/07/12(日) 12:55:01
>>152
そういう質問ばかり増えるとおれらが困るので調べ方を教えておく

MSDNで目的の関数(ここではLoadImage関数)の解説を出す
http://msdn.microsoft.com/ja-jp/library/cc364835.aspx

最後のほうに
ヘッダーファイル xxxx.h をインクルード
ライブラリ xxxx.lib を使用

とか書いてある。それでもだめなら聞きに来なされれ

154 :デフォルトの名無しさん:2009/07/12(日) 12:56:44
Formだったら.netのみでやった方が簡単な気がする

155 :デフォルトの名無しさん:2009/07/12(日) 13:02:59
俺にはFormアプリケーションを作った経験はないんだが、Formアプリケーションって
APIを使う場合は必要なLibをいちいち全部自前でリンクしなきゃならないのかい?


156 :デフォルトの名無しさん:2009/07/12(日) 13:13:52
俺もFormアプリは詳しくないけど
C言語系では必要なLIBは自分で指定すんのが基本だからな

宿題スレなんか見てると、よく数学ライブラリをリンクしないで
コンパイル通りませーんって泣いてる初心者がいるよなw

157 :デフォルトの名無しさん:2009/07/12(日) 13:14:49
どんな形かは判らんが大抵使うよ宣言が要るんじゃないか

158 :142:2009/07/12(日) 13:56:11
>>153
教えてくださったページで、無事コンパイルが通りました。
ありがとうございます。

159 :デフォルトの名無しさん:2009/07/12(日) 14:30:21
>>149
C#はC++とは全く別の言語だぞ。名前がよく似ているだけで。

160 :デフォルトの名無しさん:2009/07/12(日) 15:03:06
>>149
C#はクソ言語
・・・とまでは言わないけど、
Javaと同じでC++より楽に習得できる。

C++はバカには使えないほど高度(変態)な言語だが
使いこなせるヤツはもう本当にすごい。

ちなみに俺はまだまだまだまだ使いこなせてません。

161 :デフォルトの名無しさん:2009/07/12(日) 15:27:24
つか、MFCくらいが一番面白い。

162 :デフォルトの名無しさん:2009/07/12(日) 16:01:46
じゃあ三つとも覚えればいいんですね
API 始めたばっかだけど

163 :デフォルトの名無しさん:2009/07/12(日) 18:08:11
visual C++2008を使っているのですが、cppファイルを開こうとするとメモ帳が表示されて、バイナリー表示?されてコードが見れないのですが
改善方法を教えてください。DirectX SDK November2007が入ってます。OSはXPSP3です。

164 :デフォルトの名無しさん:2009/07/12(日) 18:29:28
>>163
cppはテキストファィルだが、どこからどうやって開こうとしてる?
たとえばエクスプローラーからcppファイルをダブルクリック、とか
IDEからcppを右クリックしてコードを表示、とか。

165 :デフォルトの名無しさん:2009/07/12(日) 23:21:49
>>164
レス遅れましてすいません。
ソリューション開いてソースフォルダにあるcppファイルをダブルクリックで開こうとしてます。


166 :デフォルトの名無しさん:2009/07/13(月) 00:20:02
ダブルクリックの代わりに右クリックからファイルを開くアプリケーションの選択でどうか
うまくいったら規定値に設定で

167 :デフォルトの名無しさん:2009/07/13(月) 00:55:16
>>166
うまくいかないです・・・。VC上で開くことは出来たのですが文字化けしててダメでした。
VC入れなおしても直らないし、ウイルスに感染してるので設定がめちゃくちゃになったのかもしれません。
なのでOS入れなおすことにしました。お騒がせしてすいません。レスありがとうございました。


168 :デフォルトの名無しさん:2009/07/13(月) 11:55:25
文字化けは最初の質問とは別の話だな

169 :デフォルトの名無しさん:2009/07/13(月) 21:05:41
CLRプロジェクトの中で書かれたコードは、.NET Frameworkのライブラリを使わなくてもマネージドコードという扱いになるのでしょうか?

170 :デフォルトの名無しさん:2009/07/13(月) 21:18:16
そうだよ。
C#でclass C {static void Main() {}}のような何もしないプログラムを書いても
.NET Frameworkが実行に必要なのと同じようなことと言えばいいかな。

そうではなくて、ネイティブコードを混ぜたいという意味なら、
#pragma unmanagedなどで切り替えできる。

171 :デフォルトの名無しさん:2009/07/13(月) 21:21:49
>>170
よくわかりました
ありがとうございます

172 :デフォルトの名無しさん:2009/07/14(火) 17:38:13
VC++のC++で、現在のスタック領域の大きさを取り出す方法ありませんか?
スタックが少なくなったらエラー処理がしたいので、お願いします。

173 :デフォルトの名無しさん:2009/07/14(火) 17:41:25
>>172
スタックオーバーフローを回避したいならヒープ領域を使えば?

174 :デフォルトの名無しさん:2009/07/14(火) 17:46:43
いや、再帰処理のプログラムにエラー処理を組込みたいので。
現在は異常終了してしまうし。固定値で検査は出来るけど、
固定値は入れたくないし。

175 :デフォルトの名無しさん:2009/07/14(火) 17:55:17
ESP見るとか

176 :デフォルトの名無しさん:2009/07/14(火) 17:57:13
>>174
スタックオーバフローチェックのコンパイラオプションではダメなの?

177 :デフォルトの名無しさん:2009/07/14(火) 18:01:46
そもそも、スタックオーバーフローになるような組み方をしている再帰処理に問題があるんじゃないか?

178 :デフォルトの名無しさん:2009/07/14(火) 18:07:27
離散数学の問題を解くようなプログラムだと簡単にオーバーフローしちゃうから
その辺はプログラムを作るときに工夫するよう、自分で考えたほうがいい。
あれは簡単には解けない、ってことを確認するのも勉強のうちだから。
学生じゃなかったら的外れな回答でごめん。

179 :デフォルトの名無しさん:2009/07/14(火) 18:17:52
まあ、たしかに、スタックオーバーフローするようなプログラムにしない、
と言うのは正しい。しかしまあ、出来るならば再帰の中で検査をしたいと
思っています。今現在は#define STACKSIZE  1000000 で固定値で
検査をしているのですが、コンパイルオプション変えるたびにプログラム
修正もいやだなーと。しかし、調べた限り簡単では出そうに無いですね。
あきらめて固定値で行こうと思います。

180 :デフォルトの名無しさん:2009/07/14(火) 18:37:58
こういうの見た?
ttp://www.nminoru.jp/~nminoru/programming/stackoverflow_handling.html

181 :デフォルトの名無しさん:2009/07/14(火) 19:29:38
ありがとうございます。でも今やってみたのですが。
コンパイルスタック指定 1000000で下記のような出力に。
[00130000 00126000]
p=0012FF60
dat p=001177DB
dat p=000FF047
dat p=000E68B3
dat p=000CE11F
dat p=000B598B
dat p=0009D1F7
dat p=00084A63
dat p=0006C2CF
dat p=00053B3B
dat p=0003B3A7  <−ここの次でスタックオーバーフロー
プログラムは、下記ですが、出力が納得できない…
NT_TIB* getTIB(void) {
NT_TIB* pTib;
__asm {
mov eax, dword ptr FS:[18H];
mov pTib, eax;
}
return pTib;
}
void testp() {
 char buf[100000]; char dat;
 printf("dat p=%p\n",&dat); testp();
}
int _tmain(int argc, _TCHAR* argv[]) {
 NT_TIB* pTIB = getTIB();
 printf("[%08x %08x]\n", pTIB->StackBase, pTIB->StackLimit);
 printf("p=%p\n",&pTIB); testp(); return 0;
}

182 :デフォルトの名無しさん:2009/07/14(火) 19:31:58
行数オーバーで圧縮しています。
[00130000 00126000]
のStackBase,とStackLimitの範囲が1000000も無い、
スタックオーバフローは約1000000でオーバーしているので正しい
なぜなんだろう?

183 :デフォルトの名無しさん:2009/07/14(火) 19:32:48
文字列の処理について教えてください。
VisualStudioでC++のプロジェクトを作ると、以下のようなグローバル変数が自動的に宣言されますが、

    TCHAR szTitle[MAX_LOADSTRING];  // タイトル バーのテキスト

ここにTCHAR型のローカル変数と同じ方法で文字列を代入しようとすると
コンパイルエラーになってしまいます。

    TCHAR test[MAX_LOADSTRING] = _T("これは大丈夫");
    szTitle = _T("エラーになる");

同じ型の変数を宣言しているつもりですが、結果が違ってしまうのはどうしてでしょう?

184 :デフォルトの名無しさん:2009/07/14(火) 19:34:34
>>183
C言語の入門書本屋で買ってこい

185 :181:2009/07/14(火) 19:36:01
う〜〜ん、他のHPで、わざとスタックオーバーフローさせて、サイズ検出が
あったが、それしかないのか? ちょっとやってみる。

186 :デフォルトの名無しさん:2009/07/14(火) 19:37:56
>>185
だからぁ、>176じゃダメなの?

187 :デフォルトの名無しさん:2009/07/14(火) 19:40:47
>>186
/RTC、/GSの事なら全くの別物

188 :デフォルトの名無しさん:2009/07/14(火) 19:47:21
>>182
コミット済みのサイズだからじゃね

189 :181:2009/07/14(火) 20:07:36
>>188
コミットのサイズ変えても、出力は変わらず。
う〜〜ん、例外検出がなかなかうまくいかず。
それにわざとエラー出して、サイズ検出もなんとなく納得できないし、
結局、固定で持ったほうが早そうな気がしてきました。
どうせコンパイルするんだし…
皆さんありがとうございました。

190 :181:2009/07/14(火) 20:18:00
補足。testp()の中にスタック情報出すのを入れた場合下記のよう。
やはりコミットで増えるようですね。最大値は相変わらず不明ですが。
[00130000 00126000]
p=0012FF50
[00130000 00117000]
dat p=001177B7
[00130000 000fe000]
dat p=000FF003
[00130000 000e6000]
dat p=000E684F
[00130000 000cd000]
dat p=000CE09B
[00130000 000b5000]
dat p=000B58E7
[00130000 0009c000]
dat p=0009D133
[00130000 00084000]
dat p=0008497F
[00130000 0006b000]
dat p=0006C1CB
[00130000 00053000]
dat p=00053A17
[00130000 0003b000]
dat p=0003B263
この後オーバーフロー


191 :デフォルトの名無しさん:2009/07/15(水) 09:39:53
>>184
馬鹿だから答えられないのですね。
書き込むな!クズ!

192 :デフォルトの名無しさん:2009/07/15(水) 09:55:29
>>191
その一言でキミの相手するやつは激減したよ。
いつもそんな調子だから人に相手されなくなるんだよ。

193 :デフォルトの名無しさん:2009/07/15(水) 09:59:10
>>183
文字列もどきの処理は、型によってケースバイケースでわかりにくいからねえ。
もうちょっとマクロとか関数が整理されてたらよかったんだけど。
そういうのの一覧が載った本を見たほうが早いと俺も思うよ。
さもなくば、文字列がもうちょっと簡単に使えるC#あたりに乗り換えるか。

その場合は
_tcscpy_s(szTitle, _T("てすと"));
ただしコピー先のサイズは固定で自動的に拡張してくれないから
文字列の長さがコピー先の容量を超えてると代入に失敗する。
コンパイル時か実行時か、どちらか容量オーバーが発見されたタイミングでエラーが出る。

194 :デフォルトの名無しさん:2009/07/15(水) 10:13:06
そういうのも代入と言う?
馬鹿がうつった?

195 :デフォルトの名無しさん:2009/07/15(水) 10:49:59
父ちゃんに言われなかったか?
やらないのはできないのと一緒だって
早くハロワ行けよ

196 :デフォルトの名無しさん:2009/07/15(水) 23:35:30
総合開発環境の下部のメッセージ部分に出力するにはどうすればいいんでしょうか?
デバッグ用に使ってるのを見かけたんですがやり方が書いてありませんでした

197 :デフォルトの名無しさん:2009/07/16(木) 00:15:46
>>196
OutputDebugString

198 :デフォルトの名無しさん:2009/07/16(木) 00:23:19
ありがとうございます!

199 :デフォルトの名無しさん:2009/07/16(木) 00:33:23
CLRだとSystem::Diagnostics::Debug::WriteLineだけどな

200 :デフォルトの名無しさん:2009/07/17(金) 15:35:37
C++のCLRってVBやC#より処理早いの?

201 :デフォルトの名無しさん:2009/07/17(金) 15:53:47
おなじ NETのアセンブラにするんだろ

202 :デフォルトの名無しさん:2009/07/17(金) 17:24:34
強いて言えば、VB.NETやC#と違って
標準でSuppressUnmanagedCodeSecurityAttributeが付くので、
ネイティブコードの呼出はC++が速いらしい。
(もちろん、C#やVB.NETでもSuppressUnmanagedCodeSecurityAttributeを使えばその点は同じになる)

203 :デフォルトの名無しさん:2009/07/18(土) 00:14:35
>>201
レスありがとう

204 :デフォルトの名無しさん:2009/07/18(土) 00:15:22
>>202
詳しくありがとうございます

205 :デフォルトの名無しさん:2009/07/19(日) 04:41:53
普段2003を使ってるんだけど
Visual Studio 2008 Express を使ってみたんだ
インテリセンスがすごくよくって
関数を使おうと書き始めると候補が出てきて途中でエンター押すと
全部書いてくれてすごく良いんだ
この機能って2008になってから出来たの?

206 :デフォルトの名無しさん:2009/07/19(日) 08:11:47
2005も有るけど、新しい方がいいらしい

207 :デフォルトの名無しさん:2009/07/19(日) 10:23:25
着実にVer.Upしてるよ。 VC6のインテリセンスのガリガリガリガリはまだ記憶に新しい。

208 :デフォルトの名無しさん:2009/07/19(日) 13:40:50
2008のインテリセンス、マジキチすぎ。
キーボード5つぐらいしか押してないのに50文字ぐらいの長い命令文がいつのまにか入力できてる。
プロパティとメソッドの区別も一発でわかるようにアイコンが付いてるし、自分で作ったクラスまで
自動的に登録されてるし。

209 :デフォルトの名無しさん:2009/07/19(日) 13:43:51
しかし、C#やVBはさらにその上を行くのであった。
たまに触ると本当に羨ましく感じる。

210 :デフォルトの名無しさん:2009/07/19(日) 13:44:52
おかげで命令のスペルうろ覚えの時がある。

211 :デフォルトの名無しさん:2009/07/19(日) 13:47:33
C++にもっと力入れてほしいな
webは作れないんだよね

212 :デフォルトの名無しさん:2009/07/19(日) 14:04:43
VS2008を使っているのですが、
クラスビューでプロパティを選択して、
イベント、オーバーライド、メッセージを選択しても
全く表示されなくなりました。

どうしてなんでしょうか?

新規作成時、直後は問題ないのですが、開発途中で、
表示が消えるので、新たに関数などの追加ができなくなって困っています。

直し方はあるのでしょうか?

213 :デフォルトの名無しさん:2009/07/19(日) 14:05:27
>>211
CGIは?

214 :デフォルトの名無しさん:2009/07/19(日) 15:27:05
>>212
うっかりプロジェクトファイルとか消してない?
鯖に共有フォルダ作って共同開発とかしてると、たまに誰かか勝手にファイルを移動しちゃうことがあって困る。

215 :デフォルトの名無しさん:2009/07/19(日) 19:02:40
Subversionお勧め
EEじゃなけりゃAnkhSVNも

216 :デフォルトの名無しさん:2009/07/19(日) 20:01:26
212ですが、
自己解決?しました。

正しい、やりかたではないと思いますが、
ソリューションファイル等があるフォルダにある
VC++ Intellisense Database
のファイルを削除して、もう一度、VS2008を起動させて、
ソリューションファイルを開くと、自動的にもう一度、
VC++ Intellisense Databaseファイルが作られるので、
それで、直りました。

正しいか不明だけどね。
お騒がせしました。

217 :デフォルトの名無しさん:2009/07/19(日) 20:02:56
それならよくあること。気にするな。

218 :デフォルトの名無しさん:2009/07/19(日) 20:44:02
public: がダメ、総てアクセッサー付けろは OOP原理主義者。

219 :デフォルトの名無しさん:2009/07/19(日) 21:06:58
こいつは何を言っているんだ?

220 :デフォルトの名無しさん:2009/07/19(日) 21:46:12
std::tr1::
などと打ったときに最後の::の後を自動補完する候補が出るときと出ないときがあるんですが
これを毎回出すようにするにはどうすればいいんでしょうか?

221 :デフォルトの名無しさん:2009/07/19(日) 22:29:18
インテリセンスは気まぐれだからなぁ。
一応CTRL+SPACEを押せば強制的に候補一覧(候補がひとつしかないときは一気に確定)できるけど
必ずしも成功するとは限らないところがVC++のいいところ。

これがVBやVC#、今はなきVJ++ではほぼ100%確実に候補が出る。
で、開発者いわく、インテリセンスは結局のところ「コンパイラそのもの」なんだそうで、
リアルタイムコンパイルしながら候補を絞り込んでるわけだけど、
C++は言語が複雑すぎてちゃんとできねーんだとさ。

222 :デフォルトの名無しさん:2009/07/19(日) 22:49:34
ほとんどは、その前の文にエラーがあるとインテリセンスは動かない。

223 :デフォルトの名無しさん:2009/07/22(水) 15:46:08
質問します
環境は「VC2008ExpEdition + .net」です
Bitmap^ abcimg=gcnew Bitmap(300, 400);
Graphics^ abcgraf=Graphics::FromImage(abcimg);
abcgraf->FillRectangle(Brushes::Black, 0, 0, abcimg->Width, abcimg->Height);
pictureBox1->Image= abcimg;
で作られた画像の真ん中にナスのような形のグラフが書き込まれます。
そのグラフを白で塗りつぶして面積を求めたいのですが、塗りつぶしがうまくいきません
別のやり方があれば教えてください
Color abcclr;
for(j=0;j<400;j++){
 for(i=0;i<300;i++){
 abcclr=abcimg->GetPixel(i,j);
 Byte r=abcclr.R;Byte g=abcclr.G;Byte b=abcclr.B;
 if(r>1){
  if(mode==0){//最初の境界を発見した!
  bforx=i;bfory=j;mode=1;//フラグを立てて管理
  //↓は最初境界の終わりを探す
  while(r==0){abcclr=abcimg->GetPixel(i+1,j);r=abcclr.R;g=abcclr.G;b=abcclr.B;i++;}
  }else{//フラグ立ってるので現在値まで塗りつぶしのために白い線を引いてフラグを消す
  abcgraf->DrawLine(Pens::White,bforx,bfory,i,j);mode=0;}
 }// (R>1)節の終わり
 abcclr=Color::FromArgb(r,g,b);
 abcimg->SetPixel(i,j,abcclr);
 }//iのforループの終わり
 mode=0;
}//jのforループ終わり

224 :デフォルトの名無しさん:2009/07/22(水) 16:39:58
単にロジックの問題なのかapiの使い方の問題なのかはっきりしろ

225 :デフォルトの名無しさん:2009/07/22(水) 17:04:05
223 です
途中まではうまくいくが、グラデーションのように黒い線(塗りつぶしの失敗)が入ります
######
######
########
#     #
#      #
##########
のような感じに。下手な説明&AAですみません。


226 :デフォルトの名無しさん:2009/07/22(水) 17:24:26
すまんが、まったくわからん。
画面キャプチャしてUPするなり、他人に伝える工夫と努力が必要。

227 :デフォルトの名無しさん:2009/07/22(水) 21:59:48
何かまったくの思いつきで作ったとしか見えないんだが
それ仮に動いたとして使いものになるのか?

228 :デフォルトの名無しさん:2009/07/22(水) 23:02:03
全くの初心者なんですが、VC++2008を使った教本でお薦めのものってありませんか?

229 :デフォルトの名無しさん:2009/07/22(水) 23:09:23
本屋で実際に手に取って見るのがお薦め。

230 :デフォルトの名無しさん:2009/07/22(水) 23:26:41
最低限C/C++は知ってる前提だから
そうじゃなくてC/C++から勉強したいならVCというよりC/C++の入門書だし
C/C++スレで質問した方がいい。

231 :デフォルトの名無しさん:2009/07/22(水) 23:35:31
VC++2008の初心者じゃなくてC++の知識がないってことかな?
まあ
>>230
の言う通り過ぎて付け加えることがない。

232 :デフォルトの名無しさん:2009/07/22(水) 23:47:17
C++の本はたくさんあるけど
IDEの基本から上手な使い方みたいなことが書いてある本ってないよね
プロパティとかどう弄ったらよくなるのかとかいまいちわからない

233 :デフォルトの名無しさん:2009/07/23(木) 01:49:59
>>230 >>231
なるほどVC++の初心者に使いかたを教えるスレだったんですね気づきませんでした

C/C++の知識が無いプログラミング初心者なんです
それでVC++インスコしてネットや本屋で教本の類を幾つか読んでみたんですけどVC++を使って教えてるのが見つからなかったんですよ
全くの初心者なので用語の意味とか全然分からないし本で言っている事がVC++の機能のどれを指してるのか、どこにあるのか分からなかったりと
なかなか先に進まないのでVC++2008を使った解説本が無いかと思ったんですがお勧めの物ありませんかね?
それともやっぱりC/C++スレで聞いたほうが良いですかね?

234 :デフォルトの名無しさん:2009/07/23(木) 02:04:00
CかC++をやって、言語の仕様をしっかり理解してからVCやることをオススメする
Cを理解する頃には意味不明なところがしっかりわかるようになるはず

235 :デフォルトの名無しさん:2009/07/23(木) 02:20:19
>>234
そういう意味でのVCではなくて、プロジェクトの作ってビルド・実行するとかデバッガの使い方について知りたいんだと思う。

236 :デフォルトの名無しさん:2009/07/23(木) 02:27:47
そーいうのはヘルプ見りゃわかるだろ。
ただし、C/C++の用語がわからんと理解できんだろーから、必要なのはC/C++の入門書ということになる。

したがってスレ違い。

237 :223:2009/07/23(木) 10:35:21
223です。説明が足りないといわれたので、追記に来ました
http://upload.jpn.ph/ にUPしました
u44616.jpg  というファイル名です
左が線だけの状況。実は点なんですが、DrawLineで繋げてます。
閉鎖空間であることは確認済みです
右が223のプログラムで塗りつぶそうとした結果です
どうみても失敗してます。原因がわからなくて悩んでました

238 :デフォルトの名無しさん:2009/07/23(木) 11:31:24
>>237
画像のアドレスはこういうふうに書けば回答者がすぐに確認できる
ttp://upload.jpn.ph/upload/img/u44616.jpg

それからソースが汚すぎる。
ちゃんと式の終わりごとに改行して演算子の前後にスペースを入れて
インデントをつければ「forの終わり」とかコメントをいちいち
書く必要がなくなる。たとえばこんなふう

int i, j, k;
for (i = 0; i < 10; i++)
{
  for (i = 0; i < 10; i++)
  {
    k = i + j;
    printf("%d ", k);
  }
}

ちゃんと調べたわけじゃないけど、whileの中で変数 i をいじってるのが
原因じゃないかって希ガス

239 :デフォルトの名無しさん:2009/07/23(木) 11:56:14
うちで試してみたら、ちゃんと動いたじぇ
追加したのは、変数宣言と、DrawLineでテスト用の画像をてきとーに作る部分だけ

int i, j, mode;
int bforx, bfory;

個人的には、いちいちRGBに分解した意味がわかんなかったけどもな

240 :デフォルトの名無しさん:2009/07/23(木) 12:14:24
そのアルゴリズムだと、境界線の角度が浅くて横に2ドット以上
白いピクセルが続いた時におかしくなる
白いピクセルの連続が偶数個だと、そのラインは塗られないから
黒く残ってシマシマになる

241 :デフォルトの名無しさん:2009/07/23(木) 12:16:38
あ、白じゃなくて赤か。

242 :デフォルトの名無しさん:2009/07/23(木) 12:36:16
シマシマ節子さん

243 :223:2009/07/23(木) 13:08:23
回答ありがとうございます
一応、白が続いた時用にwhileで境界線である白の終わりを判断して飛ばしてます。
while(r==0){abcclr=abcimg->GetPixel(i+1,j);r=abcclr.R;i++;}
>240 さんの言うところが調子悪かったのですね。いじってみます。
RGBに分けたのは、今後の発展を考えてでありまだ何も実装してません。


244 :デフォルトの名無しさん:2009/07/23(木) 13:30:05
LNK2019とLNK2001のエラーがどうしても消えないのですが、
何が原因のものなのでしょうか

245 :デフォルトの名無しさん:2009/07/23(木) 13:40:38
>>244
ヘッダのインクルード忘れ。
ライブラリのリンク忘れ。

246 :デフォルトの名無しさん:2009/07/23(木) 14:00:33
>>243
だから、改行とインデントはちゃんと入れろと言ってるのに
while (r == 0)
{
  abcclr = abcimg->GetPixel(i + 1, j);
  r = abcclr.R;
  i++;
}

247 :デフォルトの名無しさん:2009/07/23(木) 14:30:08
VC6でCDiaLogを基にしたCTestクラスを作って

void CTest::OnButton1()
{処理}

void CTest::OnButton2()
{処理}

上のようなプログラムはクラスウィザードで出来ますが

void CTest::OnButton1()
{関数();}

void CTest::OnButton2()
{関数();}

void 関数()
{
処理
}

処理にUpdateData()などCDiaLogクラスの関数(メンバ)を使ってるから
エラーになります。ボタンを押す、などのイベントがあるなら関数を
作れますが、CTestにアクセスできる空の関数を作るにはどうしたら
良いですか?


248 :デフォルトの名無しさん:2009/07/23(木) 14:55:05
>>247
クラスウィザードで作れるでよ

249 :デフォルトの名無しさん:2009/07/23(木) 14:55:23
>>247
void CTest::関数()  // CTest のメンバ関数にすれば、処理にUpdateData() してもアクセス違反にならない。
{
処理
}


250 :デフォルトの名無しさん:2009/07/23(木) 15:27:47
>>248-249
クラスウィザードでのやり方がわからないので最初に249の方法
試したら出来ました。サンクス。

251 :デフォルトの名無しさん:2009/07/23(木) 21:43:05
directxを使ったコードを書き、フォームを追加してみたのですが
「1>cl : コマンド ライン error D8016 : コマンド ライン オプション '/MTd' と '/clr' は同時に指定できません」
と出てコンパイルエラーが出ます。この二つは併用できないと思っていいんでしょうか??


252 :デフォルトの名無しさん:2009/07/23(木) 21:54:08
>>251
はい。DLL版CRT使いましょう。

253 :デフォルトの名無しさん:2009/07/23(木) 21:57:12
>>252
ありがとうございます
C++ややこしいですね><

254 :デフォルトの名無しさん:2009/07/23(木) 22:12:39
/clrということはC++/CLIだからC++ではない

255 :デフォルトの名無しさん:2009/07/27(月) 16:37:52
Visual Studio2008で
ソースの文字検索時に該当箇所を一括で強調(色が変わるとか)して表示するような設定ってありますか?
次を検索・・次を検索で見ていく方法が使いにくいです


256 :デフォルトの名無しさん:2009/07/27(月) 16:44:38
>>255
VS2008内蔵エディタには、検索した文字列に一括で色を付ける機能はないので、
外部エディタを何か設定して使うといい。
あとは、行単位になっちゃうけどブックマークぐらいかなあ。

257 :デフォルトの名無しさん:2009/07/29(水) 12:52:30
Visual Studioはバージョンアップごとに進化しても、Visual C++はまったく進化しないな。

258 :デフォルトの名無しさん:2009/07/29(水) 12:56:48
バージョンが上がるたびにコマンドの位置や名前が変わること…
それがMicrosoftの考える「進化」。

259 :デフォルトの名無しさん:2009/07/29(水) 17:13:13
>>257
2010のインテリセンスは進化しているって。

260 :デフォルトの名無しさん:2009/07/30(木) 00:38:59
クラスのメンバ関数がよくわからないのですが、詳しく解説してる本とかありますか?


261 :デフォルトの名無しさん:2009/07/30(木) 00:55:12
MSDN

262 :デフォルトの名無しさん:2009/07/30(木) 01:28:07
MSDNって小難しい上に時々間違ってない?

263 :デフォルトの名無しさん:2009/07/30(木) 01:34:23
詳しく解説してる本ほどじゃない

264 :デフォルトの名無しさん:2009/07/30(木) 01:43:33
俺詳しくないから、MSDNで調べてその意味を調べるためにネットを徘徊する羽目になる

265 :デフォルトの名無しさん:2009/07/30(木) 07:08:20
msdnってある程度知識がないと読めないのがネックだな

266 :デフォルトの名無しさん:2009/07/30(木) 11:04:29
VCの特定のクラスの特定のメンバ関数じゃなくて
メンバ関数そのものがわからないならMSDNじゃなくてオブジェクト指向か言語の本

267 :デフォルトの名無しさん:2009/07/30(木) 11:36:54
そっちか

268 :デフォルトの名無しさん:2009/07/30(木) 22:28:14
質問させてください。
Form1からForm2を呼び出すことはできたのですが、その後
Form2からForm1を呼び出すべく、Form1をForm2にインクルードすると
どちらでも定義が見つからない旨のエラーが出てしまいました。

どのようにすれば相互に見つけられるでしょうか?

269 :デフォルトの名無しさん:2009/07/30(木) 22:57:19
>>268
インクルード命令ってのは、インクルート先のファイルをその場所に展開する命令。
頭の中で、展開されるとどうなるのか想像してみれ。

あと一応インクルードガードでググっておくこと。

270 :デフォルトの名無しさん:2009/07/30(木) 23:27:18
C++じゃなくて、C++/CLIの悪寒。

271 :デフォルトの名無しさん:2009/07/30(木) 23:35:50
おおおおそろしや

272 :デフォルトの名無しさん:2009/07/31(金) 00:49:39
今日ビルドしたら急に他のPCで動かなくなりました
29日に公開されたランタイム入れたらできたんですが
これって新しくランタイムいれなくてもいいようにできますか?

273 :デフォルトの名無しさん:2009/07/31(金) 01:04:06
旧版(の、ActiveX関係?)には致命的なセキュリティホールがあるので絶対に使わないこと。

274 :デフォルトの名無しさん:2009/07/31(金) 02:02:20
ほかのPCでもWindows Updateで新しいランタイムが自動的にインストールされるはず。

275 :デフォルトの名無しさん:2009/07/31(金) 05:35:35
268
Form1はmeで呼び出せると思うけど

276 :デフォルトの名無しさん:2009/07/31(金) 05:36:23
アンカー忘れてたw

>>268
Form1はmeで呼び出せると思うけど

277 :デフォルトの名無しさん:2009/07/31(金) 18:22:48
a

278 :デフォルトの名無しさん:2009/07/31(金) 18:25:23
Visual C++ 6.0を使用しています。
プロジェクト→プロジェクトへ追加→ファイルを選択すると、
「動作を停止しました」と出てきてしまいます
このせいで複数のファイルのビルドができなくて困っています
どなたか教えてください

279 :デフォルトの名無しさん:2009/07/31(金) 19:06:53
そうやってそんなエラーでた経験ないし、
複数のファイルのビルドができなくて困ったこともない。
どこか違う世界にお住まいの方ですか?

280 :デフォルトの名無しさん:2009/08/01(土) 20:41:51
すんません。visual c++ 2008をインストールした後で特定のページを閲覧すると
フォントが擦れてしまうバグってどう解決するんでしょう。

ググッても出てこなくて困っとります。以前同じような状況に陥ったときは
たしか何かフォントを削除すると直った気がするのですがさっぱり忘れてしまいました。
どなたかわかる方教えては頂けないでしょうか。すみません。

281 :デフォルトの名無しさん:2009/08/02(日) 09:43:51
すんません。
printfが表示させる関数ってぐらいしか知識無いんですが、
ミクミクダンスを作るみたいにプリグラムできるようになるのは
どのくらい勉強したらなれるんでしょうか?
さすがに70時間勉強したら作れるとかなんて思ってません。
2年ぐらい毎日1時間ぐらいやってたら作れますか?

282 :デフォルトの名無しさん:2009/08/02(日) 13:36:13
人に理解して貰いたいならそれ相応に推敲しろよ
プログラム以前の問題だぞ

283 :281:2009/08/02(日) 14:51:43
初心者の僕が毎日1時間2年勉強し続けたらミクミクダンスをつくるぐらいのスキルが実につきますか?


284 :デフォルトの名無しさん:2009/08/02(日) 15:07:02
もっと短くてもいいと思うけど1日1時間じゃ、前の日のおさらいだけで終わっちゃいそうだな

285 :デフォルトの名無しさん:2009/08/02(日) 15:19:31
>>283
2年後にここに結果を書け

286 :デフォルトの名無しさん:2009/08/02(日) 17:31:15
VisualC++2003で開発されたフリーソフトを使ってるんですが、
同封されてるビープ音のwavファイルが再生されません

作者さんのサイトにはサウンドにDirectSoundを利用していると書いてあるので、
一応DirectX診断ツールを使ってDirectSoundのテストをしてみましたが、
「このサウンドカードはハードウェアによるバッファの使用をサポートしていません。
サウンドはソフトウェアバッファから再生されます。」

と注意は出るもののテストは全て成功しました。

作り手側の方たちから的確なアドバイスがいただけるかと思い質問させてもらいます。

フリーソフトはこちらになります
ttp://www.musenken.net/project/denken/

OSはXP SP2です

よろしくおねがいします。

287 :デフォルトの名無しさん:2009/08/02(日) 17:37:18
コピペかな
作者に聞いてください
WindowsUpdateはちゃんと実行しましょう

288 :デフォルトの名無しさん:2009/08/02(日) 17:37:51
>>286
ソフトの作者に訊きなさい

289 :デフォルトの名無しさん:2009/08/02(日) 17:44:05
よくあることなのかと思い気軽に質問してみましたが、確かにそれが一番確実ですね。
時間のある時にでも作者さんにメール出して一度聞いてみます。

ありがとうございます。

290 :286:2009/08/02(日) 18:23:58
さっそくメール送ってみたらエラーで返ってきてしまった…

291 :デフォルトの名無しさん:2009/08/02(日) 21:45:56
VC++2008で開発してます。

大容量のファイルをC++で作成するとき、ちょっとずつ書き込んでいくと、
ディスク内にフラグメントが出来そうなので、先行してディスクの領域を
確保した上で書き込みたいなと思っています。

これは考え方は正しいでしょうか?正しければ、やり方を教えてください。

よろしくお願いします。


292 :デフォルトの名無しさん:2009/08/02(日) 21:51:35
ofstream outfile( "filename.txt" );
outfile << data1;
outfile << data2;
outfile << data3;
...

びっくりすることに、C++のファイルストリームはバッファという仕組みがあったのです!


293 :デフォルトの名無しさん:2009/08/02(日) 22:49:38
>>291
SetFilePointerとSetEndOfFileを組み合わせる。
http://www.google.co.jp/search?q=setfilepointer+setendoffile+%E9%A0%98%E5%9F%9F+%E7%A2%BA%E4%BF%9D

誰か、SetFileValidDataについて教えて。

294 :デフォルトの名無しさん:2009/08/03(月) 00:03:31
ttp://msdn.microsoft.com/en-us/library/aa365544.aspx

295 :デフォルトの名無しさん:2009/08/05(水) 12:15:59
特権必要だしその用途にSetFileValidDataは全く必要ない

296 :デフォルトの名無しさん:2009/08/06(木) 12:42:38
Solution
  Project Main
    Main.cpp

  Project Hoge (class Hoge)
    Hoge.cpp
    Hoge.h

  Project Fuga (class Fuga)
    Fuga.cpp
    Fuga.h

MainはHogeとFugaに依存
includeパスにソリューションディレクトリを追加
Mainからは#include "(Project)/(Header).h"で参照

という風にやってるんですが
これだとプロパティを変更する時にいちいち全部のプロパティを変えないといけません
ソリューション全体で共通のプロパティを一発で適応させる方法は無いんでしょうか?

297 :デフォルトの名無しさん:2009/08/06(木) 17:28:35
win32APIがあるってことはwin64APIもあるのかな?

298 :デフォルトの名無しさん:2009/08/06(木) 17:29:22
ひとりごとです

299 :デフォルトの名無しさん:2009/08/07(金) 01:50:32
>>297
あるけど大差ないのでまとめてWindows APIと呼ぼうぜという雰囲気。

300 :デフォルトの名無しさん:2009/08/07(金) 03:24:13
>>299
レスありがとう
へーやっぱりあるんだ
勉強になった

301 :デフォルトの名無しさん:2009/08/07(金) 10:23:53
>>296
VisualStudioスレで聞くといいと思います。

302 :デフォルトの名無しさん:2009/08/07(金) 14:23:28
ttp://sunafukin.jp/dannatti/software/vc/control/chap6.html を参考にして
タブを切り替えると表示されるコントロールを変わるようにしたのですが
タブ内のコントロール表示は連動してるものの最初の描画位置がおかしく
ウィンドウを動かすとそれらのコントロールが置き去りになってしまいます

タブ内コントロールの初期位置、ウィンドウ移動時の
表示ずれ修正はどうすればいいでしょうか?
環境はVS2008 Proで、その際のコードは下記です
ttp://www.dotup.org/uploda/www.dotup.org12110.rar


303 :デフォルトの名無しさん:2009/08/07(金) 14:50:13
>>302
本来ならそのページの主に訊くのが筋なんだが・・・

>ウィンドウを動かすとそれらのコントロールが置き去りになってしまいます
タブに貼り付けているダイアログのスタイルを「子」にしていないだろ?

304 :デフォルトの名無しさん:2009/08/07(金) 15:09:46
>>303
その他にある Control は True にしてましたが
Styleは書かれてなかったのでホップアップのままでした
指摘された通り子にしたところちゃんと描画されました
ありがとうございます

305 :デフォルトの名無しさん:2009/08/07(金) 23:30:07
>環境はVS2008 Proで

宝の持ち腐れ。

306 :デフォルトの名無しさん:2009/08/08(土) 02:47:44
VSのToolBoxにある各アイコンを
抽出する方法ありませんか?

ResHackerで色々なexeやdllを調べたのですが
どこにも見当たらなくて



307 :デフォルトの名無しさん:2009/08/08(土) 07:01:48
MSに著作権があると思うのだが、無視して使うのか?

308 :デフォルトの名無しさん:2009/08/08(土) 10:29:59
VS2008であれば VS2008ImageLibrary.zip に同様な画像のリソースが付属している。

309 :デフォルトの名無しさん:2009/08/09(日) 09:24:18
VS2005のVC++で、Wizard生成のMFCアプリケーシュオンプロジェクトの質問です
Debugをアクティブにした状態でビルドしたguiアプリケーションって他のosでも動きますか?
osはxpでビルド→2000で実行なんだけどReleaseでビルドしたものだけ正常動作したのでちょっと疑問に思った



310 :デフォルトの名無しさん:2009/08/09(日) 14:13:21
うごく

311 :デフォルトの名無しさん:2009/08/09(日) 14:19:49
Debugのランタイムはどうした?

312 :デフォルトの名無しさん:2009/08/09(日) 18:25:54
Visual C++ 2008 Express Edition を使っています。
デバッグ中にステップ実行でmain関数を抜けるときに、「現在の場所のソースコードを表示できません」
というエラーが何回も出るのですが、これはなぜなのでしょうか。
また、このエラーが出ないようにする方法はあるのでしょうか?

313 :デフォルトの名無しさん:2009/08/09(日) 18:31:31
基本的に、main関数の外は我々プログラマが関知してはいけない混沌の領域だから。
慣れてくるとそこも見たりするようになるけど。

デバッグビルドでそのエラーが出るなら、基本的にどうしようもない。

314 :デフォルトの名無しさん:2009/08/09(日) 18:49:41
>>312
俺も毎回そのエラーが出るけどなんでかわからない…

315 :デフォルトの名無しさん:2009/08/09(日) 19:01:37
「main関数を抜けた後のソースコード」を誰も書いていないから。

316 :デフォルトの名無しさん:2009/08/10(月) 10:29:32
スタートアップルーチンのソースを教えてないからでしょ
エラーでもないし気にしないでいいよ

317 :デフォルトの名無しさん:2009/08/10(月) 11:35:52
Microsoft Visual Studio 2008 Professional Edition

プロジェクトのプロパティなどを開こうとすると、
「Failed to create .Net Frameworks PropertyGrid component.
Please verify that the Common Language Runtime and .Net Frameworks are properly installed.」
と表示されます。
レジストリなどで調べましたが、.Net Frameworkは2.0、3.0、3.5すべてinstalledになっています。
他のツールでもインストールされていることが確認できました。

一体何が原因なのでしょうか?
Microsoft Visual Studio 2008 Professional Edition
はフルインストールしたはずなんですが。
原因がお分かりになられた方は、回答のほどよろしくお願いします。

318 :デフォルトの名無しさん:2009/08/10(月) 21:04:57
SP1あてた?

319 :デフォルトの名無しさん:2009/08/10(月) 21:51:31
使用OS:WindowsXP SP3
使用ソフト:MS VisualStudio 2008 Professional Edition
症状:デバッグ時に、"MSVCP90D.dllが見つからない"と表示される。このとき、ランタイムライブラリは"マルチスレッドデバッグ DLL(/MDd)""
試した対策:
(1)ランタイムライブラリを"マルチスレッドデバッグ(/MTd)"にして、デバッグ ⇒ 正常に開始。
(2)(1)をした後に、/MDdに戻して、デバッグ。 ⇒ 正常に開始。
(3)MSVCP90D.dll があるか、検索してみる。 ⇒ 見つかる。(正常に開始したほかのパソコンと同じような場所にあった。)
(4)http://support.microsoft.com/kb/962219/jaの方法を試してみた。
 ⇒ インストールできない。既にインスト済みか、ほかの条件が原因。
質問:
1./MDd でデバッグできない原因はなんでしょうか?その解決方法はあるのでしょうか?
2.C++のコンパイラーの設定で、/MTd を標準にできないでしょうか?

よろしくお願いします。

320 :デフォルトの名無しさん:2009/08/10(月) 23:52:36
317です。
なぜか、二重投稿になっています。すみません。

>318
当ててなかったみたいです。自動更新で当たっているとおもっていました。
現在ダウンロード中です。解決したらまた報告します。



321 :デフォルトの名無しさん:2009/08/10(月) 23:54:34
見間違えました。 320 は 319 です。

322 :デフォルトの名無しさん:2009/08/11(火) 22:42:01
VC2008EESP1なんですがデバッガでXMMレジスタの中を見るには
どうすればいいんでしょうか

323 :デフォルトの名無しさん:2009/08/11(火) 23:01:19
322レジスタで右クリックするだけでしたごめんなさい

324 :デフォルトの名無しさん:2009/08/14(金) 03:06:27
Visual C++ 2008 EEを使っています
プロジェクトにソースファイルを次々に放り込んでいったら
ソースファイルの置いてある実フォルダが、大分カオスに散らかりました。
VCを開いてソリューションエクスプローラを開くと、そこではフィルタで整理されています。

VCのソリューションエクスプローラ以外からもソースファイルを開くことがあるので
実フォルダとソースファイルを整理したいのですが、そうするとVCがソースファイルを
見失ってしまいます。それに今後ソースファイルを追加する度にフォルダと
フィルタを手動で整理しないとダメになるので面倒です。

何かいい方法はありませんか?

325 :デフォルトの名無しさん:2009/08/14(金) 03:26:53
がんばれ☆

326 :デフォルトの名無しさん:2009/08/14(金) 09:22:39
>>324
先ずファイルを整理してから、ソリューションエクスプローラで追加しちゃいけないのか?

327 :デフォルトの名無しさん:2009/08/14(金) 16:07:49
俺も使い始めてまもない程度だから正しいかわからんけど1プロジェクト1クラスを心掛けてる

追加インクルードにソリューションディレクトリを追加して
新しいクラスと関連の関数とかを一まとめにしたプロジェクトを作る
プロジェクト構成でEXEではなくLIBに変える
そんでクラスを利用するコードには
#include "ProjectName/HeaderName.h"
を追加

これで一つのクラスに対して一つのフォルダが割り当てられて、IDEのほうも混乱しない


でもこれだとプロジェクトつくるたびに構成を弄らないといけないのでそこが面倒

328 :デフォルトの名無しさん:2009/08/14(金) 19:30:39
1プロジェクト1クラスはねーよwww

329 :デフォルトの名無しさん:2009/08/14(金) 19:32:24
どんだけモノリシックなクラスを書いているのか、と。

330 :デフォルトの名無しさん:2009/08/14(金) 20:01:28
じゃあどう管理してんだよ

331 :デフォルトの名無しさん:2009/08/14(金) 20:16:09
管理人さんを雇えよ。未亡人で若い奴を。

332 :デフォルトの名無しさん:2009/08/16(日) 16:48:52
デバッグすると
プログラム 'c:\Users\○○\Documents\visual studio2008\projects\test\debug\test.exe' を開始できません。
アプリケーション構成が正しくないため、このアプリケーションの開始に失敗しました。マニフェスト ファイルを参照してエラーの原因を調べてください。
アプリケーションの再インストールをすることで、この問題が解決する可能性があります。詳細については、アプリケーション イベント ログを参照してください。
と表示されてデバッグできません、ログにエラーは出てません。
表示されているフォルダにtest.exeは入ってます
どうしたら良いでしょうか?

333 :デフォルトの名無しさん:2009/08/16(日) 17:01:34
あーっと
使ってる環境はVS2008でOSはWindows7 32bitです

334 :デフォルトの名無しさん:2009/08/16(日) 17:04:00
>ログにエラーは出てません。
ちゃんとアプリケーション イベント ログを見た?

335 :デフォルトの名無しさん:2009/08/16(日) 17:09:25
アプリケーション構成が正しくないため、このアプリケーションの開始に失敗しました。 に一致する日本語のページ 約 58,700 件中 1 - 50 件目 (0.28 秒)

336 :デフォルトの名無しさん:2009/08/16(日) 17:43:31
>>334
"c:\Users\○○\Documents\Visual Studio 2008\Projects\test\Debug\test.exe" のアクティブ化コンテキストの生成に失敗しました。
従属アセンブリ Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" が見つかりませんでした。
詳細な診断を行うには sxstrace.exe を実行してください。
って出てました

あとビルドログに
LINK : 前回のインクリメンタル リンクで C:\Users\○○\Documents\Visual Studio 2008\Projects\test\Debug\test.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。

と出てましたがサッパリで・・・


337 :デフォルトの名無しさん:2009/08/16(日) 17:45:56
あ、リリースにしてからデバッグ開始を押したら問題なく動きました
でもデバッグで動かないって何でだろう・・・

338 :デフォルトの名無しさん:2009/08/16(日) 17:51:48
埋め込みマニフェスト無効にしたりするとうまく行くこともあるかもしれない

339 :デフォルトの名無しさん:2009/08/16(日) 17:54:38
>>336,337
要は「msvrcr90d.dllが見つからない」と言っている。

もっとも、正式リリース前のOS上で動かしているのだから
何が起きても不思議ではない。

340 :tor1.digineo.de:2009/08/17(月) 17:46:52
自動焼人 ★ = 自動保守 ◆KAWORUKOFI = 自動保守#K9K?_D[L

名言集 その4
『俺、100人規模の集団サイバーテロの主犯だったこともあるんだぜ』

http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ のID:PVAf+dux0 = 自動焼人 ★

> 965 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:02:09.35 ID:PVAf+dux0
> まぁ何だ。
> 俺の過去の経歴に比べたら、割れ厨なんて鼻くそレベルなんだけどなw
> 100人規模の集団サイバーテロの主犯とか、いろいろとな。


----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください

341 :デフォルトの名無しさん:2009/08/17(月) 18:07:08
デバッグ開始をするとプログラムを実行して勝手に閉じてしまうんですけどこれってどうにかなりませんか?
デバッグ無しで開始をするとちゃんと何かキーを押すまでウィンドウが残るんですけど
プログラムの内容は多分一番簡単なハローワールドのプログラムです

342 :デフォルトの名無しさん:2009/08/17(月) 18:12:47
>>341
なりません。
デバッグしてるのに途中でとめない場合ってどんな状況?

止めたけりゃ最後にブレークポイント置くとか。

343 :デフォルトの名無しさん:2009/08/17(月) 18:23:23
>>342
何かキーを押さないと終了しない っていうプログラムにしないと勝手に終了しちゃうって事ですね
ありがとうございました

344 :デフォルトの名無しさん:2009/08/17(月) 20:00:20
>>341
F8


345 :デフォルトの名無しさん:2009/08/18(火) 17:53:13
質問です

エディットボックスのフォントがTerminalで、「電」や「j」を入力すると、下の部分が切れて表示されません
フォントサイズはCreateFont()で13を指定しています

フォントやフォントサイズを変えることなく、行間?を広げて、文字をすべて表示させることは可能でしょうか
もし可能であれば、方法を教えてください
お願いします

環境はOS:XP、バージョン:6.0です

346 :デフォルトの名無しさん:2009/08/19(水) 01:58:35
ただのCからVC++に移行中なのですが、
フォームプロジェクトのmainの初期に自動で作成される引数の変数の宣言時に
array<System::String ^> ^args
と宣言されていますが、
<>内はarrayの型と予想がつきますが ^ にはどのような意味が有るのでしょうか?
ぐぐってもでてきませんorz ぐぐるワードでもいいのでご伝授お願いします

347 :デフォルトの名無しさん:2009/08/19(水) 02:17:33
>>346
^は大雑把に言うと特殊な(すなわち.NET Frameworkが管理するメモリを指す)ポインタ型を示すものとして、*の代わりに使う。

VC++のCLR系プロジェクトでは、C++ではなく、C++/CLI言語が用いられる。
http://msdn.microsoft.com/ja-jp/library/ms379617(VS.80).aspx
「最良の」はかなり誇張表現だから、ある程度割り引いて受け止めてね。

348 :デフォルトの名無しさん:2009/08/19(水) 09:50:38
>>346
VC++の中にもいろいろある。
フォームを使うのはC++/CLIだけど
それをわかって使ってるのでなければやめといたほうが・・

349 :デフォルトの名無しさん:2009/08/19(水) 13:56:50
ちなみに.NETアプリ作るわけじゃないならC++/CLIを使う必要はないぞ><
Cから移植らしいので一応いっとく

350 :デフォルトの名無しさん:2009/08/20(木) 03:41:59
VC++ってGUI作り易い?

351 :デフォルトの名無しさん:2009/08/20(木) 04:20:57
うん

352 :デフォルトの名無しさん:2009/08/20(木) 08:54:46
まぁ一番自由だよな

353 :デフォルトの名無しさん:2009/08/21(金) 15:26:00
Microsoft Visual Studio 9.0のVC++を利用して
コマンドプロンプトで
cl /EHsc aaaaaa.cpp
とコンパイルしているのですが、
そのまえに毎回毎回
C:\○○○\VC\bin\vcvars32.bat
としないと動きません。

環境変数でパスを通すと解決するのかもしれませんが、
どうすればパスが通るのでしょうか?


354 :デフォルトの名無しさん:2009/08/21(金) 15:27:15
>>346
gccとVC++は両方とも併用して挙動を覚えると良いと思うよ。


355 :デフォルトの名無しさん:2009/08/21(金) 15:49:05
>>353
「Visual Studio 2008 コマンド プロンプト」を使う

356 :デフォルトの名無しさん:2009/08/21(金) 16:45:25
>>353
.\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat の中身を覗いておみ

357 :353:2009/08/21(金) 17:54:51
>>355
ファイラで作業中に、そのフォルダを現在のディレクトリとして
開いた一般のコマンドプロンプトで作業したいのです。

>>356
見てみました。
@SET VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0
などのような記載が見つかりましたが、
ありすぎてどれを通せばいいのか分かりません。
お助けいただけますでしょうか?

358 :デフォルトの名無しさん:2009/08/21(金) 17:59:26
それ用のバッチファイル作れば良いんじゃね?

359 :355:2009/08/21(金) 18:37:37
>>357
>ファイラで作業中に、そのフォルダを現在のディレクトリとして
>開いた一般のコマンドプロンプトで作業したい

だから、「Visual Studio 2008 コマンド プロンプト」のショートカットをコピーして、
コピーしたショートカットのプロパティで「作業用フォルダ」を好きなフォルダに変更すればいいだけの話なんだが。

360 :356:2009/08/21(金) 19:12:08
>>357 説明メンドイ
バッチファイルに何が書かれてるか分るくらいにしておいた方がいい鴨ね

似た様なことしてる人が居た
つ ttp://d.hatena.ne.jp/Rion778/20090707/1246978147

361 :357:2009/08/21(金) 21:22:33
>>359
ありがとうございます。
しかしその好きなフォルダは毎回変わりうるため
決め打ちはできないんです。

>>360
ありがとうございます。
そのリンク先のとおりにやってきます。

皆さんありがとうございました。

362 :デフォルトの名無しさん:2009/08/22(土) 13:27:24
main.cppとmain2.cppにファイルを分けてコードを書いています
二つのファイル両方でvecter関数などを使いたい場合は、両方のファイルでvecterをincludeする必要があるのでしょうか?



363 :デフォルトの名無しさん:2009/08/22(土) 13:53:07
ある。
というより、二つのファイルに共通なヘッダ(例:main.h)を作成して、インクルードするほうが良い。

364 :デフォルトの名無しさん:2009/08/22(土) 13:57:18
おお、なるほど。そうします。ありがとうございました

365 :デフォルトの名無しさん:2009/08/22(土) 16:32:39
ベクテー

366 :デフォルトの名無しさん:2009/08/22(土) 23:28:23
class A{
public virtual func();
}

class B : public A
{
public func()
}

vector<A> list;
list[0].func();

ってやるとAのfuncが呼ばれるんだけどBのを呼びたい場合は
vectorはポインタを入れるしかないの?

367 :デフォルトの名無しさん:2009/08/22(土) 23:40:24
参照を入れてもいいぞ。

368 :デフォルトの名無しさん:2009/08/22(土) 23:57:50
【初心者歓迎】C/C++室 Ver.67【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1247937958/
C++相談室 part71
http://pc12.2ch.net/test/read.cgi/tech/1247853298/
スレを勃てるまでもないC/C++の質問はここで 12
http://pc12.2ch.net/test/read.cgi/tech/1248010352/
C/C++の宿題片付けます 130代目
http://pc12.2ch.net/test/read.cgi/tech/1250204272/
C/C++小心者スレッドPart1
http://pc12.2ch.net/test/read.cgi/tech/1186262298/
【C++】STL(Standard Template Library)相談室 11
http://pc12.2ch.net/test/read.cgi/tech/1231640024/

369 :デフォルトの名無しさん:2009/08/23(日) 00:18:13
>>367
参照ってvector<A&>ってこと?
コンパイルエラーになるけど

370 :デフォルトの名無しさん:2009/08/24(月) 08:09:09
Java使いですが、最近C++始めました
平山尚氏の「ゲームプログラマになる前に覚えておきたい技術」で

#include "GameLib/Framework.h"
namespace GameLib{
void Framework::update(){
unsigned* vram = videoMemory();
static unsigned i;
vram[ i ] += i * 100;
i += 9973; //1万以下最大の素数
i %= ( width() * height() );
}
}
というプログラムをサンプルソースのプロジェクトからデバッグ実行したところうまく動作しました
ところが、自分で新しく作ったプロジェクトで同じソースを書いてデバッグ実行したらリンクの時点で問題発生
これじゃ自分で新しくプロジェクトを作り出せないよー。

1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: class std::locale::facet * __thiscall std::locale::facet::_Decref(void)" (?_Decref@facet@locale@std@@QAEPAV123@XZ) は既に GameLib_d.lib(Manager.obj) で定義されています。
1>libcpmtd.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。
1>libcpmtd.lib・・・について更に10項目
1>LINK : warning LNK4098: defaultlib 'LIBCMTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>C:\Documents and Settings\デフォルトの名無しさん\My Documents\Visual Studio 2008\GameLib\TestGame05\Debug\TestGame05.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

C++は初心者用の参考書(270ページ)を一冊読んだのですが、例によってエラー処理について何も解説してくれてないので途方に暮れています
なにが原因と考えられるのでしょうか?

一行目のライブラリの設定は本の指示通りやってるので大丈夫だと思います(だからこそサンプルは動いたはず)

371 :デフォルトの名無しさん:2009/08/24(月) 17:33:48
サンプルソースのプロジェクトをコピーして使いまわせばいいだけ
どうしてもプロジェクトから作りたかったら
プロジェクトの定義ファイル、その他のファイルの構成を見て同じにするだけ

372 :デフォルトの名無しさん:2009/08/24(月) 22:33:32
#pragma onceとかの2重定義防止がヘッダにないんじゃないか

373 :デフォルトの名無しさん:2009/08/25(火) 10:01:08
Microsoft Visual C++ 2008 Express Edition SP1
ですが
LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。
というエラーが出ます。
VC++の再インストールを解決しません。

どうしたらよいか、ご教示ください。


374 :デフォルトの名無しさん:2009/08/25(火) 10:21:30
環境は?
ツールのオプションのプロジェクトおよびソリューションのVC++ディレクトリの
Win32のライブラリ ファイルのディレクトリに該当ファイルはあるか?

EEだけだとどこになるか覚えてないが、
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib あたりにありそうだけど。
その場合、$(WindowsSDKDir)\lib の指定とか。

ファイルがあるなら、ツールの設定のインポートとエクスポートのすべての設定をリセットでどうか。

375 :373:2009/08/25(火) 10:54:41
ありがとうございます。
環境はWindows XP SP2です。

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\Kernel32.Lib
というファイルは見つかりました。
おそらく環境変数がどうかしているのだろうとは思うのですが、
ツールの設定のインポートとエクスポートのすべての設定をリセットでは
解決しませんでした。

もう一度、完全にアンインストール作業などを行った後
再インストールして見ようと思います、

376 :373:2009/08/25(火) 11:07:43
だめそうです。

プロジェクトをリビルドさせると
'cmd.exe'
でエラーが発生しました
と言われます。

これが>>373のコマンドプロンプトからコンパイルしたときのエラー
 LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。
に対応している物と思われます。

環境変数が死んでるだけだと思うのですが何故か改善できません。
(なお、環境変数の変更を反映させるためにWindowsの再起動は行っています。)


377 :デフォルトの名無しさん:2009/08/25(火) 11:49:59
cmd.exeとリンクエラーはあまり関係ない気が
まあ共通点はたしかに環境変数だけど。

>>374のVC++ディレクトリのとこの実行可能ファイルとライブラリファイルの内容はどんな?
cmd.exeは実行可能ファイルの$(PATH)が関係する

378 :デフォルトの名無しさん:2009/08/25(火) 15:28:26
zlibのリンクでエラーが出てしまうのですが原因が分かりません
error LNK2019: 未解決の外部シンボル @crc32@12 が関数 "int __fastcall WritePNGChunk(struct _iobuf *,unsigned int,char const *,unsigned char const *)" (?WritePNGChunk@@YIHPAU_iobuf@@IPBDPBE@Z) で参照されました。

ライブラリのパスは通してあり、ランタイムライブラリはマルチスレッドで統一してあります。
環境は、XPSP3、VC2008EE、Win32アプリ、zlib1.2.3です。
解決するにはどうすればいいでしょうか?アドバイスお願いします。


379 :デフォルトの名無しさん:2009/08/25(火) 15:33:46
ちょっとググったけどファミコンのエミュレータか。
libはパスの指定だけじゃなくて、libファイルそのものも直接指定する必要があるよ。

380 :デフォルトの名無しさん:2009/08/25(火) 15:37:54
ファミコンじゃなくてNDSですね
勿論libファイルは指定してあるのですが、他に原因分かりませんか?

381 :デフォルトの名無しさん:2009/08/25(火) 15:41:43
libpngはどうやってビルドした?
そっちに問題がある気がするが

382 :デフォルトの名無しさん:2009/08/25(火) 15:44:03
あと複数のconfigヘッダーがあるとかかな

383 :デフォルトの名無しさん:2009/08/25(火) 15:49:13
>>381
ちょっとまだよく分かってない部分も多いんですが
これはlibpngは使ってないと思います。
PNGの処理はNDSSystem.cppってとこに書いてあるようなので

>>382
configヘッダーってなんでしょうか?
zlib.hの事ですか?

384 :デフォルトの名無しさん:2009/08/25(火) 15:50:16
あ、zconf.hって方ですか?

385 :デフォルトの名無しさん:2009/08/25(火) 16:11:30
そういうやつ。
そもそもスタティックリンク用のヘッダになってんじゃないの?
__stdcall の関数をリンクしようとしてるが、libは__cdeclとか__fastcallとか

386 :デフォルトの名無しさん:2009/08/25(火) 17:39:29
>>385
すみません、ちょっとよく分かってないのでググって調べてたら
一応リンクは通るようになりました。

@crc32@12のような関数の修飾子は__fastcallって事みたいなので、
__fastcallでリンクしようとしてるが、LIB側は__cdeclになってるのでエラーに
なっているようなのでzconf.hの# define ZEXPORT となっているところを
# define ZEXPORT _fastcall と書き換えてzlibをビルドしたらエラーが出なく
なったんですが、こんなやり方でいいんでしょうか?
なんか違うような・・・



387 :デフォルトの名無しさん:2009/08/25(火) 18:30:37
たぶん、Config作る時にDLLかスタティックLIBかで切り替えるDefineがあって
その時にZEXPORT を書き換えてるか差し替えてるんじゃないかと思うよ。

388 :373:2009/08/26(水) 00:40:52
>>377
お返事遅れまして申し訳ありません。
ttp://loda.jp/nwl8gecgzraygwt/?id=1
このようになっています。
よろしくお願い申し上げます。

389 :デフォルトの名無しさん:2009/08/26(水) 01:18:00
もしくは、複数個所にzconf.hがあったりしないかね

390 :デフォルトの名無しさん:2009/08/26(水) 01:30:32
>>388
そういやこないだのWindowsアップデートから挙動があやしいのがいくつかあったんだった
スタートメニューのVC++のとこのToolsからコマンドプロンプト開ける?エラーでないかな

391 :デフォルトの名無しさん:2009/08/26(水) 01:44:24
ってXPは64bitだったりする?
うちはVista64だけど、VC++の設定にSysWow64出てきてないけど
こないだのアップデートでバッチファイルがかわって、Program Files (x86)の括弧綴じがうまくないようなんだよね・・・

392 :デフォルトの名無しさん:2009/08/26(水) 05:17:17
visual studio C++ 2008で勉強している者です。
>>5の訂正が>>9>>10だと理解しました。
(コピペして実行していないけど…)


細かい質問なのですが、
私は


#include

main{
   std::cout << "Hello World" << std::endl ;

   return 0;
}
って習いました。


printf(""\n); も std::cout << "" << std::endl; も
手法が違うだけで同じという事でしょうか?
もしそうならどちらが正しい文なのでしょうか?

393 :デフォルトの名無しさん:2009/08/26(水) 06:56:36
>>392
お前それ本当に習ったコードそのままなのか?
C++でそんなコードを教えるような奴はおでこにPentium4を貼り付けてアッカーマン関数を解かせる刑に処してやりたいんだが。

>printf("\n"); も std::cout << "" << std::endl; も 
>手法が違うだけで同じという事でしょうか? 
そうです。 
C++言語はC言語とほぼ完全な互換があるのがウリなのですが、
C言語で提供される機能の多くは、C++の流儀にのっとった別の形で提供されています。
あなたの例では、printfがCの機能、coutがC++の機能です。
どちらも、C++としては正しい文です。


394 :388:2009/08/26(水) 07:02:03
>>390-391
Visual Studio 2008 コマンド プロンプト
 Setting environment for using Microsoft Visual Studio 2008 x86 tools.
 C:\Program Files\Microsoft Visual Studio 9.0\VC>
と出て来ました。
XPは32bitで搭載メモリ3GBです。

うーん、どうしてでしょう。。。

395 :デフォルトの名無しさん:2009/08/26(水) 07:51:01
>>393
早いレスありがとうございます。
改めてVisual Studio c++ 2008で試してみました。
両者とも文字列は問題なく表記されたのですが、
""で囲わないで数や変数(int x;など)を表示させようとするとエラー(バグって表現すべきでしょうか?)が発生します。
printf("おまんこ\n");も
std::cout<<おまんこ<<std::endl;も大丈夫なのに
printf(0100005\n);
std::cout<<0100005<<std::end
だとprintf();だけ上手くいきません。
これはそういうもんだと割り切って次のステップに進むべきでしょうか?

396 :デフォルトの名無しさん:2009/08/26(水) 09:18:31
VC++のbeginthreadはVB.NETのスレッドのように
メインプロセス終了はワーカースレッドの終了を待ってくれますか?
それともメインプロセスが終了するとワーカースレッドを
ぶちぎりして終了してしまいますか?

397 :デフォルトの名無しさん:2009/08/26(水) 09:18:47
>>395
printfで整数を表示させる方法は書式指定子でぐぐれ
それぞれの道具(printf, cout)には道具なりの使い方がある。 ちゃんと解説書を読めってことだ。

398 :デフォルトの名無しさん:2009/08/26(水) 10:01:17
>>397
解説書買いましたが、
http://www.nicovideo.jp/watch/sm5044927
がわかりやすいので先にこっちで勉強してました。


前の解説本の冒頭に書いてあったのですが、道具なりの使い方というと
包丁の使い分けみたいなものだと理解しても平気でしょうか?


と、書いて気づいたけど、なんか話が脱線してきた・・・orz
とりあえず、このスレに頼りっぱだったので
ググってみます。
ありがとうございました!!
ありがとうございました。

399 :デフォルトの名無しさん:2009/08/26(水) 11:01:20
だいじなことなのでにどいいました。

400 :370:2009/08/26(水) 11:20:29
>>371
うまくいきました。
ありがとうございました。
ランタイムライブラリを
「マルチスレッドデバッグ(/MTd)」にすべき所を
「マルチスレッドデバッグDLL(/MDd)」にしてたのが原因でした。
ご指摘を受ける前にもソリューションのプロパティをうまく行く奴版と全部比較してたんですが
テキストエディターで読めるとは思わなくて一々VCで開きなおして見てたんでもうイライラしてました
結局見逃してたんですね
エディタで見てやっと発見できました

401 :デフォルトの名無しさん:2009/08/26(水) 11:39:18
>>392
すごい釣りだ。^^;

printfは組み込み型にしか使えない。
coutはユーザー定義型(クラスとか構造体とかうにおんとか…)にも使える。

402 :386:2009/08/26(水) 11:42:08
実は、このソース公式から落としたtarballを解凍した奴だったんですが、
なんか色々足りないファイルとかもあったので、もしかしてと思ってsvnから
直接引っ張ってきたら、予想通り必要なファイルが全て揃っていて、何の
問題もなく一発でビルドできました。

あの苦労は何だったんだって感じですが、呼び出し規約とか今までおざなり
にしてたことが少し分かったので勉強になって良かったです。
因みにこのサイトが凄く分かりやすかったです。ttp://ray.sakura.ne.jp/asm/9.html

これで、やっと目的の開発に取りかかれそうです。
レスくれた方々ありがとうございました。

403 :デフォルトの名無しさん:2009/08/27(木) 05:05:52
>>392です
ふと気づいたのですが、
return 0;ってなんの役にたつんですか?

# include<iostream>
using namespace std;

int main()
{
cout<<"問題。カッパの好きな食べ物は?"<<endl;
cout<<"半角で選択肢を入力"<<endl;
cout<<"1.トマト"<<endl;
cout<<"2.きゅうり"<<endl;
cout<<"3.りんご"<<endl;

int k;
cin>>a;
switch(k)
{
case 1: cout<<"トマトじゃないよ"<<end;break;
case 2: cout<<"正解!カッパはキュウリが好き。"<<endl;break;
case 3: cout<<"果物じゃないです。"<<endl;break;
default: cout<<"半角数字で答えてください"<<endl;
}
// return 0;
}



あってもなくても正常に動くのですが・・・

404 :デフォルトの名無しさん:2009/08/27(木) 06:25:26
>>403
どんな本買ったのか判らんが、キチンと一度読み通せ

405 :デフォルトの名無しさん:2009/08/27(木) 13:37:13
スレを勃てるまでもないC/C++の質問はここで 12
http://pc12.2ch.net/test/read.cgi/tech/1248010352/

406 :デフォルトの名無しさん:2009/08/27(木) 17:15:10
ある現行ソフトウェア(A)が存在するとします。
そして今私はこのAというソフトウェアのソースコードのプログラム言語などに依存せず、
まったく関係のない独立したソフトウェア(B)というものを開発しようとしているとします。
ここでAとBを連携させたいと考えた場合、COMプログラミングなどというものがあります。

そこで質問です。
もし、Bのソフトのあるボタンを押したときAが起動するように設定するだけでもCOMプログラミングは
必要なのでしょうか?もしくは絶対パスなどをいれたソフトを起動させるようなWin32APIはありますか?

ご存知のかたがいらっしゃれば回答よろしくお願いします

407 :デフォルトの名無しさん:2009/08/27(木) 17:20:52
>Bのソフトのあるボタンを押したときAが起動するよう
::CreateProcess

408 :デフォルトの名無しさん:2009/08/27(木) 17:26:33
>>406
ShellExecute

409 :388:2009/08/27(木) 23:08:06
環境変数LIBに追加する部分
@set LIB=

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib;
を追加したらコマンドプロンプトからコンパイル&リンクは出来るようになりました。
ありがとうございました。

しかし、未だ
プロジェクトをリビルドさせると
1>プロジェクト : error PRJ0003 : 'cmd.exe' の起動中にエラーが発生しました。
1>ビルドログは "file://c:\*************\Visual Studio 2008\Projects\sample program\Debug\BuildLog.htm" に保存されました。
というエラーメッセージが消えず、リビルドできません。
ここはどの環境変数をどう修正するのが正解なのでしょうか。

どうかお知恵をお貸しください。
よろしくお願い申し上げます。

410 :デフォルトの名無しさん:2009/08/27(木) 23:26:57
ビルドログうp

411 :388:2009/08/27(木) 23:38:01
sample program
という名のプロジェクトです。

BuildLog.htm

Plain Text code - 86 lines - codepad
ttp://codepad.org/K4pZgQb7
このようになりました。

412 :デフォルトの名無しさん:2009/08/27(木) 23:38:57
#include <iostream>
using namespace std;
int main()
{
class map {
public:
int data[3][4];
int DataAt(int x, int y) {
return data[x][y];
}// or return data[y][x];
};
map F1;
F1.data[3][4]={
{2,12,0,4},
{0,5,4,13},
{0,3,11,9},
};
cout <<F1.DataAt(2,3);
return 0;
}

すいません、最後に教えて下さい
mapクラスのF1のメンバが配列で、それを関数で呼びたいだけなんです
C++なのにクラスが使えないとかなきそうです


413 :デフォルトの名無しさん:2009/08/27(木) 23:48:03
>>411
環境変数PATHに
%SystemRoot%\system32
が入ってないとか

414 :デフォルトの名無しさん:2009/08/27(木) 23:58:32
>>413
ありがとうございます。
%SystemRoot%\system32を環境変数に追加してそれで試してみます。


415 :デフォルトの名無しさん:2009/08/28(金) 01:28:35
>map F1;
>F1.data[3][4]={ {2,12,0,4}, {0,5,4,13}, {0,3,11,9}, };

・・・こんな代入の仕方があるか。初期化じゃないんだぞ。

416 :デフォルトの名無しさん:2009/08/28(金) 02:47:20
デスクトップ画面上にアイコンや文字だけを出すにはどういう風なプログラムにすればいいのでしょうか?
つまり、ウィンドウすらなく、字や絵だけをデスクトップの特定の位置などに表示させたいのです

417 :デフォルトの名無しさん:2009/08/28(金) 03:01:20
>ウィンドウすらなく
無理。Windowsはウィンドウの集まりだから、ウィンドウズ。
背景透過のウィンドウを作成して、そこに描画すべし。

418 :デフォルトの名無しさん:2009/08/28(金) 04:41:47
>>417
背景透明にしてみた
TextOut関数ってどうやってテキスト更新するの?
呼び出してもテキストの表示位置をかえたりできない…

個人的にニコキャスト(ってわかるかな?)をさらに改良した
ニコニコ動画みたいな文字がデスクトップに表示されるツール開発したいんだ

419 :デフォルトの名無しさん:2009/08/28(金) 05:13:17
つねにウィンドウ上のテキストを再描画したいときって

CALLBACK関数のWndProc内で最初にInvalidateRect関数呼び出すってことで正しい?

420 :デフォルトの名無しさん:2009/08/28(金) 05:33:21
>>415
すいません・・でもやり方がわからないんです
クラスのメンバを配列にしてそこに代入したい場合、
あらかじめ配列を作っておき、fornextなどを使って数字を代入していくしかないのでしょうか?

array[3][4]={ ・・・ }
F1.data[i][k]


421 :388:2009/08/28(金) 07:04:35
>>413
出来ました!!
環境変数PATHに
%SystemRoot%\system32
を追加するのが正解でした。

どうもありがとうございました。

422 :デフォルトの名無しさん:2009/08/28(金) 10:21:26
>>420

map F1;
int data[3][4] = { {2,12,0,4}, {0,5,4,13}, {0,3,11,9}, }; // これは代入ではなく初期化

for ( int i = 0; i < 3; i++) for ( int j = 0; j < 4; j++) F1.data[i][j] = data[i][j];


423 :デフォルトの名無しさん:2009/08/28(金) 11:11:39
>>422
ありがとうございます!

424 :デフォルトの名無しさん:2009/08/28(金) 12:26:06
VisualC++6.0で、満足にプログラム組んでるんだけど、VisualC++2008にするといいことあるかなあ?

そっちのほうが便利なら、買おうと思うんだけど。

425 :デフォルトの名無しさん:2009/08/28(金) 12:50:16
>>424
インテリセンスが賢くなってるよ。
それ以外の部分も色々進化してるんだけど、VC6で満足してるならまぁ好きにすればいいと思う。
ただBoostとかテンプレートを本気で使いだすとVC6はそびえ立つクソ状態になるけど。

426 :デフォルトの名無しさん:2009/08/28(金) 13:20:03
VS2008無料版でも十分便利
タダなんだし使ってみては?

427 :デフォルトの名無しさん:2009/08/28(金) 14:26:16
visual C++でたとえば関数の戻り値を調べたいときがあります
そういうときにいちいちitoa使ったあとにMessageBoxなどで確かめるのが面倒です
出力画面などに簡単にシステムコールで出力する方法ありませんか?
皆さんはどうやって戻り値や変数の中身をチェックしていますか?

428 :デフォルトの名無しさん:2009/08/28(金) 14:28:52
>>427
::OutputDebugString() でデバッグ出力する

429 :デフォルトの名無しさん:2009/08/28(金) 15:03:41
>>421
そもそもそれが入ってないのがおかしい
インストーラ関係なしに手動で何かやらないと消えないと思うが

430 :デフォルトの名無しさん:2009/08/28(金) 15:32:21
特定のファイル操作などに用いる構造体の中身のメンバがすべてintで予め定義されていたとします。
この構造体のメンバにdoubleでどうしても代入しなければいけないときはどうすればいいのでしょうか?
キャストしてもうまくいきません。

431 :デフォルトの名無しさん:2009/08/28(金) 15:41:20
入らない。

432 :デフォルトの名無しさん:2009/08/28(金) 15:49:48
>>416
>ウィンドウすらなく、字や絵だけをデスクトップの特定の位置などに表示させたいのです
GetDesktopWindow関数でデスクトップのハンドルを取得してデスクトップに直接表示することができる
(デスクトップもウィンドウ)

>>418
TextOut関数には表示位置を指定するパラメータがあるじゃん
表示位置を変えたいなら元の位置の文字列を消して新しい位置に文字列を表示するとか
いろいろ方法あるでしょ

433 :デフォルトの名無しさん:2009/08/28(金) 17:44:48
「ぴたすちお」のようなプログラムって便利だと思うのですが
この手のソフトは、それほど数が多くないです。
やはり個人で自作して公開されない物が多いんでしょうか?

無ければ、制作を考えているのですが、
C++で作るには、かなりのスキルが必要ですか?

434 :デフォルトの名無しさん:2009/08/28(金) 18:03:15
>C++で作るには、かなりのスキルが必要ですか?
C++のではなく、Windowsプログラミングについて相応のスキルは必要。
API、フック、サブクラス等々。

435 :デフォルトの名無しさん:2009/08/28(金) 23:42:22
>>433
どのくらい現在知識はあるのだい?
他言語の経験者?

436 :デフォルトの名無しさん:2009/08/28(金) 23:43:37
>>424
つーかC++に準拠して書いたテンプレートを含むコードが
VC6に蹴られるとぶち殺したくなる。

VC6はC++に似た別言語だと思いませう。

437 :デフォルトの名無しさん:2009/08/29(土) 00:02:59
>>435
いえ、言語についての知識はないです。
ネットでC言語の入門サイトを見ながら勉強し始めた所です。


438 :デフォルトの名無しさん:2009/08/29(土) 00:07:21
>>437
うひょー
そりゃ先が長いぜw

439 :デフォルトの名無しさん:2009/08/29(土) 00:11:59
>>438
やっぱそうですか。
趣味なので時間制限はありませんが。

440 :デフォルトの名無しさん:2009/08/29(土) 00:14:14
とりあえずやればいいじゃん

441 :デフォルトの名無しさん:2009/08/29(土) 00:20:36
今はまだ無理ですね。
イメージだけですが遠い道だと分かっただけでも収穫です。
ありがとうございました。

442 :デフォルトの名無しさん:2009/08/29(土) 02:41:47
>>436
今となっては懐かしい。
複雑なテンプレートだとコンパイルどころかVS自体が落ちてたからなあ。

443 :デフォルトの名無しさん:2009/08/29(土) 03:06:09
Visual C++で、左下のCtrlとかAltとかの当たりを適当に押したら、
コード中のTab部分に「→」、スペースに「・」と表示されるようになりました。
オプションあたり見ても直し方がわからず非常にうっとうしいので、どなたか直し方教えてください。

444 :デフォルトの名無しさん:2009/08/29(土) 09:54:59
編集→詳細→スペースの表示

445 :デフォルトの名無しさん:2009/08/29(土) 10:37:37
>>441
ものすごく遠い道だ。
数学系が得意で、後は根気が数年以上続く性格ならいけるよ。
個人的にはC++は質問しやすいからお薦め。
言語仕様的にはC++は落とし穴が多いから薦めづらいが。

446 :デフォルトの名無しさん:2009/08/29(土) 12:15:11
いやいや、それほど遠くはない。
いくらなんでも、冥王星が太陽を一周してくる間にはマスターできるだろ。

447 :445:2009/08/29(土) 12:16:12
>>446
それってどのくらいの期間なの?

448 :デフォルトの名無しさん:2009/08/29(土) 13:56:29
プロジェクトに高々100位のファイルが含まれたフォルダをドラッグして渡すと、
Visual Studioが2〜3分応答しなくなるんですが、どうしたもんですか?

449 :デフォルトの名無しさん:2009/08/29(土) 15:22:55
>>441
↓ここで夢中になって勉強できれば意外と速く出来るようになるかも
ttp://www.kumei.ne.jp/c_lang/index.html
↑ここが難しすぎて夢中になれないようならきびしいと思う

450 :デフォルトの名無しさん:2009/08/29(土) 17:07:25
>448
プロジェクトファイル手で書き替えてもいいし、
自作スクリプトや自作プログラムでやってもいいし、
面倒くさかったら終わるまで待ってればいい。

451 :デフォルトの名無しさん:2009/08/29(土) 17:22:40
>>444
助かりました
まさか二つのコマンドを入れてしまっていたとは

452 :デフォルトの名無しさん:2009/08/29(土) 17:29:42
間違えたとしたらメニューじゃなくてショートカットだろ

453 :デフォルトの名無しさん:2009/08/29(土) 19:21:44
[プロジェクト]→[プロパティ]の[C/C++]→[全般]の追加のインクルードディレクトリにフルパスでディレクトリを指定したいんですが、
include ファイルを開けません。というコンパイルエラーが出てしまいます。
該当行のインクルードファイル名を右クリックして、ドキュメントを開こうとすると、ソースファイルのディレクトリにも、システムパスにも見つかりません
というメッセージとともにインクルードパスの一覧が出ますが、そこにも設定したパスが表示されていません。
追加のインクルードディレクトリで設定したパスを使いたい場合には何か別にする必要があるんでしょうか。

454 :デフォルトの名無しさん:2009/08/29(土) 20:11:29
ぱっと思いつくのはWin32/x64での設定が別であることに気づいていないということ
あとはパスの綴りをミスってるぐらいしか思いつかん。

455 :デフォルトの名無しさん:2009/08/29(土) 22:14:32
ぱっと思いつくのは、デバッグ用の構成プロパティで設定してリリースモードでビルドしている。あるいはその逆。

456 :デフォルトの名無しさん:2009/09/01(火) 17:54:17
クラスの練習を兼ねて、こんなプログラムを打ちました。
エラーは出ないようになりましたが、
数値がおかしい・・・正の値しか出ないようにしたはずなのに・・・
何が間違っているのでしょうか?

#include<iostream> using namespace std;
class Osake{
int nakami;//飲むお酒の量
int yoi;//どれだけ酔っ払ったかの度合い
public:Osake(int z){nakami = z;}
void nomu(){
cout<<"nakami"<<endl;
while(nakami>0){
nakami -=2;
yoi +=3;
}
cout<<"お酒が無くなりました。"<<endl; cout<<"現在レベル"<<yoi<<"くらい酔っています。"<<endl;}
void nomido(){
if(yoi==15){cout<<"ほろ酔いです"<<endl;}
else if(yoi<15){cout<<"飲み足りません"<<endl;}
else if(yoi>15){cout<<"飲みすぎです"<<endl;}
else{cout<<"エラーが発生しました。"<<endl;}
}};

457 :デフォルトの名無しさん:2009/09/01(火) 17:55:26
int main(){
cout<<"お酒を飲みます。酔いすぎに注意しましょう。"<<endl;
cout<<"どれくらいのお酒を用意しますか?"<<endl;
int a; cin>>a;
Osake liqueur(a);
liqueur.nomu();
liqueur.nomido();
cout<<"晩酌を終了します"<<endl;}

458 :デフォルトの名無しさん:2009/09/01(火) 18:00:33
yoiはどこで初期化してんだ?

459 :デフォルトの名無しさん:2009/09/01(火) 18:01:05
>>456
「nakamiが0より大きい間、ループする」と書いたのだから、停止条件は
「nakamiが0より小さくなったのでループを脱出する」なのは当然。

460 :デフォルトの名無しさん:2009/09/01(火) 18:04:38
>何が間違っているのでしょうか?

int yoi が初期化されていないので、 you+=3 は未知数。
Osake のコンストラクタで初期化すべし。

461 :デフォルトの名無しさん:2009/09/01(火) 18:05:19
・・・かぶった。

462 :デフォルトの名無しさん:2009/09/01(火) 18:30:43
やはり変数yoiとwhile文でしたか・・・
もうちょいいじってみます。


てか皆さんすごいっすね・・・
なんでそんなに早くバグがわかるんですか?

463 :デフォルトの名無しさん:2009/09/01(火) 18:51:22
>>462
慣れでしょ
本をたくさん読めば文章をすらすら読めるようになるようなもの
これも練習の内だと思って、今度からは自力でバグ取りするようにしたほうがいいと思う

464 :デフォルトの名無しさん:2009/09/01(火) 18:57:28
>>463
ですよね。・・;
でも一応ドン詰まりになるまで粘ってから
質問してるつもりではいるのです…


せめてプログラマーの端くれレベルになりたいorz

465 :デフォルトの名無しさん:2009/09/01(火) 19:07:10
判ってないと思った時点で本読みなおしてみ

466 :デフォルトの名無しさん:2009/09/01(火) 19:07:39
VisualC++2008Proでの質問です
MFCのツールボックスからエディットコントロールを選択しました
そしてそれを配置して右クリックをしたのですが、「変数の追加」というものが半透明になって選択できません
そのため、ここに代入された文字の取得なのができなくなっています

なぜ半透明になるのでしょうか?
変数の追加を有効にする方法を教えてください

467 :デフォルトの名無しさん:2009/09/01(火) 20:11:40
>>456です。
遅くなりましたが報告です。

void nomu(){
cout<<"nakami"<<endl;

yoi=0;//今はシラフだと宣言

while(nakami>0){
nakami -=2;
yoi +=3;
}

したら、イイ感じになりました。
感謝です。
今までint main(){}の中に色々詰め込む形でソース組んでいたので、
classの便利さにちょいちょい気づいてきました^^;
private、public、voidの詳しい意味とか理解していませんが、
『解説をじっくり読むより、さっと読んで、サンプルをコンパイル・実行してみてください。』

http://www.asahi-net.or.jp/~yf8k-kbys/
に書いてあったのと、
前回勉強した時、難しく考えすぎてドツボにハマったので
とりあえず次に進みます。


468 :デフォルトの名無しさん:2009/09/01(火) 20:24:24
>>466
VCダイアログフォームの変数とクラスの追加はダイアログクラスに対してやるものだと思ったが
そのフォームリソースのダイアログクラス作ってある?

469 :デフォルトの名無しさん:2009/09/01(火) 21:50:39
VS2008のC++でプログラムを書いています
ttp://homepage2.nifty.com/natupaji/DxLib/
というdirectXのライブラリを使って色々書いているのですが、
これは何という環境になるんでしょうか??

SDKやMFCとか色々聞きますが、定義は調べて何となくわかるのですが
実際使ってみてもイマイチピンと来ません。
恥ずかしい質問ですが、よければ教えてください

470 :デフォルトの名無しさん:2009/09/01(火) 21:59:19
DXライブラリ 総合スレッド その4
http://pc11.2ch.net/test/read.cgi/gamedev/1249822550/

471 :デフォルトの名無しさん:2009/09/01(火) 22:01:28
>>470
スレ違いすいませんでした

472 :デフォルトの名無しさん:2009/09/01(火) 22:26:00
>>467
そうするのもマチガイではない。
が、class のメンバ変数なら、コンストラクタで初期化するクセをつけとくべき。

public:
Osake( int z)
{
nakami = z;
yoi = 0; // ここで初期化
}

473 :デフォルトの名無しさん:2009/09/01(火) 22:30:20
好きなだけC++刷れでやってくれ

474 :デフォルトの名無しさん:2009/09/02(水) 01:32:02
Visual C++スレは、言語のスレとは別物だからね

475 :デフォルトの名無しさん:2009/09/02(水) 07:56:38
ダブルバッファリングについて質問します。
変数の宣言やhMemDC = CreateCompatibleDC(hDC);などの部分は行数の関係で省略します。
今、下のようなソースがあるとします。今hMemDCのメモリデバイスコンテキスト内で描画を段階的に行い、
そこの描画が完成すると、hDCに転送して画面に描画するということをやりたいと思っています。
ところが、このソースでは画面に何も表示されてません。@の部分を仮にhDCではなくhMemDCとしたところ
問題なく画面が表示されるため、転送部分やなんらかのメモリデバイスハンドルの扱い方の部分で間違いがある気がします。
どなたか解決方法がわかるかたがいらっしゃれば教えてください。もしくはこのソースがわかりにくい場合は、
何かソースを提示して、ダブルバッファリングの解説などしていただけませんか。よろしくお願いいたします。

case WM_PAINT:
 hDC = BeginPaint(hWnd, &ps); //@

 hBrush = CreateSolidBrush(RGB(255, 255, 0));
 InvalidateRect(hWnd, NULL, TRUE); 
 SelectObject(hMemDC, hBrush);
 ExtFloodFill(hMemDC, 1, 1, RGB(255, 255, 255), FLOODFILLSURFACE);
 SetBkMode(hMemDC, TRANSPARENT);
 GetTextMetrics(hMemDC, &tm);
 GetClientRect(hWnd, &rt);
 DrawText(hMemDC, EndBuf, -1, &rt, DT_CENTER);

 BitBlt(hDC, 0, 0, 640, 480, hMemDC, 0, 0, SRCCOPY);

 DeleteObject(hBrush);
 break;

476 :デフォルトの名無しさん:2009/09/02(水) 10:26:08
hMemDC = CreateCompatibleDC(hDC);
hBitmap = ::CreateCompatibleBitmap( hDC, , ,);
SelectObject( hMemDC, hBitmap);



EndPaint( hWnd, &ps);
break;

477 :デフォルトの名無しさん:2009/09/02(水) 10:53:43
BeginPaint と EndPaint の間にbreak入ってる意味わからん

478 :デフォルトの名無しさん:2009/09/02(水) 10:58:14
>>477
すまん、>>476>>475 へのレス。アンカー忘れた。

479 :デフォルトの名無しさん:2009/09/02(水) 22:31:42
条件付きブレークポイント貼る時に条件にenumとか使う方法ないですか?
たとえば

i > MY_ENUM_VALUE

みたいなの。MY_ENUM_VALUEはヘッダファイルで定義されてる。

480 :デフォルトの名無しさん:2009/09/03(木) 02:59:27
Visual C++ってどの製品使えばいいんだ?

481 :デフォルトの名無しさん:2009/09/03(木) 04:29:09
まずは無料のExpressではじめて、不満を感じたらStandardやProfessionalを買えばいい。
DreamSpark対象者ならそん中のVS 2008 Proを使うのもありだな。

自分が上位エディションで魅力を感じる機能はここらへん。
Standard以上: ATL/MFC、リソースエディタ、x64、1ソリューション内での複数言語プロジェクトの混在、マクロ対応など
Professional以上: モバイル対応など
Team Suite以上: プロファイラ、あと知らん

482 :デフォルトの名無しさん:2009/09/03(木) 05:45:10
すみません
あるサイトのサンプルコードを動かすとエラーも警告も出ないのですが
一瞬ウィンドウが開いて、即閉じてしまい内容を確認できません。

コンソールアプリケーションでは無い方(Win32アプリケーション)なのですが
WinMain()ではなく_tWinMain()となっている事が気になるのですが
何かが関係しているのでしょうか?

メッセージループやWindowProc()に何か追記すれば
勝手に閉じずにストップできたりしますでしょうか?

483 :デフォルトの名無しさん:2009/09/03(木) 07:48:03
普通は閉じるメッセージがくるまではずっとループさせるような
メッセージループになってるはずだから
元からそう作ってあればわざわざ閉じないような追記は必要ないだろ

484 :482:2009/09/03(木) 08:18:47
>>483
いえ、そのサンプルコードと一緒に、
出力結果が表示される様の画像が添付されているので(コンソールではない画面で)
そのサンプルの内容を画面で確認できる・・するべきなんだと思うのですが・・

メッセージループに入る前に処理を全部終わらせる形なので
無理やりにでも止める方法があれば、よろしければ情報を教えて頂けると助かります;
本当に止める必要が無いのかもしれないのですが、できれば結果を確認したいので;

485 :デフォルトの名無しさん:2009/09/03(木) 09:49:19
Sleep(5000);

486 :デフォルトの名無しさん:2009/09/03(木) 10:04:17
ブレークポイントでぐぐれ

487 :482:2009/09/03(木) 10:34:13
>>485-486
ありがとうございます。
どうやら正規の失敗処理が呼ばれて閉じている事が解って解決できました。

488 :デフォルトの名無しさん:2009/09/03(木) 20:59:25
教えてください。

MFC Feature Pack
http://msdn.microsoft.com/ja-jp/library/bb983962.aspx

このページにあるサンプル群を探しています。

VS2008のproを使っています。SP1にもアップしています。

vc_samples.exe内も見たのですが見あたらないのですが。

489 :デフォルトの名無しさん:2009/09/03(木) 21:46:38
>>488 ↓これ落としてないんでしょ?
http://www.microsoft.com/downloads/details.aspx?familyid=9761BB57-F066-4B70-9318-3965C5E68AAD&displaylang=en

490 :デフォルトの名無しさん:2009/09/03(木) 22:01:45
>>489 さん

あっ!そう言うことなんですね。

ありがとうございました。

491 :デフォルトの名無しさん:2009/09/04(金) 01:18:03
VC++.NEt2003での質問です。

クラス作成する時、クラスビューの右クリックからクラス追加すると自動的に
hファイルとcppファイルが生成され、コンストラクタとデストラクタは初めから用意されています。
そしてクラスビューの右クリックからメンバ関数を追加すると、宣言がhに自動的に作成され、
内容を書く枠組みが自動的にcppに作成されます。

しかし、手動でソリューションエクスプローラの右クリックでhファイル、cppファイルを個別に追加した時、
同じ名前にしているのですが、それが対応しているものとVSが認識してくれません。
もちろんcppはhをインクルードもしています。
またそうやって作ったクラスに右クリックでメンバ関数追加するとhファイルの中に関数の内容記述する{}までが
作成されてしまい、cppファイルが無視されます。

この対応付けは一体何処に設定されており、どうやって設定すればよいのでしょうか?

492 :デフォルトの名無しさん:2009/09/04(金) 05:19:19
VisualC++2008を使っています。
コントロールパネルにあるシステムのプロパティの
CPU 情報を取得する方法はありませんでしょうか。

PentiumIII以前の物だとレジストリのにProcessorNameStringがありませんし、
拡張CPUIDのプロセッサ・ブランド・ストリングもありません。
なのでシステムのプロパティの物が取得出来たら手っ取り早いかと思いまして。

493 :デフォルトの名無しさん:2009/09/04(金) 15:28:57
WindowsのAPIに用意されてたはず。
Win32のGetSystemInfo当たりで取得できるんじゃね?

494 :デフォルトの名無しさん:2009/09/04(金) 15:47:06
システムのプロパティはレジストリ見てる

495 :デフォルトの名無しさん:2009/09/04(金) 16:06:08
>>493
GetSystemInfoは旧世代の遺物。386 or 486 or Pentium くらいしか判断できん。

496 :デフォルトの名無しさん:2009/09/04(金) 16:35:41
Debug/Releaseモードの他に構成を増やしたい場合って、どうすれば構成を追加できますかね。

497 :デフォルトの名無しさん:2009/09/04(金) 16:38:03
>>496
[ビルド]メニュー - [構成マネージャ] - <新規作成...>

498 :デフォルトの名無しさん:2009/09/04(金) 16:50:52
できました。ありがとうございます。
でもこれって、空かRelease or Debugのコピーでしか作れないんでしょうか。
ソリューション内に、8つのプロジェクトがあるんですが、新しく作った構成の雛形みたいなのを編集したいです。

499 :デフォルトの名無しさん:2009/09/04(金) 18:00:46
既存の構成から作れるけど

500 :デフォルトの名無しさん:2009/09/04(金) 18:58:52
個々のプロジェクトではすぐに既存の構成のコピーから作成できたのですが、
ソリューションの構成を新規作成した際に、全てのプロジェクトに一律に設定される構成を
たとえばProjectAのDebug構成と同じにするといった方法がちょっとわからないです。

501 :デフォルトの名無しさん:2009/09/04(金) 20:09:41
ActiveX の Web browserコントロールで、現在の表示しているページのURLを取得したり
前のページに戻ったりの関数を知りたいのですが、ドキュメントとかはあるのですか?

ちょっとどこを調べればいいかわかりません。教えてください。

502 :デフォルトの名無しさん:2009/09/04(金) 20:15:59
MSDN

503 :デフォルトの名無しさん:2009/09/04(金) 20:47:20
MSDNにあるんですね(><;)

ActiveXコントロールは内科と思っていました(><;)

どうもありがとうございました(^人^)

504 :デフォルトの名無しさん:2009/09/05(土) 01:40:13
VC10 beta1のインクルードディレクトリ指定ですが、
個々のプロジェクト別でなくて、以前のような全体で共通の設定をしたいのですが、
どこに行ったのでしょうか? 



505 :デフォルトの名無しさん:2009/09/05(土) 01:46:10
>>500
ソリューションもプロジェクトも中身はどうせxmlなんだから雛形くらい自分で編集したら?

506 :デフォルトの名無しさん:2009/09/05(土) 18:43:44
すごい初心者じみた質問で悪いのですが、
VisualC++2008をインストールして、実際に
>>5をやってみたら、LINK2005と1169のエラー
がでてしまったのですが、改善するには
どうすればいいんでしょうか?
エラー内容は
LNK2005: _main は既に ***.obj で定義されています。
LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
です。

507 :デフォルトの名無しさん:2009/09/05(土) 18:46:49
>>9


508 :デフォルトの名無しさん:2009/09/05(土) 20:00:17
>>9でやっても
error C2449: '{' を見つけました (関数のヘッダーがないかもしれません)。
error C2059: 構文エラー : '}'
とでたんですが。

509 :デフォルトの名無しさん:2009/09/05(土) 20:03:08
>>507
釣りだろ。相手すんな。

510 :デフォルトの名無しさん:2009/09/06(日) 12:46:53
構成プロパティ見ると
.NET Framworkがなんとかかんとかruntimeがどうたらこうたらってでて選択できないんだけど
リンカの設定するにはどうすりゃいいの>

511 :デフォルトの名無しさん:2009/09/06(日) 16:06:50
最初から状況をきちんと書いて、なんとかかんとかもちゃんと全部書けば
何をしようとしてどこが間違ってるのか指摘できるんだが。

512 :デフォルトの名無しさん:2009/09/06(日) 20:33:39
VisualStudioのシリアルナンバーや個人情報、それがProかExpressでつくられたかなどの
情報はプログラム本体にコンパイルしたときに保存されるんですか?

ツール作って公開したいんですが、それから身元割れしたくないんですが
もちろんウイルス作ったわけじゃないですが

513 :デフォルトの名無しさん:2009/09/06(日) 20:42:10
ワレザー乙

514 :512:2009/09/06(日) 20:54:54
へえ…今の時代はExpressまで割る人がいるのかぁ
無料で配布されているのに(笑)

515 :デフォルトの名無しさん:2009/09/06(日) 21:06:02
>>514
                      ._,,,,,,。,,、        广'x、   ,,、._    」'゙''i、
     ,,,,,_.,,,,、广゚┐     .,,,v―冖"~゛   ゙'i、      .ト  ,|,_  riゃ .}   .,i´ '冖i、
     .] ` f゙,l° ,i´     .゙l_ .y-┐ 'や'゙"゙’    _,,,vr"   .゙ト.゙'x,,,,广 ィ・'''゙~  .._,,v・゚ヒ''''・x、
     入、rУ ,iレ-v,,,、   .,r°."'''l゙  ,|√゙゚'i、   匸 ._  .y・'゙゚,,,v―-,  .:゚ーa  .√ ._,rll_  :}
  .,r''y|゛゙゙l..,i´ ,i"゙l,  .゙ト  ,r°,,,  ..,  ._,,vぐ    .`√ .,i´l广._,,,,,,,,i´  ,,i´ ,i´ ,「 .:| .~''''″
 .r″ .|゙l、 “ .,i″.yi入-イ  il∠i、.` .,メ|  |   」'ト   .,,i´ .,i´ ,, ̄      .[  .,i´.,,,,,,! .]_
 .゙l_,i´,レ  .'?_,,,,レ ~''┐   .,r°.,i´.|  .|   ,l゙ :゙l、 ,,i´ ,i´ l゜.゚L__   .:―ヤ゚″_   :~''=、
   .,r″.,x=,,      .,i´  ,x'".,,x'″ .゙l、 ゙冖''″ .] |  .,i´ .゙l,    .~1   .゚L '゙〃 ,n, .,,}
  .,l彡'''″  .゙~"''''''''''"゜  .テ''~゛    .:゚'―---―・° ―″   .~''¬―'″    .:゚=_,r

516 :デフォルトの名無しさん:2009/09/06(日) 21:09:36
JPEGを直接壁紙に設定するにはどうすればいいですか?
XPでVC++2008EEを使っています。

517 :デフォルトの名無しさん:2009/09/06(日) 21:14:03
>>514
「へえ…」
「かぁ」
「(笑)」
この辺、ぼろが出てますよダンナwww

518 :デフォルトの名無しさん:2009/09/06(日) 22:41:24
>>512
初期設定だとリリースビルドでもデバッグ情報の埋め込みが有効になっている。
この状態だと、EXEファイルにPDBファイルへのフルパスが書き込まれる。
例えば、マイドキュメントの中にプロジェクトがあったとすると、
C:\Users\ユーザ名\Documents\プロジェクト名\Release\Hoge.pdbって具合になるので、ユーザ名がバレてしまう。

対策としては、出力フォルダの場所を無害なところにするか、デバッグ情報を埋め込まない設定にすること。

519 :デフォルトの名無しさん:2009/09/07(月) 17:13:05
DLLの作成の勉強をしているのですが、クラスをエクスポートするDLLを作る場合、
メンバ変数やメンバ関数をヘッダに追加するたびに、
そのクラスを使っているアプリもすべてリビルドしないといけないものなのですか?
DLLのありがたみが感じられない上に、うっかりリビルドし忘れて
「アプリが正しく動かない」状態が簡単に発生しそうなのですが。

520 :デフォルトの名無しさん:2009/09/07(月) 17:19:56
>>519
メンバ変数やメンバ関数を削除したなら、それを使っているアプリのリビルドは当然必要だが、追加なら必要はない。

DLLを更新するたびにアプリのリビルドが必要だとすれば、Microsoft Update をするだびに
使っているアプリのバージョンアップが必要になる。

521 :デフォルトの名無しさん:2009/09/07(月) 17:38:44
>>519-520
メンバ変数の増減は、リビルド必要。
仮想的でないメンバ関数の追加はリビルドしなくても動く(が、リビルドするほうが安心)。

だから、pimplとかCOMとかのような
クラス実装が変化してもアプリ側に影響を及ぼさない技術がもてはやされるわけ。


522 :デフォルトの名無しさん:2009/09/07(月) 18:42:04
>>505
逆に言えば、その方法しかないということなんでしょうか。

523 :デフォルトの名無しさん:2009/09/07(月) 18:59:45
方法はあるかもしれないが、ここはサポートセンターじゃないからな。
普通のユーザーは自分が必要な機能だけ使ってるわけで、
すべての機能を知りつくしてる必要はないだろ。
サポートが必要なら公式のサポートまたはマイクロソフトの関係者がいる場所で聞けばいい。

524 :デフォルトの名無しさん:2009/09/07(月) 21:12:22
Visual Studio 2005(C++)で作ったソフトを他PCに配布するために、
DependencyWalkerでどのDLLを使うかを調べています。

ttp://kissho1.xii.jp/7/src/7jyou25711.png

それで、このように表示されたのですが、
これら6つのDLLがあれば良いということになるのでしょうか?
それぞれの項目を展開すると、さらにたくさんのDLLが表示されますが、
それらは上位のDLLに含まれている、と解釈してよいのでしょうか?

もし、上記6つだけでよいのであれば、配布先ユーザーには
何を用意してもらえばよいでしょうか?
MSDNを見ると、

KERNEL32.DLL
USER32.DLL
OLE32.DLL

はOSに元から入ってるそうなので、問題ないと思いますが、
その他のDLLは「Visual C++ 2005 再頒布可能パッケージ」を
インストールしてもらえば揃うのでしょうか?

よろしくお願いします。

525 :デフォルトの名無しさん:2009/09/07(月) 21:24:16
自分でテスト環境すら用意できないのに配布するつもりなの?
人柱も迷惑だよな

526 :デフォルトの名無しさん:2009/09/07(月) 21:29:44
>>525
だから、配布する前に確認してるんだろ
初心者スレなんだから問題ないと思うが

>>524
リンク先が見れん

527 :デフォルトの名無しさん:2009/09/07(月) 21:43:08
悪意のあるサイト

528 :524:2009/09/07(月) 21:45:47
すみません、リンク先の画像はDependencyWalkerの左上ペインを切り出したもので、
以下のように6つのDLLがリストされています。

・KERNEL32.DLL
・USER32.DLL
・GDI32.DLL
・SHELL32.DLL
・OLE32.DLL
・OLEAUT32.DLL

よろしくお願いします。

529 :デフォルトの名無しさん:2009/09/07(月) 21:56:20
市販ソフトじゃなきゃ、問題が出てからアップデートでいいんじゃね。


530 :デフォルトの名無しさん:2009/09/07(月) 21:56:39
>>524
その6つはすべてOSの一部。
すなわち、そのプログラムはほかに何もインストールしていなくても動く。

強いて言えば、下3つはIEのバージョンアップで新しいバージョンが入ることがあったことくらい。
ただ、それはIE4-5辺りのこと。今はもうない。

531 :524:2009/09/07(月) 22:01:47
>>530
DirectShowプログラムなので、少し心配でしたが、やはりDirectXSDKからWindowsSDKに移っただけに、
OSの標準のライブラリとしてはじめから入るようになったんですね。

教えてくださって、ありがとうございました!

>>529
うまくいかなかった場合はそれで対応したいと思います。
ありがとうございました。

532 :デフォルトの名無しさん:2009/09/07(月) 22:16:34
>>531
おっとそういうことは最初に言うんだ。
DirectShowは単にDependencyWalkerそのまま使っても表示されないよ。
プロファイル取るモード(実際にEXE動かして確かめるやつ)使うとdshow.dllを確認できるはず。

DirectXならこれをインストールさせるのが確実。
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3

なお、Visual C++再頒布可能パッケージでインストールされるのはmsvc*.dll、mfc*.dll、atl*.dll辺り。

533 :デフォルトの名無しさん:2009/09/07(月) 23:01:25
よく探したら専用スレがあった

534 :デフォルトの名無しさん:2009/09/07(月) 23:53:42
ある関数内で宣言、定義、代入した配列を他の関数内で使いたいときはどうするのがよいでしょうか
グローバル変数にしてしまうのが良いですか?

535 :デフォルトの名無しさん:2009/09/08(火) 00:01:34
>>534
C/C++スレで訊けば?

ちなみに、グローバル変数なんてプログラムにひとつあれば十分。

536 :デフォルトの名無しさん:2009/09/08(火) 00:07:06
>>535
ありがとうございます、行って来ます
やっぱりグローバル変数は使わないほうがいいんですよね・・

537 :デフォルトの名無しさん:2009/09/08(火) 00:08:59
必要なら使っていいんだよ、用は使い方の問題だけ。
不用意に多いのは、横目で見られる可能性があるだけ

538 :524:2009/09/08(火) 00:16:00
>>532
失礼しました(汗)
ありがとうございます。
プロファイルモードでさらにDLLを洗い出しました。
上記6つのリストに変わりはありませんでした。
(異なるアイコンでKERNEL32.DLLが出てきましたが)

dshow.dllは見つかりませんでした。

>DirectXならこれをインストールさせるのが確実。
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=2da43d38-db71-4c1b-bc6a-9b6652cd92a3
DirectXはVMR9を使う場合は要るみたいですが、今回のプログラムではVMR9は使わないようにしています。
もしそうであっても必要と分かったら教えていただいたURLからダウンロードしてもらうようにします。

>なお、Visual C++再頒布可能パッケージでインストールされるのはmsvc*.dll、mfc*.dll、atl*.dll辺り。
MFC、ATLは使っていませんし、MSVCも、マルチスレッドライブラリを静的にリンクしています。
Visual C++再頒布可能パッケージも不要かもしれませんね。

539 :519:2009/09/08(火) 10:34:18
>>520-521
やっぱりメンバ増やしただけで、
そのDLL内のクラスを使っている他のアプリケーションも
すべてリビルドしないといけないのですね。

それならアプリケーションのプロジェクトに
クラスをソースごと取り込んでおいて
EXEに埋め込んでしまったほうが安全ですよね。

540 :デフォルトの名無しさん:2009/09/08(火) 11:15:15
>>539
直接クラスをエクスポートしないで関数でやり取りすりゃいいじゃないか

541 :デフォルトの名無しさん:2009/09/08(火) 13:33:16
確かに
dll修正したぐらいで昔のプログラムが使えなくなったなんて話聞かない。
設計がアホなんだろ

542 :デフォルトの名無しさん:2009/09/08(火) 17:43:21
dll使うんだったら、exeとdll間のインターフェースをちゃんと定義して、ホイホイ変えちゃだめ。
C++だったらCOMの仕組みを真似すれば拡張するのも割りと楽。

543 :デフォルトの名無しさん:2009/09/08(火) 17:56:30
ちなみに、>>30のコードをそっくりコピーして試しても、ウチでは何の問題もない。

544 :543:2009/09/08(火) 17:57:11
>>543 誤爆

545 :デフォルトの名無しさん:2009/09/08(火) 20:57:22
ポインタを使って参照渡しというものをやってみたのですが
うまくうごいてくれません。どこが間違っているのでしょうか/

一次元の配列では上手く動きました
数値を配列aに代入し、f関数で配列aの4番目の要素を表示させるというコードです
#include <stdio.h>
void f(int *ary);

int main(){
int a[5]=
{0,1,2,3,99};
f(a); }

void f(int *ary){
printf("%d",ary[4]);
return ;}

ですが二次元配列にするとダメです。どこが間違っているのでしょうか?
#include <stdio.h>
void f(int *ary);

int main(){
int a[2][5]=
{
{0,1,2,3,99},
{5,62,6,3,99}
};
f(a);}

void f(int *ary){
printf("%d",ary[4]);
return ;}

546 :デフォルトの名無しさん:2009/09/08(火) 20:59:28
C++スレでやってくれ

547 :デフォルトの名無しさん:2009/09/08(火) 21:03:09
すいませんでした

548 :デフォルトの名無しさん:2009/09/08(火) 21:20:18
Tabは全角スペースに置き換えてからソースは張ってくれ

549 :デフォルトの名無しさん:2009/09/09(水) 00:37:21
>>545
おそらく、2D配列は1D配列へのポインタの1D配列になるため。
例えば int a[2][5] だと a は int[5] へのポインタ2つの配列ということになる。
a[0] や &a[0][0] みたいにして渡すといいかも。

550 :デフォルトの名無しさん:2009/09/09(水) 07:27:25
>>545
どの行の4列目を表示するのか指定すればよい。
f(a[1]);

>>549
いや、実際はポインタの配列ではないよ。1次元配列を擬似的に2次元配列とみないしているだけ。
{1,2,3,99,5,62,6,3,99}のように値で格納されている。
for (int i=0;i<10;++i)
cout << ((int*)a)[i] << endl;;
を実行してみればわかるよ。

551 :デフォルトの名無しさん:2009/09/09(水) 18:42:19
VC++.net 2002で猫でもわかるに掲載されているサンプルコードをビルドすると
リンクエラーとなるのですがなぜでしょうか?
#include <afxwin.h>


class CMyWindow : public CFrameWnd
{
public:
CMyWindow();
};

CMyWindow::CMyWindow()
{
Create(NULL, "猫でもわかるMFC", WS_OVERLAPPEDWINDOW);
}

class CMyApp : public CWinApp
{
public:
virtual BOOL InitInstance();
};

BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMyWindow();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}

CMyApp MyApp;


552 :デフォルトの名無しさん:2009/09/09(水) 18:49:45
>>551
リンクエラーの内容を書いてMFC相談室で訊け。

553 :デフォルトの名無しさん:2009/09/09(水) 19:14:53
ウイザードで作ったスケルトンでやれば、そんなくだらないことでつまづくこともないのに。

554 :デフォルトの名無しさん:2009/09/09(水) 21:51:43
VisualStdio2005(VC++)を使用しております。

ApplicationSettings->PropertyBindingから任意のプロパティを選択し「Name」を入力して
OKをクリックすると以下のエラーメッセージが出力されます。
「設定ファイルがプロジェクトに見つかりません。設定ファイルを追加して、再試行してください。」

プロジェクトに設定ファイル(app.config)等を追加してみましたがNGでした。

ご教授のほど宜しくお願いいたします。

[参考サイト]
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/438winsettings/winsettings.html

555 :デフォルトの名無しさん:2009/09/10(木) 00:40:33
ttp://www.si.hirosaki-u.ac.jp/~slame/neuro/backprop.html
上記サイトにある、backprop.cというプログラムがどうしてもVisual c++でコンパイルできません。
ファイル→新規作成→Win32を選択し、ソースファイルに上記プログラムをぶちこんでビルドしました。が、exeファイル開けず。

よく注意書きを見ると、ttp://www.si.hirosaki-u.ac.jp/~slame/neuro/program1.htmに
lうまくコンパイルできない場合このリンク先をみろと書かれ、そのリンク先に

『drand48,srand48がなくてエラーになる場合
コンパイル時drand48,srand48がなくてエラーになる場合は次の手順でソースプログラムを変更してください。


ヘッダファイル ranran48.h をダウンロードして、ソースプログラムと同じディレクトリに置く。

ソースプログラム backprop.c をテキストエディタ等で開き、ヘッダファイル読み込みの最後の行(11行目)の後に、次の1行をつけ加えて上書き保存する。
#include"ranran48.h"

もう1度コンパイルする』

とあり、言われたとおりにして実行しましたがやはりダメでした。

556 :デフォルトの名無しさん:2009/09/10(木) 00:41:38
エラーは下記のとおりです。


1>コンパイルしています...
1>backprop.c
1>c:\c\backprop.c(58) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。
1>c:\c\backprop.c(66) : warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(256) : 'fscanf' の宣言を確認してください。
1>c:\c\backprop.c(70) : warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(256) : 'fscanf' の宣言を確認してください。
1>c:\c\backprop.c(137) : warning C4244: '=' : 'time_t' から 'long' への変換です。データが失われる可能性があります。

1>中間 - エラー 0、警告 4
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

ご教授お願いします。

557 :デフォルトの名無しさん:2009/09/10(木) 00:47:17
で、どこにエラーがあるんだ? warnnig しか見当たらないが。

558 :デフォルトの名無しさん:2009/09/10(木) 00:47:20
>>556
「1 正常終了」
とりあえず、EXEは出来上がっている。

559 :デフォルトの名無しさん:2009/09/10(木) 00:50:16
はい、exeはできてるんですが、開けないんです。開くと英語のメッセがでて、中止とか無視って選択があり、
中止にして何かキーを押すと閉じ、無視すると「動作は停止しました」ってなります。

560 :デフォルトの名無しさん:2009/09/10(木) 01:06:46
問題ないそれでOKだ。

561 :デフォルトの名無しさん:2009/09/10(木) 01:08:52
どういうことですか?これだとシミュレーションできないんですけど。

562 :デフォルトの名無しさん:2009/09/10(木) 01:18:07
問題ない。シュミレーションできる。

563 :デフォルトの名無しさん:2009/09/10(木) 01:23:00
すみませんがやり方を教えていただけませんでしょうか?
また、シミュレーションには、exeファイルのコマンドプロンプトからデータファイルを読み込む必要があるのだと思うのですが
肝心のコマンドプロンプトが開けないんですよ。

564 :デフォルトの名無しさん:2009/09/10(木) 01:34:25
メニュー→プロジェクト→〜のプロパティ→構成のプロパティ→デバッグ→コマンド引数にファイル名を入れる。
ファイルはプロジェクトファイルと同じフォルダに置くこと。

565 :デフォルトの名無しさん:2009/09/10(木) 01:36:31
VisualC++2008 ExpressEditionってどうしてこんなに重いんでしょうか
ソースを保存すると1秒ぐらい砂時計になるし、
デバッグモードで実行すると終了する時に5秒ぐらいフリーズするし、
開発環境を閉じる時も10秒ぐらいかかる。

566 :デフォルトの名無しさん:2009/09/10(木) 01:52:00
>>564
言われたとおりにしましたがダメでした。まず、BPというファイルネームです。
で、自分はローカルデスクCドライブに、C言語用にCというフォルダを作り、そこにソースプログラム等を入れるようにしてました。
あなたのおっしゃる通りの作業をしましたが開けません。
Visual c++のprojectsにBPという出来上がったexeファイルを入れて再度試行しましたが、できませんでした。何度もすみません。

567 :デフォルトの名無しさん:2009/09/10(木) 01:53:26
>>566
そのソースを書いた人間にきけ。ここで聞く話じゃない。

568 :デフォルトの名無しさん:2009/09/10(木) 02:27:50
コマンドプロンプトから実行せいや
あとはしらん

569 :デフォルトの名無しさん:2009/09/10(木) 05:34:05
visual studioを購入しようと思うのですがアカデミック版で問題ありませんか?
何か制限などあるのでしょうか?

570 :デフォルトの名無しさん:2009/09/10(木) 07:19:45
>何か制限などあるのでしょうか?
パンピーは買えない。

571 :デフォルトの名無しさん:2009/09/10(木) 07:21:37
EEが無料だからまずはそれにしておきなさい

572 :デフォルトの名無しさん:2009/09/10(木) 09:33:39
>>571
EE使ってるんですけどwindowsmobile向けのプログラミングもしたいので。
新しく欲しいんですが
普通の奴は10マンとか馬鹿みたいな値段してますけどアカデミックは普通に買えるので。


573 :デフォルトの名無しさん:2009/09/10(木) 09:37:29
DreamSpark があるのにね

574 :デフォルトの名無しさん:2009/09/10(木) 17:03:49
>>565
残念ながらPC買い換えの時期が近いのではないだろうか。
いや、それともよい機会かもしれないぞ。

575 :デフォルトの名無しさん:2009/09/10(木) 21:45:39
XPでVC++2010Betaを動かしたら、CPUはC2Dで3GHzなのに糞重いんだけど、
一般的にこれはVistaか7にすればまともになるものなんですか?


576 :デフォルトの名無しさん:2009/09/10(木) 22:05:20
今のところ、公開されているβはどれで動かしても重い。
なので、microsoftの中の人が
「どんどん最適化してるし、マルチスレッド化も進んでるよ、だから安心して」
ってブログで書いてた。

製品版は3倍くらいの速度になるとかしたいとか言ってた筈。

577 :デフォルトの名無しさん:2009/09/10(木) 22:22:11
数値計算をして、その結果を視覚的に表示できるようなアプリケーションを作りたいのですが、
これからどんなことを勉強していけばいいのでしょうか?

578 :デフォルトの名無しさん:2009/09/10(木) 22:28:52
うちのVS2008はSP1入れてから重くなった
SP1って何の効果があるの


579 :デフォルトの名無しさん:2009/09/10(木) 22:49:09
デフォルトで開発環境が重くなるように設定されとるからなあ。
オプション-環境-スタートアップでコンテンツのロードのチェックをはずす
同じく、自動バックアップを1時間ごとくらいに設定、にしてみてはどうか。

580 :デフォルトの名無しさん:2009/09/10(木) 23:03:44
>>577
OpenGL

581 :577:2009/09/10(木) 23:07:01
>>580
ありがとうございます。OpenGLってはじめて聞いたので、少し自分で調べてみます。

582 :デフォルトの名無しさん:2009/09/10(木) 23:07:26
>>578
Feature Packのライブラリが使えるようになる。
正規表現とか参照カウントのスマートポインタとか。

583 :デフォルトの名無しさん:2009/09/10(木) 23:17:49
>参照カウントのスマートポインタ

そんなのはいってたの?しらんかった^^;;

584 :デフォルトの名無しさん:2009/09/10(木) 23:46:46
>>577
EXCELのvba
あのexcelという奴は本当に便利だわ


585 :デフォルトの名無しさん:2009/09/11(金) 01:35:07
ふつーOpenOfficeCalc。

586 :デフォルトの名無しさん:2009/09/11(金) 01:41:28
gnuplotでおk

587 :デフォルトの名無しさん:2009/09/11(金) 01:42:49
>>583
std::tr1::shared_ptr
Boostのと同じ。

588 :デフォルトの名無しさん:2009/09/11(金) 21:49:01
プログラム内で使われる画像や音声などのファイルを.exe内に収めたいのですがどうやればいいんですか?

589 :デフォルトの名無しさん:2009/09/11(金) 22:18:49
>>588
リソースにするんじゃいやなのかい?

590 :588:2009/09/11(金) 22:31:35
>>589
よくフォルダ内に入ってる.rcってやつですか?
それでもいいんでお願いします

591 :デフォルトの名無しさん:2009/09/11(金) 22:34:55
リソースにすればいいってことがわかっても、自分で調べる木がねーってか

592 :デフォルトの名無しさん:2009/09/11(金) 22:36:22
寧ろzipの自己展開で医院で内科医?

593 :デフォルトの名無しさん:2009/09/11(金) 22:36:36
入れるのは簡単だけど、exe中に入ってるやつ使う方法知らないと使えないよ

594 :588:2009/09/11(金) 22:39:26
>>591
検索してもなかなか初心者向けのがヒットしない

595 :デフォルトの名無しさん:2009/09/11(金) 22:39:46
入れるのはプロジェクトに追加してビルドするだけ

596 :デフォルトの名無しさん:2009/09/11(金) 22:42:24
いやいやw

VC++でリソースビュー開いて、プロジェクト名で右クリック→カスタムで
簡単にexeに組み込まれるリソースのできあがりじゃろw

597 :デフォルトの名無しさん:2009/09/11(金) 22:57:38
> 590 名前:588[sage] 投稿日:2009/09/11(金) 22:31:35
> 594 名前:588[sage] 投稿日:2009/09/11(金) 22:39:26

たかが数分で「なかなかヒットしない」などとほざくな。>>4 のいちばん上にも使用例は書いてある。

598 :デフォルトの名無しさん:2009/09/11(金) 23:03:08
いや数日前から調べてた
>>596
resouce.hとかは関係無い?
勝手に読み込み先が変わってくれるってこと?

599 :デフォルトの名無しさん:2009/09/12(土) 00:25:48
>>598
読込先?何の話だ?
おまえが何語を話しているのか理解できなくなってきた。

600 :デフォルトの名無しさん:2009/09/12(土) 00:52:24
>>598
関係ある。
596の手順を行うと、VCが自動でresource.hを編集していく。
必要に応じてincludeする。

601 :デフォルトの名無しさん:2009/09/12(土) 08:31:13
VC++でF5+Ctrlでは問題なく実行できるのにDebugフォルダにできた実行ファイルをダブルクリックすると落ちてしまいます
なぜでしょうか?

602 :601:2009/09/12(土) 08:38:09
ごめんなさい
自己解決しました

603 :デフォルトの名無しさん:2009/09/12(土) 12:09:10
テキストボックスの行数制限って可能でしょうか?

全角16文字*16行の256文字まで入力可能なテキストボックスを作りたいのですが
最大文字数を256に設定することはできたのですが最大行数を16に設定する方法がわかりません。

どなたかご教授お願いします。

604 :デフォルトの名無しさん:2009/09/12(土) 12:32:07
標準でそういう設定はないから、サブクラス化して自前で処理するしかない。

605 :603:2009/09/12(土) 12:48:57
>>604
ありがとうございました。
頑張ってみます…

606 :デフォルトの名無しさん:2009/09/12(土) 15:52:29
http://homepage3.nifty.com/ishidate/vcpp08_1/vcpp08_1.htm
このページを参考に姓名を入力させ、表示するプログラムを作りました。
まんま写したつもりなんですけどビルドエラーが発生します。
どこか間違ってるのでしょうか?
自分では分からないので指摘お願いします。

以下ソースコード

#include "stdafx.h"

using namespace System;

int main()
{
String ^string1,^string2;

Console:Title="初めてのプログラム";

Console::Write("姓を入力してください:");
string1=Console:ReadLine();
Console::Write("名を入力してください:");
string2=Console:ReadLine();
Console::WriteLine("姓名は:" + string1 + " " + string2);

return 0;
}

607 :デフォルトの名無しさん:2009/09/12(土) 16:00:19
>・エラーや警告のときはエラーメッセージを書きましょう。

608 :606:2009/09/12(土) 16:03:38
ビルドログ見つけました

コンパイルしています...
C800.cpp
.\C800.cpp(14) : error C2275: 'System::Console' : この型は演算子として使用できません
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::Console' の宣言を確認してください。
.\C800.cpp(14) : error C2143: 構文エラー : ';' が ':' の前にありません。
.\C800.cpp(14) : error C2143: 構文エラー : ';' が ':' の前にありません。
.\C800.cpp(16) : error C2275: 'System::Console' : この型は演算子として使用できません
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::Console' の宣言を確認してください。
.\C800.cpp(16) : error C2143: 構文エラー : ';' が ':' の前にありません。
.\C800.cpp(16) : error C2143: 構文エラー : ';' が ':' の前にありません。
ビルドログは "file://c:\Users\Owner\Documents\Visual Studio 2008\Projects\C800\Debug\BuildLog.htm" に保存されました。
C800 - エラー 6、警告 0


mscorlib.dllってのをメモ帳で開いてみようとしたら応答なしになっちゃう


>>607
「ビルドエラーが発生しました」としか出ないんですが・・・

609 :デフォルトの名無しさん:2009/09/12(土) 16:07:01
>Console:Title="初めてのプログラム";

610 :606:2009/09/12(土) 16:08:24
>>609
Console:Title="初めてのプログラム";  を
Console::Title="初めてのプログラム";  に修正しましたが
同じくビルドエラーでした

611 :デフォルトの名無しさん:2009/09/12(土) 16:10:45
>string1=Console:ReadLine();

612 :デフォルトの名無しさん:2009/09/12(土) 16:12:34
> string1=Console:ReadLine();


613 :606:2009/09/12(土) 16:13:16
>>611
それでした。解決できました。
:は基本2つつけるものなんですね。
ありがとうございました。

614 :デフォルトの名無しさん:2009/09/12(土) 16:19:19
>>613
基本2つとかもうそういう問題じゃなくてですね・・・。

スコープ解決演算子というものが…(ry

615 :デフォルトの名無しさん:2009/09/12(土) 16:19:32
>mscorlib.dllってのをメモ帳で開いてみようとしたら

_ASSERT( FALSE);

616 :デフォルトの名無しさん:2009/09/13(日) 01:11:34
クラス定義で以下のようなメンバがあるのだけれど
頭と後ろのconstの意味はなんでしょうか。。

virtual const DWORD GetInputNum(void) const = 0;

617 :デフォルトの名無しさん:2009/09/13(日) 01:23:27
頭のconstは無意味
後ろのconstは、そのメンバ関数がconstなインスタンスに対して呼べるしるし (thisがconstになる)

618 :デフォルトの名無しさん:2009/09/13(日) 01:27:06
̧̛͇̦̭̯͍̱͖̼͔̣̲͙͇̼͈̃͋̓̾͋ͪͣͦ͑̍̃͊̃͟͟͠ͅ=0の意味は何ですか?


619 :デフォルトの名無しさん:2009/09/13(日) 01:32:36
せめて読めるように書いてくれ

620 :デフォルトの名無しさん:2009/09/13(日) 02:06:20
>>618
その書き方が気になる
純粋仮想関数でぐぐれ
あと言語自体の質問はC++スレでやれ

621 :デフォルトの名無しさん:2009/09/13(日) 04:08:58
Javaのabstractメソッドみたいなもの?

622 :デフォルトの名無しさん:2009/09/13(日) 08:38:34
>>621
そうそれ。

623 :デフォルトの名無しさん:2009/09/13(日) 11:56:13
CreateDialogで作成したダイアログの規定のボタンにマウスを自動で移動させたいのですが、
ボタンにBS_DEFPUSHBUTTONを設定し、SetFocusしても移動しませんでした。
TABとEnterは使えてます。
規定のボタンにマウスを自動で移動させるには、自身で実装する必要があるのでしょうか?


624 :デフォルトの名無しさん:2009/09/13(日) 12:13:53
環境や設定によってはマウスが自動で動くが、
俺はマウスが勝手に動くと逆に使いにくいから、そういう機能は使わない。

625 :デフォルトの名無しさん:2009/09/13(日) 12:16:25
http://www.atmarkit.co.jp/fwin2k/win2ktips/889pointer/pointer.html
マウス・ポインタを自動的に既定ボタン上に移動させる

626 :デフォルトの名無しさん:2009/09/13(日) 19:32:00
visual basic 2008 で「数値1と数値2を読み込んで小さいほうの数以上で大きいほうの数以下の
整数を全て加えた値を表 示するプログラムを作れ」という問題が分からないんで教えてください::
for next を必ず使わなければいけないそうです
自分で作ったプログラム↓
dim i,j,sum as integer
i=val(textbox1.text)
j=val(textbox2.text)
for i = val(textbox1.text) to val(textbox2.text)
sum=sum+i
next
label3.text=i&"〜"&j&"までの和は"&sum&"です"

一応動くのですが数値がおかしいんです・・・。
間違ってるところを教えてください。

627 :デフォルトの名無しさん:2009/09/13(日) 19:39:31
プログラムどうこうではなく
あなたは質問するスレを間違っている。

628 :デフォルトの名無しさん:2009/09/13(日) 20:34:56
>>626
うん、帰れ。

629 :デフォルトの名無しさん:2009/09/13(日) 21:49:50
最近VC++を勉強し始めたものです。
ご教授願えればと思い質問させて頂きます。

環境:WindowsXP、Visual Studio6.0 MFC、SDI

テキストボックスに入力された16進数の値を、バイナリとしてファイル出力したいのですが、
文字列として読み込んだ値を16進数に変換してくれるような関数はあるでしょうか?

(イメージ)
Cstring AAA = "FF";
出力ファイルをバイナリエディタで開いた時 FF

もしあったら、無ければ代替方法を お教え願えればと思います。
よろしくお願いいたします。


630 :デフォルトの名無しさん:2009/09/13(日) 21:58:23
>>629
strtol
16進数に変換するんじゃなくて、文字列を16進数として解釈して変換後の数値を返す関数だが

631 :デフォルトの名無しさん:2009/09/13(日) 23:00:07
>>627 そうなんですか、ごめんね

632 :デフォルトの名無しさん:2009/09/13(日) 23:37:08
>>631
大体何したいか分かっててもこのスレじゃ答えてあげられないんだ
すまない

633 :629:2009/09/14(月) 00:35:11
>630

回答ありがとうございます。
明日と言うか今日試して見ます。

また何かあったおりは、アドバイスお願いいたします。



634 :デフォルトの名無しさん:2009/09/14(月) 03:05:10
いやだからよそでやれって

635 :デフォルトの名無しさん:2009/09/14(月) 09:50:48
わざわざファイルに書くんならstrtolじゃ短すぎるんじゃないかと思うけど、
いったい何するプログラムなのか理解不能。
ただの興味本位や思いつきでやってることなら関わるだけ時間の無駄な気がする。

636 :デフォルトの名無しさん:2009/09/14(月) 16:54:04
プロジェクトフォルダって最初"Visual Studio 2008\Projects"になっていますが、
これを変更するにはどこをいじればいいでしょうか

637 :デフォルトの名無しさん:2009/09/14(月) 17:31:23
メニュー探せばあると思うけど
わざわざ本人の代わりに探してやるほどお人よしじゃないから

638 :デフォルトの名無しさん:2009/09/14(月) 17:40:48
>>636
[ツール] - [オプション]

639 :629:2009/09/15(火) 01:58:27
>>635
多分自分の質問に対するレスですよね?

出力するファイルは、他のシミュレータが読み込むデータファイルとなります。
勉強がてらサポートツールを作ってみて、と言われて作成しているしだいです。
データ数としては全部で70Byte程なので、各テキストボックスからの入力を
教えて頂いた方法で、切り出し&ループして変換しようと思っております。
もちろん一括で簡単に変換できたら嬉しいですけど。

とにかく、お目汚しな質問スイマセンでした。

640 :デフォルトの名無しさん:2009/09/16(水) 05:17:52
VC++2008EEでboost libraryの1.37使ってるんですけど、share_ptrなどをinludeすると
インテリセンスが機能しなくなるのはあきらめるしかないんですかね

641 :デフォルトの名無しさん:2009/09/16(水) 11:48:58
VC++初心者です
C言語で書いていた画像処理のプログラムをVC++でWindowsアプリケーションにしようと思いやり始めたのですが、
なかなかC言語と同じようにはいかずに困っています。

環境:Windows XP, Visual C++ 2008 Express Edition, Windowsフォームアプリケーション

今、メニューを作っています。
メニュー⇒ファイル⇒画像を開く・画像を保存する・表示画像のクリア・終了する
と作っているところなのですが、表示画像のクリアでつまずいています。
ファイルから読み込んだ画像をpictureBoxで表示しているのですが、
pictureBoxの画像をクリアするにはどうすればよいのでしょうか?

642 :デフォルトの名無しさん:2009/09/16(水) 20:39:58
VC++.net 2002を使っています
何度プロジェクトを作り直しても下記のエラーがでるようになったのですが
解決方法が分かりません。作業用フォルダはデフォルトのディレクトリです。

ChildWindow fatal error LNK1104: コンパイラは、ファイル 'Debug/ChildWindow.exe' を開くことができません。


643 :デフォルトの名無しさん:2009/09/16(水) 20:57:10
リンカ ツール エラー LNK1104
ファイル "filename" を開けません。

指定されたファイルを開けません。

ヒント

このエラーには次のような原因が考えられます。

ディスク容量が足りません。
ファイルが存在しません。
ファイル名またはパスの指定に誤りがあります。
ドライブの指定が無効です。
ファイルに適切なアクセス権がありません。
展開した filename のパス名が 260 文字を超えています


644 :デフォルトの名無しさん:2009/09/16(水) 21:44:24
'Debug/ChildWindow.exe' が実行中とか無いよね

645 :デフォルトの名無しさん:2009/09/16(水) 21:46:36
ありえる。

646 :デフォルトの名無しさん:2009/09/18(金) 04:45:02
ver6の時は#include <hoge.h>ってやってもローカルにあるhoge.hをインクルード出来たと思ったけど
2005だとファイルが見つからないって起こられるのはなんとかならんかね?
オープンソースのをコンパイルする時にディレクトリ指定にすると同じ環境作り直すのが大変になるし
#include "hoge.h"って打ち返るのもめんどくさいし

647 :デフォルトの名無しさん:2009/09/18(金) 08:49:14
>>646
インクルードディレクトリにピリオド1文字指定するのがそんなに大変か?
あるいは、ダブルクォーテーションに直すのも正規表現で、ソリューション全体を検索対象にすればそんなに大変でもないと思う。

648 :つーか、おかしいのは>646の頭か:2009/09/18(金) 09:47:10
>>646
それは寧ろ、VC6の方がおかしいから。

649 :デフォルトの名無しさん:2009/09/18(金) 14:32:56
でもUNIXかLinuxかわからないけど、なんでもかんでも<>でインクルードしてるソースをよく見る

650 :デフォルトの名無しさん:2009/09/18(金) 14:35:52
>>649
それは自前の、あるいはそのプログラム固有のヘッダでも?
インクルードパスを正しく設定していれば<>でいいと思う。

651 :649:2009/09/18(金) 14:39:48
あーそういうことかthx

652 :デフォルトの名無しさん:2009/09/20(日) 01:16:02
質問です。
VisualC++6.0SE・MFCを使用し、コンパイルオプションに/Ob1を指定したのですが
> コマンド ラインの警告 D4002 : 認識不可能なオプション '/Ob1' を無視しました。
と表示され効果がありません。この機能はStanderd Editionでは使えないと
マニュアルにありますが、何か代替手段は無いでしょうか。

用途としては、デバッグ時にも下記のコードをインライン化したいというものです。
>template <class T> class クラス名{
> T* m_pData;
> __forceinline T& operator[](int index){ return m_pData[index]; }

動的配列に大量のランダムアクセスを多箇所で行うため、これがインライン化
されていないと処理速度が落ちてしまいデバッグがつらいです。
どうかよろしくお願いします。

653 :デフォルトの名無しさん:2009/09/20(日) 01:24:27
http://msdn.microsoft.com/en-us/library/aa449768.aspx

654 :デフォルトの名無しさん:2009/09/20(日) 03:13:36
>>653
ありがとうございます。
意図がよく飲み込めませんでしたが、最適化オプションを/Odから/O2あたりに
変更するようにアドバイスいただいたと受け取りました。試してみたところ
インライン化はできませんでした。

/O2にするとエディットコンティニューが使用できなくなりますが、そもそも
エディットコンティニューを使用しなければインライン化なしでも大幅な
速度低下は起こらないようになりました。不思議です。

以上のことから、大きなデータはデバッグコードオプションを/ZIから/Ziに
変更してデバッグすることにします。
ありがとうございました。

655 :デフォルトの名無しさん:2009/09/20(日) 14:41:50
ていうかVC6ProfessionalならともかくStandardなんて窓から投げ捨てろよ
さっさと最新VCのExpress Editionに移行しろ

656 :デフォルトの名無しさん:2009/09/20(日) 15:09:54
だーかーらー

VC6はもうC++じゃねーんだってば!!

VC++2008 Express Editionにしろよ!

657 :デフォルトの名無しさん:2009/09/20(日) 17:26:56
なんだ単なるデバッグの話か
くだらないな

658 :デフォルトの名無しさん:2009/09/21(月) 00:46:22
Linux向けのソースなんですが、VC++2008EEでもコンパイルできますか?

659 :デフォルトの名無しさん:2009/09/21(月) 01:08:00
>>658
ものによるとしかいえないが、まず無理と考えたほうがよい

660 :デフォルトの名無しさん:2009/09/21(月) 20:29:37
.exeのアイコンを設定したいのですがどうやるのですか?

661 :デフォルトの名無しさん:2009/09/21(月) 20:34:50
exeにアイコンリソースを入れる

662 :デフォルトの名無しさん:2009/09/23(水) 12:23:12
ちょっとおたずねしますが、10年くらいまえからVC6.0を使っています。
ですが、なんとなくそろそろ最新のVCに変えようかと考えています。
最新のVCってバージョンはどれですか?
Vistaやwin7のプログラムも作れますか?

663 :デフォルトの名無しさん:2009/09/23(水) 12:31:09
最新は2008
次は2010
Vistaはおっけー
7は新しいWindowsSDKを入れてください

664 :デフォルトの名無しさん:2009/09/23(水) 12:38:10
>>662
2005だけどWin7対応作れてるよ 今買うなら.NETの関係で断然2010待ちだが

665 :デフォルトの名無しさん:2009/09/23(水) 14:27:38
とりあえずフリーのエディションのやつダウンロードして試せ

666 :デフォルトの名無しさん:2009/09/27(日) 01:18:38
VC2008を使用しております。
プログラムを書く→コンパイル→デバックなしで開始→でプログラムが起動しますが

その時に開くウィンドウC:\windows\system32\cmd.exeの日本語が全て白い四角で表示されてしまいます。
どうやって直したらいいでしょうか?

よろしくお願いします。

667 :デフォルトの名無しさん:2009/09/27(日) 01:46:02
ソース書け

668 :666:2009/09/27(日) 02:05:59
#include "stdio.h"
int main(void)
{
printf("こんにちは世界\n");
return 0;
}

これをコンパイルして実行しても□□□□□□□こんな感じにしかならないんです。
なぜだ、、、

669 :デフォルトの名無しさん:2009/09/27(日) 02:08:25
ロケールを設定すればよいと思う

670 :デフォルトの名無しさん:2009/09/27(日) 09:22:32
stdio.h なんか使っているからだと思う

671 :デフォルトの名無しさん:2009/09/27(日) 10:39:17
Visual Studio .NET 2003でIDEごと落ちる異常終了に
悩んでおりますが、どなたかわかる方お助けくだされば幸いです。

開発環境は以下です
Windows XP SP2
Visual Studio .NET 2003 SP1

問題の発生手順
1.VB.NETのアプリケーションを作る
2.同ソリューションにVC.NET(マネージドC)のアプリケーションを作る
3.マネージドCのプロジェクトのプロパティーを以下のように設定
 ・C/C++のコマンドラインの追加のオプションを削除
 ・リンカの入力で削除してmsvcrtd.libを設定(リリースにはmsvcrt.lib)
 ・リンカの入力でシンボルの強制を__DllMainCRTStartup@12に設定する
 ・リンカのコマンドラインで追加のオプションを/NOENTRY /NODEFAULTLIB:LIBCMTDと設定
4.VB.netのプロジェクトの参照設定から参照の追加をしてプロジェクトタブの中に
 マネージドCのプロジェクトがあるのでそれを設定

続きます

672 :デフォルトの名無しさん:2009/09/27(日) 10:40:09
続きです

5.マネージドCのプロジェクトに以下のような簡単なプログラムを書く(ヘッダは割愛します)
 int clsTest::tst(String* strFileName)
 {
  int nRet;
  char* pstrFileName;

  nRet=0;
  pstrFileName = (char*)(void*)Marshal::StringToHGlobalAnsi(strZipFileName);

  nRet=tstsub(pstrFileName);

  Marshal::FreeHGlobal(pstrFileName);
  return nRet;
 }

 int clsTest::tstsub(char* pstrFileName)
 {
  return 0;
 }
 
6.VB.netからは以下のようにしてマネージドCを呼び出すようにします
 Dim lclsTest As New clsTest
 lclsTest.tst("ああああ.txt")

続きます

673 :デフォルトの名無しさん:2009/09/27(日) 10:41:27
続きです

さてここまでの手順でずっと開発を進めていましたが、特に問題らしい問題はなかったでした
ところが、マネージドCにSTLをつかうとコンパイルするたびに頻繁に落ちます
変更かけてコンパイルをすると2回〜4回くらいに1回の割合で落ちます。
テストコードは以下のとおりです
 int clsTest::tstsub(char* pstrFileName)
 {
  vector<wstring> vstrwFilePath;
  vector<wstring>::iterator itewstr;
  wstring strwFilePath,strwTmp;

  vstrwFilePath.push_back(L"あいうえお");
  vstrwFilePath.push_back(L"かきくけこ");
  vstrwFilePath.push_back(L"さしすせそ");
  for(itewstr=vstrwFilePath.begin();itewstr!=vstrwFilePath.end();itewstr++){
    strwTmp=*itewstr;
  }
  return 0;
 }

落ちるタイミングはコンパイルエラーなり正常終了する直前で固まって落ちます。
なのでコンパイル自体はすべて行われているみたいです。
どうもタスク一覧に切り替わるようなタイミングで落ちています。
しかも連続でやっても再現性はなく、ある程度stlを含むソースをいじって
コンパイルしなおさないと再現しません。

色々調べてみましたがわかりません。
stl部分をアンマネージプロジェクトに分けてlib化やdll化をしても現象は同じです
どなたか解決策がわかる方お願いします。


674 :デフォルトの名無しさん:2009/09/27(日) 10:44:52
訂正です
× Marshal::StringToHGlobalAnsi(strZipFileName);
○ Marshal::StringToHGlobalAnsistrFileName);

675 :デフォルトの名無しさん:2009/09/27(日) 10:47:17
すいません訂正の訂正です
× Marshal::StringToHGlobalAnsi(strZipFileName);
○ Marshal::StringToHGlobalAnsi(strFileName);


676 :デフォルトの名無しさん:2009/09/27(日) 10:59:49
何度もすみません また間違いがありました.
× 2.同ソリューションにVC.NET(マネージドC)のアプリケーションを作る
○ 2.同ソリューションにVC++で.NET(マネージドC)のクラスライブラリ(.NET)を作る

677 :666:2009/09/27(日) 11:12:45
コマンドプロンプトのフォントをMSゴシックにしたら直りました
なんでMSゴシックじゃなくなってたんだ、、、

678 :デフォルトの名無しさん:2009/09/27(日) 14:28:26
ここサポートセンターじゃないし

679 :デフォルトの名無しさん:2009/09/27(日) 17:56:29
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1031063115

↑サンプルを使ったHTTP通信の『multipart/form-data』について
教えて下さい。

リンク先はyahoo知恵袋です、回答が無く困っています… OTL


680 :デフォルトの名無しさん:2009/09/27(日) 18:43:51
HTTPならブラウザで実験してそっくり真似ればいいだけだろうが

681 :デフォルトの名無しさん:2009/09/27(日) 19:27:21
kwsk

682 :デフォルトの名無しさん:2009/09/27(日) 23:53:39
>>666
文字コードをだな…。

683 :デフォルトの名無しさん:2009/09/28(月) 01:14:37
>>679

sReq = "Content-Type: multipart/form-data; boundary=-AAAABC\r\n\r\n";
sReq += "---AAAABC\r\n";
sReq += "Content-Disposition: form-data; name=\"FormName_X\"\r\n";
・・・




684 :デフォルトの名無しさん:2009/09/28(月) 08:46:19
リソースファイルでバージョン情報を追加したんですが
この情報を読むにはどうしたらいいでしょうか?



685 :デフォルトの名無しさん:2009/09/28(月) 09:40:16
それ用のapiがあるね

686 :デフォルトの名無しさん:2009/09/28(月) 10:09:45
GetFileVersionInfoですね

687 :デフォルトの名無しさん:2009/09/28(月) 23:10:55
679です、自己解決しました。

>680
おっしゃる通りです。
パケットキャプチャをインストールして確認が出来ました。

>683
解決した方法とは違いましたがありがとうございました。


688 :デフォルトの名無しさん:2009/09/28(月) 23:19:44
679です、何度もすいません。

>683
boundary のハイフンの長さを指摘して下さってたんですね、
ご指摘の箇所で合ってました!

ありがとうございます!
違ったとか勘違いしてすいませんでした…(汗


689 :デフォルトの名無しさん:2009/09/30(水) 05:19:42
Hello, worldとひょうじさせるにはどうしたらいいですか

690 :デフォルトの名無しさん:2009/09/30(水) 15:08:48
>>689
コンソールかGUIかでやり方が違う

691 :デフォルトの名無しさん:2009/09/30(水) 15:25:11
>>689
ggrks

692 :デフォルトの名無しさん:2009/09/30(水) 16:54:34
すみません。以下のような
DATABOX* p_databox = new DATABOX[num];

構造体Aのポインタ にnewで 構造体Aの配列 を作った場合、
どうすれば 構造体Aの配列 のメンバ変数を1つ1つ取り出せるのでしょうか?(ループ処理等で扱いたくて。)

試しに p_databox[15].name p_databox[15].age などと書いてみても、
エラーにはならないものの常に値が一定で使い物にならず・・。
どうすれば良いのでしょうか orz

693 :デフォルトの名無しさん:2009/09/30(水) 16:57:10
newで作った配列に、値はちゃんと入れてあるの?

694 :デフォルトの名無しさん:2009/09/30(水) 16:58:31
p_databox[15]->name
アクセスの仕方はたしかこうだなw

695 :デフォルトの名無しさん:2009/09/30(水) 17:00:03
DATABOX*なのに構造体Aのポインタとか意味不明すぎる

696 :デフォルトの名無しさん:2009/09/30(水) 17:04:51
(^^)

697 :デフォルトの名無しさん:2009/09/30(水) 17:48:18
>>694
>error C2819: クラス 'XFILEVERTEX' にはオーバーロードされたメンバ 'operator ->' がありません。
>error C2232: '->XFILEVERTEX::x' : 左のオペランドが 'struct' 型です。'.' を使用してください。
と出てしまう様です。

>>693
参考元の通りにmemcpy()していましたが、
書き方に間違いがないとなると、値が入ってない可能性が高そうですね・・。
複写元のデータ形式がはっきりしていないので梃子摺りそうですが・・ありがとうございました。




入れてはいます。処理は成功してますが確認できていません;

>>695
ちょっと特殊な名前だったので仮名を使ってる内に。すみませんでした。

698 :デフォルトの名無しさん:2009/09/30(水) 17:49:55
ぐふ・・確認しながらチマチマ書いてたら消し忘れが。
失礼しました。

699 :デフォルトの名無しさん:2009/09/30(水) 18:00:14
>>697
コードをそのまま晒してないな
初心者が無駄なこと気にして余計な手間とらせんじゃねーよ
お前の常識の上で動いてないのに改変したコード貼ってんじゃねーぞ糞が

700 :デフォルトの名無しさん:2009/09/30(水) 18:14:53
>>699
はいはいすいませんすいません

701 :デフォルトの名無しさん:2009/09/30(水) 18:19:26
>>692
>試しに p_databox[15].name p_databox[15].age などと書いてみても

使い方はこれであってる。問題は別のところだろう。
要素に何も代入せずに、

name = p_databox[15].name;

などと試したのではないか?

702 :デフォルトの名無しさん:2009/09/30(水) 18:35:28
>>701
void*のポインタからmemcpy()で構造体の要素サイズ分(sizeof)をコピーしているのですが
多分そこが正しく動いていないのですね。
確認すべき場所がよりハッキリしました。
ありがとうございました。

703 :デフォルトの名無しさん:2009/09/30(水) 22:28:58
>>702
なんでそこを貼らないの?

704 :デフォルトの名無しさん:2009/10/01(木) 02:07:31
VC++2005,SDKでダイアログベースのアプリを組んでいます.

さしあたりやりたい事:
よくある「ファイルを開く」のダイアログを使って,
任意のフォルダまでのパスを取得したい.

本当にやりたい事:
事前設定として,「どのフォルダ以下に保存するか」をパスで与える.
設定後,とあるファイルを取得してきて,設定したフォルダ以下に保存する.
これは事前設定にする必要があるので,ファイル取得後に
保存先を指定するダイアログを出す作りは不可.

質問:
OPENFILENAME ofn;
構造体メンバに色々と代入して
GetOpenFileName(&ofn);
を呼ぶことで,よくある「ファイルを開く」のダイアログは出せます.
しかしこの場合, フォルダ を選択した状態でこのダイアログから
抜けることはできず,必ず ファイル を選択しなくてはいけません.
任意のフォルダまでのパスを,マウス操作にて取得する方法は
ありますでしょうか?

以上です,よろしくお願いします.

705 :デフォルトの名無しさん:2009/10/01(木) 02:42:10
>>704
GetOpenFileName()じゃなくてSHBrowseForFolder()使えばいいんだと思う

706 :デフォルトの名無しさん:2009/10/01(木) 03:13:08
>>704
「本当にやりたい事:」の意味が分からん

707 :デフォルトの名無しさん:2009/10/01(木) 06:05:38
>>706
意味わからんな
でも多分>>705で解決しそうな気がするな

708 :デフォルトの名無しさん:2009/10/02(金) 09:21:40
すみません、
float z = ((a*b)*(1/c) + (d*e)*(1/f) + (g*h)*(1/i));
こういった式を組み込むと
「常に正常処理できる物」と「値が-1.#IND000になって正常処理できない物」が現れます。

どうやら0で割る(逆数?)ような形の計算になるのが悪いらしい という所まで解ったのですが
この式は最悪全ての変数が0になるので、その対策を教えて頂けませんでしょうか。
また、なぜ正常処理される/されないの差が生まれるか、推察して頂けると幸いです。

709 :デフォルトの名無しさん:2009/10/02(金) 10:36:30
0で割ったらダメなのは義務教育で習う常識だと思ったが
もしかして知らなかったらもう一回基礎からやり直してほしい。
常識知らない人間に説明するだけ無駄だから

710 :デフォルトの名無しさん:2009/10/02(金) 16:19:52
>>708
0で割ったら無限大になると言う人もいますが、C言語では
無限大など定義されてないのでエラーになります

711 :デフォルトの名無しさん:2009/10/02(金) 16:33:49
0を発見したやつが悪い

712 :デフォルトの名無しさん:2009/10/02(金) 16:38:37
実行時のエラーだからC言語関係ない

713 :デフォルトの名無しさん:2009/10/02(金) 17:41:23
>>709-712
0で割ったら駄目。習った気はするんですが・・完全に忘却してました。
確かに現実でも0で割るなんて言われてもどうすりゃ良いのか解りませんね。
INFとはInfinityって意味の警告だったのですね。

今回はif〜elseで回避しました。今後は同じ過ちをしないよう十分注意します。
為になりました。感謝。

714 :デフォルトの名無しさん:2009/10/02(金) 19:06:18
infinityじゃない、indeterminateだ。
お前はINFとINDも区別がつかんのか。

715 :デフォルトの名無しさん:2009/10/02(金) 19:14:34
>>714
INDでしたか。失礼しました。
このスレはとてもお偉い方々が多くいらっしゃって恐縮です。

716 :デフォルトの名無しさん:2009/10/02(金) 20:58:34
>>715
さすがにこの件についてはお前を全く擁護できない

717 :デフォルトの名無しさん:2009/10/03(土) 22:50:21
穏便に

718 :デフォルトの名無しさん:2009/10/03(土) 23:49:28
それぞれ別のディレクトリに保存した同一ファイル名のファイルを
プロジェクトに追加してビルドすると
未解決の外部シンボルというエラーがでます。
どうしたら同一ファイル名のファイルをビルドできますか?

719 :デフォルトの名無しさん:2009/10/03(土) 23:50:17
あ、使用しているのはvisual c++ 2008 EEです

720 :718:2009/10/04(日) 00:22:06
別のスレで質問してきます

721 :デフォルトの名無しさん:2009/10/04(日) 17:14:32
VC6・WindowsXPでDIBSectionに関する質問です。

ファイルからBMP,JPG,PNG画像を読み込みCreateDIBSectionで作成した
バッファに展開しました。このときBITMAPINFOHEADER構造体の
biXPelsPerMeter,biYPelsPerMeterに物理解像度を指定しました。

編集する際にこのパラメータを参照しようと
 HBITMAP hbm;// 読み込み時に作成したビットマップのハンドル
 DIBSECTION dib={0};
 dib.dsBmih.biSize = sizeof(BITMAPINFOHEADER);
 GetObject(hbm, sizeof(DIBSECTION), &dib);
で取得したのですが、物理解像度だけゼロが返ってきてしまい
取得できません。

ビットマップハンドルに物理解像度を持たせておく方法は
無いでしょうか。よろしくお願いします。

722 :デフォルトの名無しさん:2009/10/04(日) 17:45:12
>>721
何がしたいんだよw
最終目的を言えよ
ハンドルに解像度はもてねぇだろ

723 :デフォルトの名無しさん:2009/10/04(日) 18:10:39
まあファイル専用の情報と思うしかないかも

724 :デフォルトの名無しさん:2009/10/04(日) 18:50:17
意味がわからないけど
自分で保存したファイルを開いたら保存しておいた情報が消えていましたどうしましょうか?
ってこと?

それとも
この構造体にたしかに入れておいたはずなんだけどいつの間にか消えてるんだよね
ってこと?

前者なら
読み込むときにとってきてねぇんじゃね?
後者なら
GetObjectでとってきた構造体に値を入れても書き換えたことにはならないんじゃね?

って感じ?

725 :721:2009/10/04(日) 19:23:44
返信ありがとうございます。

>>722
現在作成しているのは画像ファイル入出力ライブラリです。
MS-Wordやイラストレータのように、画像を読み込んだらその画像のDPI値を
考慮したデフォルトサイズで表示するような挙動をアプリケーションに
とらせようと思っています。取得したDPI値をずっとメンバ変数に持っておけば
実現できますが、OSが保持してくれるのなら構造がシンプルになります。

>>723
そうかもしれません。

>>724
情報はOSが管理しているため実装は不明です。後者に近い形になると思います。
・CreateDIBSectionで解像度情報を指定した
・戻り値であるHBITMAP以外は全て破棄した
・GetObjectで情報を再取得すると、画像のピクセル数とピクセルバッファは
 取得できるのに解像度情報がゼロになっている

726 :デフォルトの名無しさん:2009/10/04(日) 20:01:21
ってことは単純にDIBSection的には「保持してねぇよそんなもんだって俺に関係ねーもん」ってことじゃね?
自分で必要な情報覚えておけばいいんじゃね?

727 :デフォルトの名無しさん:2009/10/05(月) 02:35:17
BOOLとboolは実際にWin32では
メモリ容量以外にも
どちらの方が高速だとか違いはあるんでしょうか?



728 :デフォルトの名無しさん:2009/10/05(月) 02:39:13
違いは存在しないこともないんだが、気にする必要は全くない。
嫌な言い方だけど、それをここで質問しているうちは全く問題にならない程度の違いだし、
そもそも一言でどちらがいいと説明できるようなものでもない。

729 :デフォルトの名無しさん:2009/10/05(月) 02:43:04
>>727
bool は true か false しか表現できない

BOOL は TRUE、FALSE を表現するが稀にそれ以外の値が使われる事もある
GetMessage() API がその筆頭

730 :デフォルトの名無しさん:2009/10/05(月) 03:23:01
typedef int BOOL;   // by WinDef.h
つまり BOOL は int。


731 :デフォルトの名無しさん:2009/10/05(月) 07:04:01
>>730
その一言で全て解決だな

732 :デフォルトの名無しさん:2009/10/05(月) 18:31:01
とても初歩的な質問なのですが、
操作を誤ってしまって入力画面に「→」や「・」などの表示がされるようになってしまいました。
(おそらくVBの補助的な機能かと思います)
スペースが「・」で、Tabでのスペースが「→」のように表示されます。
これを消す方法を教えていただけないでしょうか。
プログラミング自体の質問ではなくてすみません。

733 :デフォルトの名無しさん:2009/10/05(月) 18:33:06
バージョンに夜かもしれないけど、VC++2008EEだと
メニューバー→編集→詳細→スペースの表示

734 :デフォルトの名無しさん:2009/10/05(月) 18:40:46
>>733
直りました。簡単なことでしたが非常に助かりました。ありがとうございます。

735 :デフォルトの名無しさん:2009/10/05(月) 20:01:49
質問があります。
グローバル変数をデバッガのウォッチで監視したいのですが、「スコープ外です」と言われ、参照できません。

ヘッダー内にて、
 extern int hogehoge;
し、.cpp内にて
 int hogehoge = 2;
して、実行される関数内にて、
 hogehoge = 3;
としてブレークポイントをしかけています。

ウォッチでは、
 hogehoge
と指定しています。
 ::hogehoge
でも駄目でした

参照する方法はありませんでしょうか?

736 :735:2009/10/05(月) 20:08:38
>>735はC++/CLIの話です。
C++/CLIのせいだったりするんでしょうか?

737 :デフォルトの名無しさん:2009/10/05(月) 20:18:07
現象も解決策も興味ないけど、C++/CLIのせいかと思うんならC++のプロジェクトで確かめてみて、C++の場合はできます
とか言えばいいのに

738 :デフォルトの名無しさん:2009/10/05(月) 21:22:28
hogehoge = 3;
ここで止まってるなら見れる

739 :デフォルトの名無しさん:2009/10/06(火) 14:22:05
ネームスペースとか?

740 :デフォルトの名無しさん:2009/10/08(木) 01:07:10
2点質問があります。

1.ファイルパスの正当性を確認するためのAPIってないですか?

ユーザがテキストボックスに入力したパスが
正当なものであるのかどうか(特定のファイルを明確に示しているか)を
判定したいのですが、どのようなAPIを使用すれば良いのか分かりません。
ファイルパス表記の判定APIみたいなのがあったら、教えてください。

2.ファイルの存否確認を行うAPIってないですか?

ある特定のファイルが存在するか否かを判断したいです。
現在、CFileFindクラスを使用して、ファイルが見つかったら存在する
としていますが、ファイルパスにワイルドカードを入れたりすると
複数のファイルが検索されてしまったりして、十分ではありません
ファイルの存否確認をするAPIみたいなのがあったら、教えてください。

741 :デフォルトの名無しさん:2009/10/08(木) 01:11:14
プログラムの質問じゃないのですが
VC++2005を使用中どこかショートカットキーを押してしまったようで
エディタの左側から空白に→や・マークが急に現れて困っています。

戻し方がさっぱりわかりません。わかる方がいたら設定方法を教えてください。


742 :デフォルトの名無しさん:2009/10/08(木) 01:14:51
死ねカス

743 :デフォルトの名無しさん:2009/10/08(木) 02:17:19
>>740

1. ファイル命名規約のことを言っているのか?
  \ / : * ? " < > | が入ってるか否かを判断したいのか?

2. GetFileAttributesEx() を使う。
  戻り値が FALSE なら、そのファイルは存在しない。



744 :デフォルトの名無しさん:2009/10/08(木) 02:37:50
>>743
ありがとうございます。

1の質問についてですが、命名規約のチェックも問題解決の1つになります。

実は、今回この質問をさせていただいた背景には、以下の問題があります。

CFileDialogに初期ファイル名(ファイルパス)を渡せますが、
このときに変なパスを指定するとDoModalを行っても
ダイアログが開かないという現象が起きています。
(自分の環境だけなのかどうかは不明ですが。)

この問題を解決するため、
ユーザがテキストボックスに入力したファイルパスを、
事前にファイルの命名規則等チェックして、存在も確認して、
オールOKだったらCFileDialogのコンストラクタにファイルパスを指定し、
NGだったら空文字列(またはNULL)を指定しようとしています。

最終的に作成したい機能は単純で、ユーザがテキストボックスでもファイル選択ダイアログでも
どちらでもファイルパスを入力できるようにするだけです。
単純な機能なのですが、色々といじっているうちに厄介な問題に遭遇してしまったのです。

745 :デフォルトの名無しさん:2009/10/08(木) 10:39:27
質問があります。
ハードウェアを介して情報を読み込むアプリケーションを開発中で、
ハードウェアやドライバ、ライブラリーは他社より提供を受けています。
提供されているファイルはドライバ(xxx.inf、xxx.sys)とライブラリ(hoge.dll、hoge.lib、hoge.h)及び、
ライブラリを用いたサンプルアプリケーション(VC2005のソース)です。
アプリケーション本体は Visual Basic 2008、Visual C++2008でラッパーを作成しようとしています。

hoge.hの中で
#include "..\common\ioctl.h"
の1行があるのですが、ioctl.hというファイルは提供されていません。

サンプルアプリケーションを参照したところ、プリコンパイル済ヘッダーファイルを用いており
ioctl.hどころか hoge.hもソリューションには含まれていませんでした。

(質問)
(1) これは hoge.dllや hoge.libに含まれていて、VC2008のプロジェクトの設定等を編集すれば
参照できたりするものでしょうか?
(2) また、プリコンパイル済ヘッダーファイルから ioctl.hファイルを取り出す手段はありますか?
(3) それとも、単純に提供ファイル不足という認識でよいのでしょうか?

お分かりになる方が居ましたら、教えてください。

(余談)
提供元が「都度の質問は受け付けない」「どうしても必要なら打合せの場を設ける」という態度なので、
なかなか確認ができない状況です。

746 :デフォルトの名無しさん:2009/10/08(木) 11:54:45
なんだその偉そうな提供元は


747 :745:2009/10/08(木) 12:03:30
そうなんですよ…
だから単純に提供ファイル不足と断定できれば堂々とクレームつけてて赤っ恥かかせてやろうかと。
逆に知識不足で打合せの場を設けてしまうと、こちらが恥をかくことになってしまうので調査中です。
ただ、いくら調べても「ヘッダーファイルがlibやdllに含まれて無い」という決定的根拠が見つからず…

748 :デフォルトの名無しさん:2009/10/08(木) 12:19:38
ここ初心者スレだし、お前の仕事の無料サポート喜んで引き受ける馬鹿がいるか?

749 :745:2009/10/08(木) 12:47:20
確かに仕事での話ではあるのですが…

VC初心者が
「libや dllの中には参照可能なヘッダーファイルは含まれていることはありますか?」
って質問をしていると解釈してもらえるとありがたいです。

細々書いたのは後出し情報が無いようにと思った次第。

750 :デフォルトの名無しさん:2009/10/08(木) 12:49:31
>>747
心配するな。
まさかとは思うが、その ioctl.h が↓だったら俺が腹をかかえて笑ってやる。
http://sourcejam.com/jp/linux-kernel-1.0/ioctl_8h-source.html

751 :デフォルトの名無しさん:2009/10/08(木) 12:59:58
>>745
普通にcommonフォルダをくれなかっただけだろ
文句言え

752 :デフォルトの名無しさん:2009/10/08(木) 13:05:22
>>745
その提供元自身も開発能力が足りないんだろうな。恐らくは、ソフトウェアは外注任せなんだろうね。
非常に興味深いのでコンサル引き受けたいくらいだ。

753 :デフォルトの名無しさん:2009/10/08(木) 17:32:32
.inlという拡張子のファイルは、インライン関数を定義したファイルということですが
ヘッダファイルにinlineを指定して関数を定義した場合とどう違うのでしょうか。

754 :デフォルトの名無しさん:2009/10/08(木) 17:37:15
何ら違いはありません。便宜上、混在していると不都合があるので分離しているのでしょう。

755 :デフォルトの名無しさん:2009/10/08(木) 17:42:31
即レスありがとうございます。
違いがないということなので、自分でインライン関数を使う場合は慣れてる.hに書くことにします。

756 :デフォルトの名無しさん:2009/10/08(木) 18:35:25
すまん
冗談だった

757 :デフォルトの名無しさん:2009/10/08(木) 21:10:22
質問です。
開発環境はVC++6.0またはVC++9.0Express Editionです。

Thumbsenseというソフトがありまして、このソフトはSynaptics製のタッチパッドに
手が触れているときにキーボードをショートカット代わりに使えるというものです。
今回作りたいものは、タッチパッドに触れる代わりに特定のキーを押す事によって
Thumbsenseを利用できるようにするソフトウェアです。

そのためにはまず、Synapticsのタッチパッドに手が触れているときに
Synapticsのドライバがシステムにどのようなメッセージを流しているかを
知らなければなりませんが、これが調べても判りません。
何方か詳しい方、調べ方だけでもご教示頂けないでしょうか?
SPY++も試してみたのですが結局良く判りませんでした…。

758 :デフォルトの名無しさん:2009/10/08(木) 21:18:49
>>757
ショーカット起動にThumbsenseとやらを経由する必要性は?
普通にショートカットランチャー作ればいいと思うが。

759 :デフォルトの名無しさん:2009/10/09(金) 03:58:00
Yahoo!プログラミング言語検索ランキング(今回2009/10/9、前回2009/10/6)

. 1(. 1) HTML      約5,030,000,000件(約5,040,000,000件)-
. 2(. 2) PHP        約2,980,000,000件(約2,970,000,000件)+
. 3(. 3) Java....     約 832,000,000件(約 835,000,000件)--
. 4(. 4) Forth.      約 322,000,000件(約 323,000,000件)-
. 5(. 5) Ruby..      約 274,000,000件(約 275,000,000件)-
. 6(. 6) perl.....      約 244,000,000件(約 245,000,000件)-
. 7(. 7) Python...     約 205,000,000件(約 204,000,000件)+
. 8(. 8) pascal...     約 170,000,000件(約 170,000,000件)0
. 9(. 9) Delphi      約 127,000,000件(約 127,000,000件)0
10(10) VisualBasic...  約 121,000,000件(約 121,000,000件)0
11(11) lisp...        約.  26,700,000件(約.  26,700,000件)0
12(12) fortran.......    約.  21,300,000件(約.  21,300,000件)0
13(13) COBOL.....   約.  17,900,000件(約.  18,500,000件)--
14(14) HSP        約.  12,300,000件(約.  12,300,000件)0
15(15) FreeBasic..   約   6,310,000件(約   6,320,000件)-
16(16) Tcl/Tk......    約   4,940,000件(約   4,940,000件)0
17(17) QBasic.....    約   4,180,000件(約   4,190,000件)-
18(18) VisualC....    約   1,340,000件(約   1,360,000件)--
19(19) DarkBASIC .  約   1,330,000件(約   1,320,000件)+
20(20) BasicStudio   約    302,000件(約    304,000件)--
21(21) N88basic......  約    217,000件(約    215,000件)++
22(22) f-basic.......    約    109,000件(約    109,000件)0
23(23) ActiveBasic   約.     90,100件(約.     89,800件)++
24(24) 99BASIC....   約.     11,300件(約.     11,500件)--

3Dprogramming 約790,000件(約794,000件)--
2Dprogramming 約. 57,600件(約. 57,400件)++
intel 約726,000,000件(約729,000,000件)--
amd 約352,000,000件(約355,000,000件)--

760 :デフォルトの名無しさん:2009/10/09(金) 04:37:56
- 間もなくVCが新種のDarkBASICに追い抜かれますが

確かにC言語の衰退は避けられない事実です。

- それはどうしてですか

趣味でC言語を体得しようとするプログラマがいないからでしょうね。

- 会社で使ってるのに趣味で使いたくない?

そうでしょうね。
そもそもC言語は生産効率向上には寄与しなかったと言う事実があります。
仕様書を噛み砕くだけの、馬耳東風な感覚では愛着が湧かないでしょう。

- 将来的にCプログラマは切り捨てられる?

すでに旧来のCプログラマは他の言語に移管してると思います。
職業的にもCでは使えない状況ですし。

- 加速するIT化に対応できないと言うことですか。

他の言語群がCを包括的に上回っています。

- BASIC言語の台頭の可能性はあると思いますか。

あるでしょうね。
言語仕様が簡素化されて生産効率が上がれば可能性はあると思います。

- かつてCはBASICより速い実行コードを生成すると自慢していましたが。

それは過去の幻想でしょうね。

761 :デフォルトの名無しさん:2009/10/09(金) 05:22:36
朝鮮人の主張に非常に嘘が多いことが問題です、
日韓併合で朝鮮は日本との併合に同意し、戦闘行為を伴わず日本領となりました。
その後、朝鮮に対して莫大な投資が行われ鉄道、工業、農業、教育などが飛躍的に発展しました。
100年前のソウルは道ばたに糞尿が落ちているような不潔な街でした、それは朝鮮を訪れた多くの外国人が記録を残しています。
朝鮮人の寿命は短く、病気で多数の者が死んでいました、一般市民の間には入浴の文化すら無かったのです。
日本支配36年の間に、朝鮮人の寿命は2倍に伸び、人口も2倍に増えました、これは弾圧ですか?
教育においては日本が朝鮮語の辞書を初めて作り、学校を建設し、識字率を向上させました。
日本軍への入隊募集が始まるとすごい倍率で志願者が殺到し、日本軍に入隊できた者は家族の誇りとなりました。
しかし日本が戦争に負けた途端、朝鮮人は態度を変え、日本人に対し略奪、暴行、強姦、殺害などありとあらゆる悪行を働きました。
かつて福岡には朝鮮人の暴行により妊娠した女性を堕胎する施設もありました。
そして時が流れ、1965年の日韓基本条約で日本政府と韓国政府は和解しました。戦後賠償は全て決着したのです。
その後も多くの投資が朝鮮に対してなされましたが、朝鮮人は感謝することもなく
日本の援助を自分の力で発展したかのように自慢をして、
乞食が金持ちにたかるように次々と金や技術を要求しているのです。
このように尊大で恥ずかしい行為が世界のどこにあるでしょうか?
それでも日本に対して謝罪と賠償を要求する朝鮮人の感覚が信じられないです。
日本は、朝鮮に対して、一切やましいことはなく、すべての責任は果たしました。
そして、日本は日本国民のものですから、外国人のあなたがでかい顔をする場所ではないとハッキリ言っておきます。
朝鮮人が疎まれているのは、朝鮮人自身の行為によるものです。
日本政府が提供する行政サービスを全て利用したいなら帰化しなさい、在日朝鮮人は帰化基準が緩いです。
日本の社会が気に入らないなら朝鮮半島に帰りなさい、あなたの国籍は朝鮮なのですから。


762 :デフォルトの名無しさん:2009/10/09(金) 06:18:58
>>759
ちょっとまてよw
cってどうやって検索かけるんだよw

日本語なら「C言語」でいけるがw

763 :デフォルトの名無しさん:2009/10/09(金) 06:19:24
職業的にもCでは使えない状況ですし。


764 :デフォルトの名無しさん:2009/10/09(金) 07:39:37
こないだとなりで社員さんが話してるのを聞いた感じでは人が集まらないっていうのを理由にして
強引に.netにリニューアルする仕事増やしたりするみたいだね
なるほどと思った
サポートしてる側だからなんとかして対応っていうんじゃなくて
いま、できないのを理由にして切っちゃうんだね

765 :757:2009/10/10(土) 02:14:20
>758
Thumbsenseはただのランチャではなく、編集も容易に多様な機能を使用できるからです。
たとえば、以下のような機能を利用可能です。作れない事はないのですが、
かなり骨が折れる上、ソフトを作ったところでThumbsenseと同じ設定を維持する事は面倒なので…

・予め設定したファイルやプログラムの一発起動
・アクティブになっているウィンドウを移動したり(つまりカーソルを所定の位置に併せて掴まなくても
 キー操作をしただけで掴んでいる状態になり移動させる事ができる)、
・ウィンドウの最大化・最小化
・アクティブとなっているウィンドウを消去する
・ページの戻る/進む


766 :デフォルトの名無しさん:2009/10/10(土) 02:48:47
>>765
ThumbsenseのHPにBBSがあるんだから、そこで訊きな。

767 :デフォルトの名無しさん:2009/10/10(土) 09:36:19
- ではDarkBASICは日本での必要性を感じないのでは?

ところがそうではない情勢なんですね。

- 具体的にはどういった情勢なんですか。

人的負荷(Human-overhead)の問題を回避できない背景があります。

- 分かりやすく解説して下さい。

ヒューマンオーバーヘッド(以下H.O.H.)の問題は、1つのプログラムを作成する場合に、1つの言語やプラットホーム
の知識だけではなく、複数に跨る言語やプラットホームの知識を必要とする場合によく発生します。

- それがDarkBASICとどう関係するんですか。

DarkBASICはH.O.H.の問題を回避できるようにAPIやハードウェアの個体差を窺いながらプログラミングをする必要が
ありません。

もちろん、すべてではありませんが(笑)

- それはどのような場合に効力を発揮するのでしょうか。

3Dプログラミングにおいて抜群の生産効率を発揮するでしょうね。

- それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう?

確かにそのとおりです、しかしH.O.H.の問題は解決できません。

- 生産効率向上には何が必要なのですか。

体系的に簡素化された言語仕様、これに尽きますね。

768 :デフォルトの名無しさん:2009/10/10(土) 19:37:47
- 生産効率向上には何が必要なのですか。

体系的に簡素化された言語仕様、これに尽きますね。

- 人的負荷(ヒューマンオーバーヘッド(以下H.O.H.))の問題の解決にあたっては、言語仕様の簡素化や、APIを経由した複雑な
  プログラミングの回避が必要になりますね。

30年前のパソコンブームの火付け役になったのがBASICですが、CPUやハードウェアの違いを乗り越えて爆発的な普及力を見せ
付けました。

BASICの学習に必要なのは、中学生程度の学力と、紙切れ1枚程度の簡単なマニュアルだけで覚えられると言う特徴があります。

- それらの背景には現行の開発システムには存在しないインタープリタ、フルスクリーンエディト、ダイレクト実行モードなど、小回
  りの利く機能がありましたね。

現在の開発システムの周辺環境は大規模アプリケーション作成向けが主流であって、セルフフィードバックの効果の高いインター
プリタ、フルスクリーンエディト、ダイレクト実行モードなどの機能は置き去りにされています。

これは大学や企業の教育機関が、実際に機能している間は問題ありませんが、それらが機能しなくなると開発システムの根幹は
緩やかに崩壊していきます。

なぜなら、ユーザーである学生や研究開発要員が、セルフフィードバックの機会、つまりは自習の機会を失ってしまうからです。

- DarkBASICにはダイレクト実行モードはありませんね。

デバッグモードはありますが、ダイレクト実行モードはありません。

- セルフフィードバック(自己帰還)と、大学や企業の教育機関、どちらに信頼を置くべきですか。

どちらにも信頼を置くべきですが、生産効率だけではなく、将来への展望に備えた自己啓発が必要不可欠であると思います。

769 :デフォルトの名無しさん:2009/10/10(土) 19:44:41
死ねカス

770 :デフォルトの名無しさん:2009/10/11(日) 10:09:40
すみません。大量の数値と文字列の連結にsprintf_s()を使っているのですが
char buff[4096]
for(int i=0;i<500;i++) {
sprintf_s(buff, sizeof(buff), "%s%d", buff, data[i]);
}
上のようにすると、この処理そのものを何百回と呼び出すので負荷が高そうに思え、forを使わず

sprintf_s(buff, sizeof(buff), "%s%d%d ・・・500回分・・・ ", buff, data[0], data[1], data[2], ・・・500回分・・・ );
こう手書きしているのですが、
もっと賢いコードの書き方は無いでしょうか?

771 :デフォルトの名無しさん:2009/10/11(日) 11:08:34
500個の引数並べてるのかよ
とりあえずsprintfやめてstrcat風なもん使うか作るかしたら?
それでループすりゃいいべ。安全チェックも事前にやってしまうのがいいかも。

772 :デフォルトの名無しさん:2009/10/11(日) 11:10:21
strcatも毎回先頭からスキャンするから
文字位置カウントしてつないでは文字位置更新でループの中でやれば関数コールもいらんな。

773 :デフォルトの名無しさん:2009/10/11(日) 11:22:42
>sprintf_s(buff, sizeof(buff), "%s%d", buff, data[i]);

こういうbuffの使い方はやめたほうがいいんじゃね?


774 :デフォルトの名無しさん:2009/10/11(日) 12:48:14
- 結果としてBASICが根幹にあるんですね。
  どうしてでしょうか。

簡単で手軽、誰にでも学習の機会があることでしょうね。
CやHSPだとこうはいきません。

CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。

775 :デフォルトの名無しさん:2009/10/11(日) 13:11:50
>>771-772
今の私にはちょっとまだやり方が具体的にまでは想像が出来ませんが、
最後尾に継ぎ足す仕組みを自作すればループにしても負担が増える訳ではないという事なんですね。
ご助言ありがとうございます。

>>773
確かに余裕を持たせていたとしても、sizeofしたものを継ぎ足すのは不味そうですね。注意します。

776 :デフォルトの名無しさん:2009/10/11(日) 13:18:32
- それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう?

確かにそのとおりです、しかしH.O.H.の問題は解決できません。


777 :デフォルトの名無しさん:2009/10/12(月) 09:55:53
すみません。
大量のフラグ群を
char型のビットフラグで管理するか、変数名的にミスを起こし難いであろうboolで扱うかで悩んでいるのですが、

bool型の変数が1byte未満で確保される事なんて、ありえるでしょうか?
コンパイラはVC++2008ExpressEditionなのですが。

778 :デフォルトの名無しさん:2009/10/12(月) 10:10:18
すみません
下記の事をするにはどう書けばいいですか

int val[4];//各要素には0〜2が入る
int result;

<省略>

//↓ここをインラインアセンブラで書き換えたい
result = (((val[0]*3)+val[1])*3+val[2])*3+val[3];


779 :デフォルトの名無しさん:2009/10/12(月) 10:14:55
__asm {}

でかけるよ


780 :デフォルトの名無しさん:2009/10/12(月) 10:19:08
>>778
早くなる要素ないぞ

781 :デフォルトの名無しさん:2009/10/12(月) 12:47:21
mov,add,leaでいけるか


782 :デフォルトの名無しさん:2009/10/12(月) 13:04:11
コンパイラにまかせたほうがよくね?
展開すると

val0*27 + val1*9 + val2*3 + val3

dotがあれば一発じゃね?

783 :質問:2009/10/12(月) 17:44:52
超初心者です。いや、初心者というよりもプログラミングしてみたいな〜
ッ手思い始めた頃です^^;;;;
何を準備すればいいのか分かりません。
できれば無料の奴で!
18歳です

784 :デフォルトの名無しさん:2009/10/12(月) 17:49:15
こういうのはスルーでおながいします。

785 :デフォルトの名無しさん:2009/10/12(月) 17:49:58
年齢まで書いてネタかよ
VC++のスレで聞くならVC++用意しろよ

786 :デフォルトの名無しさん:2009/10/12(月) 17:51:33
( * )ここ

787 :デフォルトの名無しさん:2009/10/12(月) 19:37:46
>>773
STLを使って良いならstd::stringを使って
char buff[10];
std::string str;
for (int i = 0; i < 500;i++) {
sprintf_s(buff,sizeof(buff),"%d", data[i]);
str += buff;
}
という風に書けるし、
printfやsprintf_sは成功すると出力した文字数('\0'を覗く)を返すから
それを利用してbuffのポインタの位置を移動するというやり方もできるよ。

>>775
boolはVC++では1byteだし、bool b[32]は32byteだけど、
STLのvectorというサイズが変更できる配列では
bool型は特別でboolを1個1bitで管理してるとか。

788 :785:2009/10/12(月) 19:40:42
すみません。
アンカーは>>775>>777でした。

789 :788:2009/10/12(月) 19:42:53
連続投稿すみません。
名前は787でした。
何やってるんだ俺。

790 :デフォルトの名無しさん:2009/10/12(月) 19:43:25
VC++2005を使用しています。

マルチスレッドデバッグ(/MTd)のモードでコンパイルすると、プログラム実行時に
MSVCR80D.DLLが見つからないと言われ実行することができません。
VC++の入っていないマシン上でこの問題が起きるのであれば分かるのですが
コンパイルを行ったマシン上でも実行することができません。
Releaseモードでコンパイルした場合は正常に動作します。

色々設定をいじってしまったプロジェクトなので原因が分かりませんでした。
原因として何が考えられるでしょうか。

よろしくお願いします。

791 :デフォルトの名無しさん:2009/10/12(月) 21:27:49
だからMSVCR80D.DLLが見つからないんだろ
自分でMSVCR80D.DLL探して見たのか?
ReleaseモードはMSVCR80D.DLLを使わないから関係ないぞ

792 :デフォルトの名無しさん:2009/10/12(月) 21:37:05
MSVCR80D.DLLがない

793 :デフォルトの名無しさん:2009/10/12(月) 21:53:30
>>787
vector・・可変長配列とかなんとかの呼び名を聞いた覚えがありますが、可能性が有るんですね。
確認できる方法を探ってみようかと思います。ありがとうございます。

794 :デフォルトの名無しさん:2009/10/12(月) 21:54:04
MSVCR80D.DLLがないならネットから落とせばいい。

795 :デフォルトの名無しさん:2009/10/12(月) 22:25:11
/MTd でコンパイルしているのに「MSVCR80D.DLLが見つからない」 と言われるほうが問題。

796 :デフォルトの名無しさん:2009/10/12(月) 23:13:27
いや、ファイルはあるはず何だけど、なぜか見つかってくれないんだろ。俺も遭遇したことある。
CRTを要求するマニフェストの記述がうまくいっていないみたいで、
標準C関係のヘッダを余計にインクルードしたり、プロジェクトのプロパティの
デバッグ時の環境変数にPATH追加するとかで動くようになった気がする。

797 :デフォルトの名無しさん:2009/10/12(月) 23:18:01
だから見つからないと最初から言ってるのに意味わかってるのか?

798 :デフォルトの名無しさん:2009/10/12(月) 23:44:49
::を書いた後に出てくる入力支援候補一覧ってありますよね
あれのソート順を変更したいんですが設定できるでしょうか?
使ってるのはVC++2008EEです

799 :デフォルトの名無しさん:2009/10/12(月) 23:58:21
>>798
そういう設定は見あたらないな。使用頻度の高い項目だけを表示するというオプションはあるが。

800 :デフォルトの名無しさん:2009/10/13(火) 09:04:51
まさか :: 直後で大量に候補が並んでる状態で選ぼうとしてるとか

801 :デフォルトの名無しさん:2009/10/13(火) 11:34:59
過去のバージョンのVisualStudioがダウンロードできるところ知りませんか?
買ってきた参考書についてるソースが2005と2003用しかなくて困ってます。

802 :デフォルトの名無しさん:2009/10/13(火) 11:38:02
2005のはほとんどそのまま2008に持っていけるぞ?

803 :デフォルトの名無しさん:2009/10/13(火) 11:47:12
>>802
なんで質問するんですか?

804 :デフォルトの名無しさん:2009/10/13(火) 11:48:18
>>802
以前他のプログラムで2005→2008をやりましたが、
2008用に微妙にソースフォルダ内が変更されたので、参考書通りに学ぶには適さないかなと思いました。

805 :デフォルトの名無しさん:2009/10/13(火) 11:49:31
その程度のことで参考書が役に立たないと思うくらい応用が利かないなら、プログラミングは諦めた方がいいと思います。

806 :デフォルトの名無しさん:2009/10/13(火) 12:03:55
>>805
その程度といわれても、2005→2008で具体的に何がどう変わるのか私は理解していませんし
C++ではありませんが、些細なプログラムのバージョン違いで苦労した経験があるので
参考書に記してあるバージョンに合わせるのがベターかなと考えました。

>>802さんからほとんどそのまま持っていけるとの回答をいただいたので
とりあえず2008で取りこんでみます。

807 :デフォルトの名無しさん:2009/10/13(火) 12:22:40
エディタのカラーを黒系背景白系文字にしたいんだが設定項目が多くてめんどい
誰かが作った色設定ファイルで一発チェンジとか出来ないんだろうか
ググッても設定ダウンロードサイトみたいのがでてこないってことはそういうのはないのかな?

808 :デフォルトの名無しさん:2009/10/13(火) 13:44:50
設定のインポートとエクスポートで選択項目だけ出し入れできる

809 :デフォルトの名無しさん:2009/10/13(火) 16:55:43
いい感じのカラー設定ファイルとか落ちてないかな

810 :デフォルトの名無しさん:2009/10/14(水) 18:57:58
>>806
そういう問題を解決してプログラミングを覚えて行くんだよ

811 :デフォルトの名無しさん:2009/10/14(水) 23:22:03
>>810
俺もそう思う。
でも、しょっぱなそんなところでつまづきたくないという気持ちもわかるw

812 :デフォルトの名無しさん:2009/10/15(木) 08:55:56
しかし、VC6用の教科書を使って2008を学ぶのは苦行クラス^^;;;
あまりにも違いすぎてびっくりする。っていうか、2008の方がコマンド減ってるんだよね。

813 :デフォルトの名無しさん:2009/10/15(木) 17:54:23
すみません
他のcppファイルの、クラス外側(#include等の真下。ヘッダ同等の領域?)で宣言〜内部クラスで実体化したデータ用構造体を
別のcppファイルからそのままの名前(タイピングの手間だけの都合)で利用できるようにするには
・extern ・クラスのメンバ ・名前空間
のどれを使うのが定番なのでしょうか?

今はexternしか使えていないので、後ろ2つのどちらの使い方を勉強し直した方が早いのか
を教えて下さると幸いです。

814 :デフォルトの名無しさん:2009/10/15(木) 18:22:27
ちょっとわかんない
今のコードと書きたいコード書いてくんない?

815 :デフォルトの名無しさん:2009/10/15(木) 18:25:30
>>813
全部クラスにするべき

816 :デフォルトの名無しさん:2009/10/15(木) 18:48:58
>>813
クラスの static なメンバ変数にするという手もある。これなら、クラスのヘッダさえインクルードすれば、どこからでもアクセスできる。
むろん、どこかに実体は必要だが。

class hoge
{
public:
  static int nHoge;
}

#define g_Hoge   hoge::nHoge;

817 :デフォルトの名無しさん:2009/10/15(木) 19:04:50
template <class T> struct hoge
{
static T value;
};

template <class T> T hoge<T>::value = T();

これってどういう挙動をするの?
翻訳単位ごとにひとつ?

818 :デフォルトの名無しさん:2009/10/15(木) 19:10:41
hogeのクラス定義がヘッダファイルにあるとして
その宣言って有効なの? valueの宣言時にTの定義が見えてないと、実質コンパイルできないと思うんだけど

819 :デフォルトの名無しさん:2009/10/15(木) 19:26:20
C/C++ スレに逝きな。

820 :デフォルトの名無しさん:2009/10/15(木) 20:25:44
>>817
template<class T> struct C {
static T size;
C () { size++; }
};
template <class T> T C<T>::size = 0;

みたいなクラスを宣言して
C<int> と C<ungned> をいくつか作って
sizeを覗いてみると分かるかもしれない。

821 :デフォルトの名無しさん:2009/10/15(木) 20:38:42
>>814-816
defineという手もありましたね。ありがとうございます。
クラスでやってみます。

822 :デフォルトの名無しさん:2009/10/16(金) 00:41:57
インラインアセンブラの部分は、コンパイル時に最適化されて命令がスキップされるとかありますか?

823 :デフォルトの名無しさん:2009/10/16(金) 01:28:59
発生しうるかどうかは判らないが、少なくとも俺は体験したことはない。
あとインラインアセンブラはx64コンパイラでは使えなくなってるから、できるなら使わない方がいいよ。

824 :デフォルトの名無しさん:2009/10/16(金) 01:31:30
淫乱とかエロいな

825 :デフォルトの名無しさん:2009/10/16(金) 05:39:40
>>822
確かインラインアセンブラの部分も最適化の対象となるとなるんだよな。

826 :デフォルトの名無しさん:2009/10/16(金) 09:55:58
>>825
日本語でOK。

>>822
私の経験では、インラインアセンブラに渡すパラメータが最適化の影響でメモリになったりレジスタになったりした。

827 :デフォルトの名無しさん:2009/10/16(金) 19:07:09
>>826
GCCの話だったわ。
悪りぃ。
GNUコンパイラコレクション - Wikipedia
http://ja.wikipedia.org/wiki/GNU%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
> 言語機能の拡張のほかに、標準外機能としてasm文によるインラインアセンブラの機能はユニークである。
> ただし、GCCにおいてはこのインラインアセンブラ機能を利用して記述したコードに対しても最適化が行われる
> (プログラマが意図してアセンブリ言語を用いて書いたとしても、その通りのコードが出力されない可能性がある)
> 点に注意が必要である。


828 :デフォルトの名無しさん:2009/10/16(金) 19:12:17
すみません
c/c++には関数内で処理を特定の行に飛ばすjump機能は存在しないのでしょうか?
webプログラミング言語にはそこそこ有る気がするのですが・・。
スコープの問題などが有るからそもそも存在しなかったりするのでしょうか?

何か擬似的に再現する方法が有ればご助言頂けると幸いです。

829 :デフォルトの名無しさん:2009/10/16(金) 19:13:08
>>828
goto文があるじゃん。
そのレベルならC言語スレいけよ。


830 :デフォルトの名無しさん:2009/10/16(金) 20:02:20
>>829
あー・・エラー処理に使ってるgotoってソレだったんですね。
失礼しました; ありがとうございました;

831 :829:2009/10/16(金) 20:45:56
>>830
もう居ないかもしれないけど一応。
oto文 - Wikipedia
http://ja.wikipedia.org/wiki/Goto%E6%96%87


832 :デフォルトの名無しさん:2009/10/16(金) 21:26:29
(oto)

833 :デフォルトの名無しさん:2009/10/16(金) 21:40:13
>>831
>goto文はむやみに使ってはいけないと言う暗黙の約束
それであまり見かけないんですね。
乱用はしないよう注意します。ご忠告感謝。

834 :デフォルトの名無しさん:2009/10/16(金) 22:46:46
>>833
さらにいうなら、
gotoを使わなければ記述できないことはC/C++ではない。
gotoを使った方が綺麗ということはあるかもしれないが
「めっっっったに無い」。
if
while
do-while
for
switch
のどれかで書いた方が綺麗になる。


835 :デフォルトの名無しさん:2009/10/16(金) 23:19:20
>>834
どもです(´・ω・`)

836 :デフォルトの名無しさん:2009/10/17(土) 01:58:57
>>834
いや、むしろgoto使わないと嫌な目にあう場面がばっちり1場面だけある

if(!initXXX1()){
 fclose(fp1);
 fclose(fp2);
 return FALSE;
}

if(!initXXX2()){
 fclose(fp1);
 fclose(fp2);
 delete XXX1;
 return FALSE;
}
 ・
 ・
 ・
こんな・・・

837 :デフォルトの名無しさん:2009/10/17(土) 03:34:21
クラスで機能をひとまとめにして
ローカル変数で宣言して
デストラクタに処理させればOK

838 :デフォルトの名無しさん:2009/10/17(土) 03:38:14
Cじゃないの?

839 :デフォルトの名無しさん:2009/10/17(土) 04:08:41
まあ、C++でもいいけど使ったらわかりやすくなる場面なら使ってもいいんじゃない?
無理やり回避する必要もないと思う
ただ、やっぱり長いのがダメであって短ければgoto使っても使わなくても問題なく読めるしね

840 :デフォルトの名無しさん:2009/10/17(土) 09:03:39
スレ違いな質問は適当なスレヘgotoしてくれると助かる。
正直目障りでうっとおしい。

841 :デフォルトの名無しさん:2009/10/17(土) 09:29:20
>>840
じゃああぼんしろよwwwwww

842 :デフォルトの名無しさん:2009/10/17(土) 15:56:32
Visual Studio .NET 2003です。
外部デバイスからのCTSとDSRをGetCommModemStatusで確認しようとしているんですが、
確認のメッセージボックスが作動しません。
コールバックで呼び出しているので「GetCommModemStatus成功」のメッセージボックスは
定期的にポップアップするんですが、それ以外のメッセージボックスはウンともスンとも…。
どなたか下記コード見てアドバイスいただけますか?


hdCom = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hdCom == INVALID_HANDLE_VALUE )
AfxMessageBox("createFileしっぱい");//開かない
■再帰部分----------------------------------------------------------
DWORD state;
BOOL fSuccess = GetCommModemStatus(hdCom, &state);//hdComは上で作ったやつ
if( !fSuccess ){
AfxMessageBox("GetCommModemStatusしっぱい"); //開かない
} else {
AfxMessageBox("GetCommModemStatus成功"); //定期的にオープン
if(state & MS_CTS_ON)
AfxMessageBox("MS_CTS_ON"); //開かない
if(state & MS_DSR_ON)
AfxMessageBox("MS_DSR_ON"); //開かない
}
}

843 :デフォルトの名無しさん:2009/10/17(土) 16:04:51
LEDチカチカするシリアルチェッカーで見た方がいいよ。
CTSとかDTRとか変化しない方が多いから

844 :デフォルトの名無しさん:2009/10/17(土) 17:35:27
>>843
シリアルチェッカーってのがよくわからなかったので
検索してシリアルチェッカーソフトウェアを起動してみたら
COM2じゃなくてCOM1を利用してたみたいです、
気づけて本当によかったです、ありがとうございます!

845 ::2009/10/17(土) 23:27:29
C++5.5教えてくれる人
huuin2@yahoo.co.jpまでメールしてください
お礼はしますので
お礼いらないって人もメールしてください


846 :デフォルトの名無しさん:2009/10/17(土) 23:31:19
お礼:鬼怒川まんじゅう10個入り

847 :デフォルトの名無しさん:2009/10/17(土) 23:39:03
>>845
経験者募集なのに、
未経験者歓迎ってどういうことですか!><

848 :デフォルトの名無しさん:2009/10/18(日) 00:38:08
パートの募集要項みたいだなw

849 :デフォルトの名無しさん:2009/10/18(日) 00:53:17
VC2005SP1をXP64bitで使ってるんですが、
double a = 24455115.0;
double b = 0.234;
double c = b + a;
でcが24455115.2500になってしまう現象で困っています。
debugモードでは正しい値になるのですが、Releaseだと上記のような結果になります。
ちなみにbが
0.123では24455115.000に
0.450では24455115.500になってしまいます。
どうも小数部が0.25の倍数になってしまう様なのです。

この部分だけ抜き出したテストプログラムではReleaseでも期待する値が返ってきたので、
コンパイルオプションを見比べてみても違いが無いようです。
こんな事は初めてなのですが、原因としてどのような事が考えられるか教えて頂けないでしょうか?
よろしくお願いします。

850 :デフォルトの名無しさん:2009/10/18(日) 01:01:23
その値というのはどのように確認した?

851 :デフォルトの名無しさん:2009/10/18(日) 01:10:08
デバッガの出力ととログファイルへの書き出しで確認しました。

852 :デフォルトの名無しさん:2009/10/18(日) 01:14:05
>>849
double a = 24455115.0;
double b = 0.234;
double c = b + a;
CString s;
s.Format(L"%lf", c);

vs2008で↑で確認したら、debugでもreleseでも、同じ結果だった。
24455115.234

853 :デフォルトの名無しさん:2009/10/18(日) 01:17:54
>>852
もちろん2005でも普通は正しい値になるんですが、

今作っている物だけ不思議な事になってます。
こう言った事が起こりうる原因が全く分からないのですが、何か考えられる事が無いでしょうか?


854 :デフォルトの名無しさん:2009/10/18(日) 01:28:54
>>853
debugとreleaseとで、アセンブラのコードが違ってるか確認してみたら?


855 :デフォルトの名無しさん:2009/10/18(日) 07:04:28
>>854
アセンブラ確認してコードが同じだったので再度実行したら、Debugも同じ状況に
なってました。
で、もう一度調べていくと使用しているライブラリの中で単精度に強制的に
変更されてました・・・。
倍精度を使用するように変更する事で期待する値になりました。
お騒がせしてすいませんでした。お答え下さった方ありがとう御座いました。

856 :デフォルトの名無しさん:2009/10/18(日) 13:45:22
すいません。以下ヒントだけでも良いので教えていただけないでしょうか?

・やりたいこと
VisualStudio 6 世代に作られたあるアプリケーションAから呼び出される、
ユーザー拡張用のDLLを作りたい。

・開発ツール
 VS2008C++ Express

自分はC→VB→C#しか経験が無いので、見よう見まねでWin32Dllを作成してみたのですが
アプリAからの呼び出しがうまくいかなく、手詰まり状態に落ちいてしまっています。

すいませんC++素人なんで、何から確認するべきかもわかっていません。
どなたかアドバイスを頂けないでしょうか?

ちなみにやりたいのは以下のサンプル実行です。
http://www.necel.com/nesdis/image/U16907JJ1V0UM00.pdf



857 :デフォルトの名無しさん:2009/10/18(日) 14:31:39
>アプリAからの呼び出しがうまくいかなく

extern "C" していないとか。

858 :デフォルトの名無しさん:2009/10/18(日) 16:11:29
>>856
拡張子 .c でやってる?
.cppなら>>857 のようにCリンケージの宣言しとかないと

859 :856:2009/10/18(日) 17:05:41
>>857,858さん
レス有難うございます。
extern "C" {
}宣言ですよね。 

C言語のexern宣言とごっちゃになりましたが、見ようみまねで、
意味も解らず、ビルドを通すためやっていました。
C言語として呼ばれる場合は、やはりextern "C"宣言が必要なんですね。
__stdcall/__cdeclの違いも良くわかりませんが、どっちが一般的/妥当なのかも
解らないので、両方で試してみて玉砕しているところです

参考になるかわかりませんが、以下dumpbin /exportsの結果です。
File Type: DLL
Section contains the following exports for test2.dll
00000000 characteristics
4ADACAC4 time date stamp Sun Oct 18 16:59:00 2009
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
2 0 00001000 DllMain = _DllMain@12
1 1 00001040 MakeUserModel = _MakeUserModel
Summary
1000 .data
2000 .rdata
1000 .reloc
1000 .rsrc
3000 .text


860 :デフォルトの名無しさん:2009/10/18(日) 17:12:56
MakeUserModel、、いいんじゃないの?

>__stdcall/__cdeclの違いも良くわかりませんが、どっちが一般的/妥当なのかも
いやいやいや、呼んでる側に依存するだろう。

呼んでる側はバイナリのみで変更できない状況で、現在動作してるDLLと差し替え?
動作確認はどうやってて、ダメなのはどうやって知ったの?

861 :デフォルトの名無しさん:2009/10/18(日) 17:19:07
>__stdcall/__cdeclの違いも良くわかりません

EXPORT する関数は関数の頭に WINAPI ( = CALLBACK)をつける。
つまり __stdcall にする。

862 :856:2009/10/18(日) 17:36:02
>>860さま
レス有難うございます。

Aに付属するcfgファイルを編集して、
ユーザー作成のDLLのファイルパスを指定しdllを読み込ませてます。

A起動時時に、MakeUserModelを呼ぶはずんですが、
以下のエラーメッセージが出てきてしまっています。

「E10181: ユーザ・モデル・ファイルをオープンできません。
1) 指定したユーザ・モデル・ファイルをオープンすることがでないか,MakeUserModel関数が存在しません。
ファイルの存在,およびファイルの属性とMakeUserModel関数の存在を確認してください。」


863 :856:2009/10/18(日) 17:42:11
>>860,861さま

VS2008c++の場合、デフォルトでは__cdeclのようだったので、そのままやってみて、
もしやと思い、861さまのおっしゃるように __stdcallに変えてやってみても駄目でした。
(よくわかっていないので、トンでもないことをやらかしているのかも知れませんが)

___stdcall/__cdeclに関してはマニアルに特に記述はなかったのですが、
あるとすれば、以下の項?ぐらいかと思います。

--------------------------------------------
1.2 インタフェースの方式
 SM plus ユーザ・オープン・インタフェースでは,次に示すインタフェース方式を取っています。
1.2.1 C 言語インタフェース
 SM plus ユーザ・オープン・インタフェースは,C 言語のAPI 関数注1 セットで構成されています。
 このため,ユーザ・モデルのプログラミングはC 言語で行い,ターゲット・システムのシミュレーション環境
 を構築してください。
注1 Application Program Interface 関数の略

http://www.necel.com/nesdis/image/U16907JJ1V0UM00.pdf
P.15より



864 :856:2009/10/18(日) 18:17:22
質問に答えていただいているのに無礼な対応ばかりですいません。

一度整理しておきたいのですが、以下認識でよろしいのでしょうか?

a) Win32DLLにてExportする関数は__stdcall をつけるのが一般的
b) 公開関数がC言語から呼ばれることを想定している場合、
  Cリンケージの宣言にて全体をくくるか 拡張子cにてビルドをする必要がある


865 :デフォルトの名無しさん:2009/10/18(日) 18:46:02
#ifdef __cplusplus
extern "C" {
#endif
#include "suo.h"
#ifdef __cplusplus
}
#endif

866 :デフォルトの名無しさん:2009/10/19(月) 10:13:16
>>864
だから呼び出し規約は片方がリコンパイル不可能ならそっちに合わせるしかないって。
試しにMakeUserModelを呼ぶプログラム作ってもとからあるDLL呼んでみれば

867 :デフォルトの名無しさん:2009/10/19(月) 10:14:29
あと、Dependency Walker は使ってる?
それで既存のDLL、EXEや自分で作ったDLL、EXEを調べてみて

868 :デフォルトの名無しさん:2009/10/19(月) 16:09:10
すみません
Windowsプログラムで画面右上の「×」で閉じると
Alt+F4や特定キーから呼び出すPostQuitMessage(0)を呼び出して終わった時と違ってアクセス違反が出てしまうのですが
画面右上の「×」って何が違うんでしょうか?

またこの「×」の隠し方や、挙動の記述(変更)方法が有ればヒント(関数名など)を教えて頂けると嬉しいです。

869 :デフォルトの名無しさん:2009/10/19(月) 16:30:17
>>868
変わらないと思うけど。
デバッガ使うかspy++で調べるとか。
通常消し方は、SYSMENU取得してSC_CLOSE消せば消える
At+F4も効かなくなるけど。

870 :デフォルトの名無しさん:2009/10/19(月) 17:21:23
そんなことでアクセス違反が起きるわけがない。
バグじゃなかったらウイルスか何かにやられたと思った方がいい。

871 :デフォルトの名無しさん:2009/10/19(月) 17:36:04
・・・Alt+F4も「×」も WM_CLOSE メッセージを送っているだけなんだが。

>Alt+F4や特定キーから呼び出すPostQuitMessage(0)を呼び出して終わった時

まさか、いきなりPostQuitMessage(0)しているけじゃあるまいなw

872 :デフォルトの名無しさん:2009/10/19(月) 17:39:04
//タスクリストを指定しないnewとdeleteが呼ばれたときに
//コンパイルエラーでぶちころすための関数
*void operator new(size_t t){}

ん?size_tってなんだ?
定義へ移動・・・と。

「シンボル'size_t'は宣言されていません」

うそん。
調べてみたら、<cstddef>ヘッダで宣言されてるものらしいじゃないですか。
なんで定義へ移動できないの?

こんな事が多々あるんですが、なんで定義へ移動できないんでしょうか?

873 :デフォルトの名無しさん:2009/10/19(月) 17:51:12
#include <new>

874 :デフォルトの名無しさん:2009/10/19(月) 18:22:51
>>871
あーなんかそんな気がしないでもないな。
WM_SYSCOMMAND → WM_CLOSE → WM_DESTROY → PostQuitMessage(0)
この順番になるのだけど、WM_CLOSEの時点でDestroyWindow呼ばないでいきなり
PostQuitで抜けたら、クローズボタンだと押したのを戻す描画をしようとしてアクセス違反が出るんじゃないかな

875 :デフォルトの名無しさん:2009/10/19(月) 18:34:37
戻してからメッセージが発生するからそれはないか、マウスカーソルが乗ってるときのハイライト表示とかその辺か

876 :デフォルトの名無しさん:2009/10/19(月) 18:41:59
試してみたけど、WM_CLOSE → PostQuitMessage( 0) してもアクセス違反は出ない。

おおかた、他人の家に土足であがりこんで (=無効になったポインタにアクセスしようとして) 叱られているのだろう。

877 :デフォルトの名無しさん:2009/10/19(月) 19:18:32
>>869-871 >>873-876
>バグじゃなかったらウイルスか何かにやられたと思った方がいい。
IE使ってるとブルーバックしたり、ネットがやけに重くなったりするし、ありそうです;

>WM_SYSCOMMAND → WM_CLOSE → WM_DESTROY → PostQuitMessage(0)
そういう順序なんですね。ここらへん、勉強しないとマズそうです。

>無効になったポインタにアクセスしようとして  叱られているのだろう。
追記している内にこの症状が出なくなりましたが、
なんか不安なので、上の勉強と共にいずれOSアンインスコもしてみようと思います。

ありがとうございました。

878 :デフォルトの名無しさん:2009/10/19(月) 21:17:30
ただ今Visual C++ 2008を使い、床井浩平先生のテクスチャマッピングという本に付属のプログラムを動かそうとしています。
ですが、未解決の外部シンボル〜 エラーがいくつか出たためプロトタイプ宣言をしたところ
error C2556: 'double *trackballRotation(void)' : オーバーロード関数は、'double trackballRotation(void)' と戻り値の型のみが異なります。
とメッセージがでてしまいます。

double trackballRotation(void);とプロトタイプ宣言をしているため出たエラーだと思い、
double +trackballRotation(void);や
double* trackballRotation(void);などと書き換えてみたのですが同様のメッセージが表示されて動きませんでした。
どのように直せばよいのか見当もつきません。

879 :デフォルトの名無しさん:2009/10/19(月) 21:38:36
未解決の外部シンボルだから宣言してあるやつの実体が見つからないんだろ


880 :デフォルトの名無しさん:2009/10/19(月) 22:37:43
そのサンプルにはmain.cppとtrackball.cppがあり、trackball.cpp内の関数が見つからなかったようでした。
ありがとうございます。

そのまま開くだけでは動かなかったため、自分で新しくプロジェクトをつくったことが原因でした。
main.cppをそのままvisual c++で開いて、F5キーですぐ動かせればよいのですが、そのような方法は知りません。

881 :デフォルトの名無しさん:2009/10/19(月) 23:15:05
>そのような方法は知りません。

そりゃまあ、C/C++ はコマンドラインインタプリタじゃないんだから・・・。

882 :デフォルトの名無しさん:2009/10/20(火) 00:16:24
C++インタプリタもどこかにあったような


883 :デフォルトの名無しさん:2009/10/20(火) 02:51:31
すみません。質問です
インクルードガードがうまくいきません

具体的には

/*main.cpp*/
#include <stdio.h>
#include "header.h"

int main(void)
{
printf("x = %d\n", x);
return 0;
}

/* func.cpp */
#include "header.h"

void func(void){ x = 5;}

/* header.h*/
#ifndef __HEADER_H__
#define __HEADER_H__

int x;

void func(void);
#endif

この状態でxについてのエラーLNK2005と1169が出てしまいます
色々とぐぐったりして試行してみましたが解決には至らなかったため、
御教授頂ければと思います

884 :デフォルトの名無しさん:2009/10/20(火) 03:30:23
>>883

/*main.cpp*/
#include <stdio.h>
#include "header.h"
int x;
int main(void)
{
printf("x = %d\n", x);
return 0;
}

/* func.cpp */
#include "header.h"
void func(void){ x = 5;}

/* header.h*/
#pragma once
extern int x;
void func(void);

885 :デフォルトの名無しさん:2009/10/20(火) 03:30:49
/* func.cpp */
#include "header.h"

int x = 0; // 初期化
void func(void){ x = 5;}

/* header.h*/
#ifndef __HEADER_H__
#define __HEADER_H__

extern int x; // extern が必要

void func(void);
#endif



886 :デフォルトの名無しさん:2009/10/20(火) 07:18:43
64bit対応のプログラムを作るには商用版を買うしかないのでしょうか?

887 :デフォルトの名無しさん:2009/10/20(火) 08:16:48
とも限らない

888 :デフォルトの名無しさん:2009/10/20(火) 10:00:59
EEとSDK組み合わせてできるけど面倒

889 :デフォルトの名無しさん:2009/10/20(火) 15:29:32
>>884-885
分かりました。どうもありがとうございます
実をいうと私は一度defineで定義したものは他のcppファイルをコンパイルする際にも
引き継がれた状態になっているという大きな勘違いをしていたため、
インクルードガードの用途さえ思い違いをしていた状態だったようです

しかし考えてもみればそれぞれのcppファイルを別個にコンパイルして
それらをリンカが繋ぐのですから当然のことですね・・・
なんでそれに気付かなかったんだろう
何はともあれ助かりました

どうでもいいですが私の書いたコード、mainでfunc使い忘れてますね・・・

890 :デフォルトの名無しさん:2009/10/20(火) 20:07:10
>>889
まあな、
#defineは翻訳単位でのみ有効
ってことを覚えておきましょう。


891 :デフォルトの名無しさん:2009/10/21(水) 11:01:47
質問です

例えば MessageBoxA と入力して、( 左かっこ を入力すると下にヒントが出ますが
MessageBox では出ないのですが仕様でしょうか?

892 :デフォルトの名無しさん:2009/10/21(水) 11:52:25
ちょっとおたずねしますが、VC6でwin7のプログラムも作れるのでしょうか?
それとも買い替えするべきでしょうか?

893 :デフォルトの名無しさん:2009/10/21(水) 11:54:32
・無理でしょう。
・いえ、先ずは2008ExpressEditionを試してみてはどうでしょう。

894 :デフォルトの名無しさん:2009/10/21(水) 12:23:57
>>891

でるよ

895 :デフォルトの名無しさん:2009/10/21(水) 12:32:36
>>894
ありがとう
今やったら出た(???

でも CreateWindowA は出るのに CreateWindow は出ない?

896 :デフォルトの名無しさん:2009/10/21(水) 13:12:40
#define しているものは出にくい というのは仕様

897 :デフォルトの名無しさん:2009/10/21(水) 13:13:01
CreateWindow は単なるマクロで、引数を取る 関数マクロ や 関数 じゃないため。

#define CreateWindow CreateWindowA
のように定義されてる。

だから CreateWindow と入力してから少し経って
引数を取る CreateWindowA と解釈されて
CreateWindowAに対応する補完のヒントが出たりするというわけ。
(もしかしたら出ないかもしれない)

MessageBox や CreateDirectory でも同じ。

898 :891:2009/10/21(水) 13:15:59
>>896-897
ありがとう!
よくわかった

899 :デフォルトの名無しさん:2009/10/21(水) 22:34:42
Win7に対応したVCを購入しようと思うのですが、どのバージョンがお勧めでしょうか?
しばらく次のVCが出るまで待った方が良いでしょうか?

900 :デフォルトの名無しさん:2009/10/21(水) 22:36:55
6に決まってる

901 :デフォルトの名無しさん:2009/10/21(水) 22:39:25
次のバージョンって来年の3月だろ?
ビミョーな時期だな。

902 :デフォルトの名無しさん:2009/10/21(水) 22:43:56
ベータ2が公開になったことだし暫くはこれ使ってればいいのでは?

903 :デフォルトの名無しさん:2009/10/21(水) 23:16:01
#include<stdio.h>

int main(void)
{
double num;
printf("小数を入力してください。\n");
scanf("%f",&num);

printf("%fが入力されました。\n",num);

return 0;
}

この簡単なC言語をVC++で実行すると入力した小数を正しく返してくれません
Vi環境では正しく返してくれたのですがVC++は使って日が浅いためなにか問題
でもありますでしょうか?ご教授よろしくお願いいたします

904 :デフォルトの名無しさん:2009/10/21(水) 23:19:20
>>903
printf,scanfでの%fの扱い
http://www.ei.fukui-nct.ac.jp/~t-saitoh/edu/ProgAppl/pa-faq-float.html

905 :デフォルトの名無しさん:2009/10/21(水) 23:43:55
%lf・・・・・・?

906 :デフォルトの名無しさん:2009/10/22(木) 02:59:40
scanf("%lf",&num);

scanf 使うな
sscanf 使えと
あれほど(ry

907 :デフォルトの名無しさん:2009/10/22(木) 09:52:36
scanf使うのは習い始めのほんの一瞬だけなんだから許してやれよw

908 :デフォルトの名無しさん:2009/10/22(木) 10:33:47
一番の問題は、printf()とscanf()の書式指定子に互換性が在るかのごとく書かれた入門書が溢れていることだな。

909 :デフォルトの名無しさん:2009/10/22(木) 11:33:24
入門書 ww

日本だけの事情?



910 :デフォルトの名無しさん:2009/10/22(木) 11:59:47
scanf_sとかsscanf_s使え


911 :デフォルトの名無しさん:2009/10/22(木) 15:56:22
C++なら std::cin だろう

912 :デフォルトの名無しさん:2009/10/22(木) 23:01:19
scanfってそろそろあぼんに登録すべきかな。

913 :デフォルトの名無しさん:2009/10/22(木) 23:24:54
コンソール用のプログラムなんて書いたことないから、printf()もscanf()も使ったことがないw

914 :デフォルトの名無しさん:2009/10/22(木) 23:27:06
printf()は神だと思っている

915 :デフォルトの名無しさん:2009/10/23(金) 00:36:13
ビルド後、DebugまたはReleaseディレクトリに.exeが出来ません。
出来上がるのは「.exe.embed.manifest」の様なファイル達です。
どうすれば.exeが出力される様になるのでしょうか?

VC++2008ExpressEditon
プロジェクトの種類:Win32プロジェクト
アプリケーションの種類:Windowsアプリケーション


916 :デフォルトの名無しさん:2009/10/23(金) 00:46:02
プロジェクトディレクトリじゃなくて、ソリューションディレクトリのDebug or Releaseフォルダにあるんじゃね?


917 :デフォルトの名無しさん:2009/10/23(金) 00:49:49
>>915

通常は何もしなくても作成される。
出力ウィンドウにエラーメッセージが出てないか?

918 :デフォルトの名無しさん:2009/10/23(金) 01:11:35
>>917
エラーも警告もゼロです。
しかし、リビルド時に
1>LINK : 前回のインクリメンタル リンクで C:\Users\xxx\Debug\Sound2.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
というログが残っています。

>>916
指摘の通り、そこにありました。
ソリューションのディレクトリに出力されるのがデフォルトなんですか。

変更したいのですが、変更すべき項目が見当たりません。
リンカ>全般>出力ファイルにはプロジェクトディレクトリ\xxx.exe
となっているのですが。


919 :918:2009/10/23(金) 01:16:11
やや解決しました。
リンカ>全般>出力ファイルがこうなっていたので、問題ないと思っていたのですが、
$(OutDir)\$(ProjectName).exe

C:\〜フルパスを指定したらプロジェクトディレクトリ内のDebugにexeが出力されるようになりました。

出力ファイル指定のマクロの名前にOutDirが自プロジェクトパスが正しく入っているのに何故・・・

920 :デフォルトの名無しさん:2009/10/23(金) 01:18:48
>>919
リンカじゃなくて、構成プロパティ>全般>出力ファイル

921 :918:2009/10/23(金) 01:47:19
>>920
直しました。

exeはプロジェクト内のDebugに出力されるようになりましたが、
exeを実行すると一瞬画面が出てきてすぐ消えてしまいます。

プロジェクトでデバッグ実行すると、正しく動いているのですが、
exeで実行すると消えてしまいます。
何が違うのでしょうか・・・。

922 :デフォルトの名無しさん:2009/10/23(金) 01:50:08
プログラムが終了した時点で、コンソールウィンドウが自動的に閉じるから。
ちゃんとコマンドプロンプトから実行してみ。

923 :デフォルトの名無しさん:2009/10/23(金) 17:22:40
IDEのドッキングウィンドウの右上の三角印をクリックして出てくるメニューの
フローティングってとこを押したらフローティングしたまま元に戻せなく
なった(ドッキングできない)んですけど、元に戻すにはどうすればいいですか?
VCEE2008です

924 :デフォルトの名無しさん:2009/10/23(金) 17:24:42
すみません、自己解決しました
メインメニューのウィンドウってとこから操作できましたorz

925 :デフォルトの名無しさん:2009/10/24(土) 10:28:00
結構大量(種類だけが)のデータを扱っていて
クラス(大分類).構造体(中分類).構造体(小分類) の3層構造で扱っています。

利用頻度は1秒間にint型に1000回アクセスする程度の負担なのですが、
3層になっていると1層で扱うより負担が極めて大きくなるなんて事は有りますか?
3層くらいなら気にする必要は無い負担なのでしょうか?

926 :デフォルトの名無しさん:2009/10/24(土) 11:44:09
負荷は何層でも変わらないと思う

927 :デフォルトの名無しさん:2009/10/24(土) 13:54:02
>>926
変わらないんですね。ありがとうございます。

928 :デフォルトの名無しさん:2009/10/24(土) 20:01:15
>>921
プログラムの最後に
kbhit();

929 :デフォルトの名無しさん:2009/10/24(土) 21:55:40
k ケツ
b バット
hit ヒット

930 :デフォルトの名無しさん:2009/10/24(土) 23:34:16
>>928
それ押さなくても関数から戻るからな

931 :デフォルトの名無しさん:2009/10/25(日) 03:17:16
他の人が作ったクラスを見てみたら、
コンストラクタでクラスのメンバ変数とかポインタとかの最後に(0)ってつけたのを羅列してたんだけど、
(0)って何をしてるんですか?

932 :デフォルトの名無しさん:2009/10/25(日) 03:22:32
kbhit() は getch() 等で非同期処理するためのものだぞ?


933 :デフォルトの名無しさん:2009/10/25(日) 03:45:36
>>929
0(つまりNULL)で初期化だと思う。
見てみないと分からないけど。

934 :デフォルトの名無しさん:2009/10/25(日) 06:48:05
>>931
基本型もコンストラクタを持つ
sttaic_cast<T>()的な

935 :デフォルトの名無しさん:2009/10/25(日) 16:16:38
他のとこでも質問したのですが反応がないのでこちらでも質問させてもらいます
コンパイルして実行するとAssertion failedという警告が出るのですが、
この警告の意味と、警告を出なくするためにすべきことを教えてください
DXUTmisc.hの109行目、以下の部分で警告が出ています

TYPE& CGrowableArray::GetAt( int nIndex ) const
{
assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex];
}

936 :デフォルトの名無しさん:2009/10/25(日) 16:21:30
>assert( nIndex >= 0 && nIndex < m_nSize );

nIndex の値が 0 より小さいか m_nSize 以上のとき、カッコの中が FALSE となって 「Assertion failed」になる。
したがって、nIndexの値をチェックすべし。

937 :935:2009/10/25(日) 16:37:39
ありがとうございました
問題の行まで実行したとき、int nIndexの値は0でした
int m_nSizeも0だったので、nIndex<m_nSizeの方で引っかかってるみたいですね

protected:
int m_nSize; // # of elements (upperBound - 1)

こうなっているので、GetAtを呼び出す前にm_nSizeの値を増やさないといけないようです

template<typename TYPE> HRESULT CGrowableArray <TYPE>::Add( const TYPE& value )
template<typename TYPE> HRESULT CGrowableArray <TYPE>::Insert( int nIndex, const TYPE& value )

DirectXでリストボックスを作るクラスを利用しようとしていたのですが、
これらふたつの関数でm_nSizeが増加するようなので、恐らくアイテムが入ってない場合
あるいはアイテム数より多い場所にインデックスがある場合にエラーを出すということだと思います

938 :935:2009/10/25(日) 16:39:03
あ、インデックスがマイナスの場合でした

939 :デフォルトの名無しさん:2009/10/25(日) 16:41:53
>GetAtを呼び出す前にm_nSizeの値を増やさないといけないようです

そりゃそうだろ。空のサイフからは1円も出てこんよ。まずは、金をいれなきゃ。 

940 :デフォルトの名無しさん:2009/10/25(日) 17:32:05
出力したtexファイルってどこに保存されてるんですか?

941 :デフォルトの名無しさん:2009/10/25(日) 17:38:10
HDD

942 :デフォルトの名無しさん:2009/10/25(日) 18:24:05
すみません。

今までMFCでちょっとしたツールを作っていたんですが、
VC++の.NET版で作ったやつは64bitでも動きますか?

なんか、仮想マシンで動かすとか聞いたんですが・・


943 :デフォルトの名無しさん:2009/10/25(日) 18:40:07
WOW64 があるから通常は動く。

944 :デフォルトの名無しさん:2009/10/25(日) 18:45:05
VC++で作ったEXE/DLLは基本的に32ビット。
ただし、64bit版WindowsではWOW64により32ビットプログラムもそのまま動く。

64ビットのEXE/DLLを作りたければソリューション構成から設定する。
ただ、.NET 2002/2003は64ビット版コンパイラ・ライブラリなどが付属していなかったと思うけど。

仮想マシン云々は関係ない。VCで普通にMFCプロジェクトを作れば今まで通りの普通のプログラムになる。

945 :942:2009/10/25(日) 18:45:32
どうもありがとう。>>943
今度から、そっちで作ってみます。

946 :デフォルトの名無しさん:2009/10/25(日) 21:39:10
意味わかってんのかな

947 :デフォルトの名無しさん:2009/10/25(日) 23:20:14
(笑)

948 :デフォルトの名無しさん:2009/10/26(月) 10:22:21
>>942の書き方だといろいろ解釈できるから答える方も大変だな。
なんとなく、今までMFCで書いてたけど.NET、つまりC++/CLIで書くと
64bit(ネイティブ)でも動かせるのか?と聞いてるような気がする・・・

64bitネイティブなのかどうかで答え方も変わってくるけど、
まあC++/CLIで1から書くならC#でいいしなあ

949 :デフォルトの名無しさん:2009/10/26(月) 12:13:09
XP、VC2005を使っています。

MFCで CFileDialog を使用し、ファイルを選択。
GetPathName()を使い、パスを取得し、エディットボックスに表示する。
という部分を作ったのですが、
選択したファイルを開く(可視状態で。)方法がわからないので、教えていただけないでしょうか。

調べてみても、内部的にオープンするようなものばかりで、実際に開いてみるという部分のヒントが見つけられませんでしたので、
お願い致します。

950 :デフォルトの名無しさん:2009/10/26(月) 12:25:05
開くって具体的に何がしたいの?
CFileとか使うんじゃダメなのか。

951 :デフォルトの名無しさん:2009/10/26(月) 12:40:50
>>949

CFile オブジェクトを構築して、CFile::Open() でファイルを開いて、CFile::Read() でファイルの内容を読み込んで、
最後に CEdit::SetWindowText() でエディットボックスに表示する。

ファイルをロック状態にしないなら、直後に CFile::Close() すればいい。

それぞれの関数の使い方は MSDN あたりを参照すべし。

952 :949:2009/10/26(月) 14:18:39
>>950
VCを1から始めているところで、
・ボタンを押すとファイルを選択出来る。
・→選択するとパスを表示する。
上記2点の拡張として、開くためのボタンを追加し、選択したファイルを開きたい。
と思ったので、本当にただ開きたいだけです。

>>951
ありがとうございました。
'CWnd::SetWindowTextW' : 1 番目の引数を 'const char [7]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
error C2660: 'CFile::Open' : 関数に 1 個の引数を指定できません。
error C2660: 'CFile::Read' : 関数に 1 個の引数を指定できません。
みたいなエラーと戦っていますが、もう少しやってみます。

953 :デフォルトの名無しさん:2009/10/26(月) 14:27:45
>>952
だから“開く”の定義は何よ。Openするだけか。
その問題は、Unicodeのプロジェクト(デフォルト)に対して
マルチバイトのコードを書いたから。
その範囲だと、
"文字列"を_T("文字列")にするか、プロジェクトをマルチバイトにすればいい。

954 :949:2009/10/26(月) 14:37:24
>>953
わかりづらくてすみません。

"開く"は、例えば abc.txt を
マウスでダブルクリックして開かれる状態と同じ状態にしたいです。

現状は、abc.txtを選択し、 「C:\abc.txt」がエディットボックスに表示されている。
という部分を組んだ状態です。
そのエディットボックスにある 「C:\abc.txt」を開きたい
→マウスでダブルクリックして開いたのと同じようにしたい。
・・・です。


955 :デフォルトの名無しさん:2009/10/26(月) 15:17:52
それは ShellExecute() を使う。

956 :デフォルトの名無しさん:2009/10/26(月) 15:33:05
・・・おいおい。

結局のところ、

A: 自身のエディットボックスに選択したテキストファイルの内容を表示したい。
B: 選択したテキストファイルを、関連付けられたアプリケーションで開きたい。

の、どっちなんだよw

957 :949:2009/10/26(月) 15:41:06
>>955
ありがとうございました。
ShellExecute()で無事開くことができました。

目的に対して使用する命令をもっと覚えなければいけないと思っています。
まだMSDNの解説を読んでもいま一つ理解できない状態なので、
検索にひと苦労ですが、頑張ってみます。

ありがとうございました。

958 :949:2009/10/26(月) 15:48:46
>>956
上記で、ダブルクリックで・・・とやりたいことを書きましたが、
例えばデスクトップ上で abc.txt をダブルクリックして開く(普通に開く)
というニュアンスが伝えたかったです。
とすると、B・・・になるんですかね。

開く とただ単に表現してすいませんでした。


959 :デフォルトの名無しさん:2009/10/26(月) 16:59:17
そこまで初心者が今からMFCで1から始めているのが信じられない。
無料で手に入れた2005にMFCが入ってただけなんだろうけど

960 :949:2009/10/26(月) 17:07:15
>>959
開発職なのですが、業務を効率化するためにVCをでツールを作りたいというのが目的で始めました。(自己啓発的な)
C言語を使う環境にあり、会社にあるVC2005をインストールしました。(自分は業務でCを使いませんが)
会社にVCを聞ける人がいないので、2Chで聞いている次第です。(汗)

961 :デフォルトの名無しさん:2009/10/26(月) 20:29:54
世界的な名著、ペゾルドの「プログラミングWindows」の冒頭にもあるとおり、
MFCは優れたオブジェクト指向のモデルじゃないし
ドキュメントアーキテクチャに縛られるので
ライブラリ内部のコードが読めるレベルのプログラマでないと
逆に悪戦苦闘する羽目になる。
ペゾルドは社内プログラマや趣味のプログラマなら
VBかDelphiを使ったほうがいいと書いているくらいだ。

962 :デフォルトの名無しさん:2009/10/26(月) 21:29:14
> ドキュメントアーキテクチャに縛られるので

だいぶ前からドキュビューは使わなくてもいいようになってる。

963 :デフォルトの名無しさん:2009/10/26(月) 22:46:16
どきゅどきゅしてきた♥

964 :デフォルトの名無しさん:2009/10/26(月) 23:13:25
>>962
俺がぶち当たるプロジェクトは尽く使ってないな>ドキュメントビューアーキテクチャ
これ、無駄じゃね?
こういう構造にしたいアプリってなかなかないよね?

965 :デフォルトの名無しさん:2009/10/26(月) 23:15:21
上の人と同じでファイル関連の質問なんですが、
テキストファイルをバッファに読み込んだあと、
一行ずつ文字列に格納していくため、以下のように作ろうと思っています

@バッファの終点に\0を追加
Astrchr(wcschr)でバッファの始点から\n(0x0D0A)を一文字ずつ検索
Bstrcpy(wcscpy_s)でバッファの始点からAで得たポインタから\nの分戻した場所までを文字列0に格納
Cバッファへのポインタを\nのひとつ先まで移動する
DA〜Cをループ
Ea バッファへのポインタとバッファの終点のポインタが一致したらループから抜ける
Eb strchrがNULLを返したら、バッファの終点から\0を除いた場所までを文字列に格納してループから抜ける

こんな感じで作ろうと思っているのですが、もっと簡単な方法はあるでしょうか?

966 :デフォルトの名無しさん:2009/10/26(月) 23:24:58
>>964
同意。業務アプリだと、ダイアログベースで済む事が多いからな。
ドキュメントビューアーキテクチャを使うのは、開発ツールそのものを作るときぐらいだろうか?

967 :デフォルトの名無しさん:2009/10/26(月) 23:31:12
>>965
簡単ってことならfgtes()使えば簡単になると思う。
C++でいいなら、getline()を使えばもっと簡単になる。

一気に文字列に読み込んでsplit()すればと思ったけど、
std::stringにもCStringにもsplit()ないみたいね。
ググればsplit()のソースがいっぱいでてくるから、それ
見てもいいけど。

968 :デフォルトの名無しさん:2009/10/26(月) 23:36:56
>965
行単位で毎度コピーするの無駄だから
終端だけ書き替えてargvみたいな感じで扱う

969 :デフォルトの名無しさん:2009/10/26(月) 23:41:21
まぁ、MicrosoftがWTLをリリースしたり
昨今、MFCに関する書籍が出回らなくなったり
世間的にはレガシーライブラリなんて呼ばれるようになったのも
MFCの核であったドキュメントビューアーキテクチャが
一般的な用途ではあんまし役に立たなかった証左かもね。

VS2010でスタンダードエディションをなくす(MFCはProfessionalエディション以上となる)のも
ExpressやStandardエディションですんでいたような個人、SOHOクラスのプログラマには
MFCの需要がまったくなかったからかもしれん。

970 :デフォルトの名無しさん:2009/10/26(月) 23:47:50
これ使えるっけ?
http://www9.plala.or.jp/sgwr-t/lib/strtok.html

971 :デフォルトの名無しさん:2009/10/26(月) 23:50:51
2バイト文字が回避できてるのか不安だよね

972 :デフォルトの名無しさん:2009/10/26(月) 23:52:58
vector<CString>かvector<string>で返してくれる関数が用意されててもいいよね
ホント使えないよね>汎用文字列クラス
どの環境でもsplitに当たるもんは自分でこさえないといけない気がする

973 :デフォルトの名無しさん:2009/10/26(月) 23:58:35
>>971
改行コードなら平気なんじゃない?

974 :デフォルトの名無しさん:2009/10/27(火) 00:04:45
vector<wstring>で返してくれ

975 :965:2009/10/27(火) 01:46:33
いろいろどうも
strtokのかわりにwcstok_sを使うことにしたのですが、
3番目の引数にwchar_t **contextを要求されて、
これが解説を読んでもなんのことかよくわかりません
http://msdn.microsoft.com/ja-jp/library/ftsafwz3(VS.80).aspx
ためしにNULLを入れてみたら
Assertion failure
context == NULL
とか言って怒られました

976 :デフォルトの名無しさん:2009/10/27(火) 01:47:43
>>975
その時点で簡単じゃねーし
その方法はやめちゃえw

977 :デフォルトの名無しさん:2009/10/27(火) 01:58:16
>>975

そこには strtok( wcstok_s) 関数が次のトークンを探すためのポインタを放り込むから、
そのバッファを呼び出し側で用意してやる。

wchar_t* pszContext = NULL;

として受け皿を用意して、 &pszContext を関数に渡せ。

というか、>>967 の言うように fgtes() を使ってテキストファイルから1行ずつ読み込んだほうがラク。

978 :975:2009/10/27(火) 03:14:28
ありがとうございます。なんとか表示できるようになりました。

fgets()を使って書き直す場合、最大読み込み数に工夫が必要そうですね。

979 :デフォルトの名無しさん:2009/10/27(火) 10:59:06
>>978
改行文字で切り出したいだけならsscanf(fileBuffer, "%[^\n]", lineBuffer)って要領でもできるよ。

980 :デフォルトの名無しさん:2009/10/27(火) 11:29:47
cout << "test" << endl;

このテストという文字列をVisualStudioの「出力」の「デバッグ」部分に出力したいのですが、どのようにすれば良いのでしょうか?

981 :デフォルトの名無しさん:2009/10/27(火) 11:37:21
つ [TRACE()]

982 :デフォルトの名無しさん:2009/10/27(火) 12:14:53
>>981
TRACEマクロというものでしょうか?
どうも使えないみたいなのですが、これはMFCのどこかで定義されているマクロですよね?

プロジェクトを右クリック→構成プロパティ→全般→MFCの使用 標準 Windows ライブラリを使用する
これだけでは使用できないのでしょうか?

983 :デフォルトの名無しさん:2009/10/27(火) 12:18:33
classの依存関係をどう解決していいのか悩んでしまったので教えてくらはい

#include "ToolKitA.h"
#include "ToolKitB.h"

class small : public ToolKitB {
public:
  small( ToolKitA* parent );
  hogehoge();
  fugafuga();
}

class large : public ToolKitA {
public:
  large();
  void foo();
  bool bar;
}

こんな風になっている時、つまりlargeでToolKitAクラスをオーバーライドしていて、
smallはToolKitAというクラスは知っているけど、largeというクラスは知らない時、
smallクラスの関数からlargeクラスの変数barを読み出したり、foo()関数を呼び出したい。
こういう事はできる?


984 :デフォルトの名無しさん:2009/10/27(火) 12:21:59
できる。

985 :デフォルトの名無しさん:2009/10/27(火) 12:23:51
ちょ・・・w
どうやんのww

986 :デフォルトの名無しさん:2009/10/27(火) 12:35:33
smallクラスにToolKitAのポインタを渡せば宜しい。
そのToolKitAのポインタは、当然ながらlargeインスタンスから得られる。

987 :デフォルトの名無しさん:2009/10/27(火) 12:38:26
>>982
::OutputDebugString();

>>983
>largeというクラスは知らない

意地悪しないで教えてあげればいい。
前方宣言、フレンドクラス・・・。方法はいくつかある。

988 :983:2009/10/27(火) 13:13:37
>>987
できたw
ありがとう

それにしてもこんな簡単に・・・orz

989 :デフォルトの名無しさん:2009/10/27(火) 15:34:51
>>987
アク禁に巻き込まれて返答が遅くなってしまいました。
アウトプットデバッグストリングで目的の文字列が表示されました。
ありがとうございます。

990 :デフォルトの名無しさん:2009/10/27(火) 16:15:35
MFCでTRACE使えないのはなにかおかしい。と思ったら、

>>982
>プロジェクトを右クリック→構成プロパティ→全般→MFCの使用 標準 Windows ライブラリを使用する
それはMFC使ってない。

991 :デフォルトの名無しさん:2009/10/27(火) 16:46:05
windows標準ライブラリ=mfcだと思ってましたorz
windows標準のライブラリというのはwin32APIの事ですか?

992 :デフォルトの名無しさん:2009/10/27(火) 16:46:30
そう

993 :デフォルトの名無しさん:2009/10/27(火) 16:49:28
なんてこったい。
ありがとうございます。

994 :デフォルトの名無しさん:2009/10/27(火) 17:28:00
MFC使ってたらwin32APIも必ず使ってるわけだが

995 :デフォルトの名無しさん:2009/10/27(火) 17:42:34
論点が判らないなら無理に参加しなくていいよ。

996 :デフォルトの名無しさん:2009/10/27(火) 19:16:43
int i の値がどの範囲にあるかで条件分岐したいとき、
if (i < a){
    //処理
    return;
}
if (i < b){
    //処理
    return;
}
を繰り返すよりも簡単な方法はあるでしょうか?
switchだと値が一致する場合にしか使えませんよね

997 :デフォルトの名無しさん:2009/10/27(火) 19:20:31
処理を其々関数化してあるとしたら、こんなテーブルを作って舐めてもいいかも。
static struct {
int lower;
int upper;
func_t func;
} table[] = {
{0, a, func1},
{a, b, func2},
};

998 :デフォルトの名無しさん:2009/10/27(火) 19:24:54
>997
なるほど、簡略化できそうです
ありがとうございました

999 :デフォルトの名無しさん:2009/10/27(火) 20:33:56
クラスのメンバ宣言で、構造体の配列を宣言する場合、これでいいんでしょうか

private:
    struct myStruct{
     int a;
     int b;
    } param[40];

ヘッダーでこう宣言したのですが、コンストラクタでこの配列に初期値を入れようとするとうまくいきません

param[0] = {0, 0};

1000 :デフォルトの名無しさん:2009/10/27(火) 20:40:37
コンストラクタで配列を初期化することはできないっぽいから代入するしかない

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

282 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)