トップページ⇒tech
986コメント346KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/11/03(木) 00:54:48.61
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

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

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

【過去スレ】
Part37 http://hibari.2ch.net/test/read.cgi/tech/1299982561/
Part36 ttp://hibari.2ch.net/test/read.cgi/tech/1273939582/
Part35 ttp://pc12.2ch.net/test/read.cgi/tech/1256645713/
Part34 ttp://pc12.2ch.net/test/read.cgi/tech/1245382769/
Part33 ttp://pc12.2ch.net/test/read.cgi/tech/1235292263/
0002デフォルトの名無しさん2011/11/03(木) 00:57:26.21
【関連スレ】
■MFC相談室 mfc22d.dll■
http://hibari.2ch.net/test/read.cgi/tech/1316080347/
Win32API質問箱 Build97
http://hibari.2ch.net/test/read.cgi/tech/1318439361/
【C++】 DirectX初心者質問スレ Part36 【C】
http://hibari.2ch.net/test/read.cgi/tech/1319032065/
C言語なら俺に聞け(入門篇) Part 54
http://pc12.2ch.net/test/read.cgi/tech/1254829314/
C++相談室 part91
http://hibari.2ch.net/test/read.cgi/tech/1315922506/
C/C++の宿題片付けます 152代目
http://hibari.2ch.net/test/read.cgi/tech/1312201995/
0003デフォルトの名無しさん2011/11/03(木) 00:58:12.13
【関連サイト】
MSDN ライブラリ
http://msdn.microsoft.com/ja-jp/library/default.aspx

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
0004デフォルトの名無しさん2011/11/03(木) 00:58:56.91
誰かおしえてください><
Win7の64bitマシンを使っています

Visual C++2010を使用しています。
アクティブソリューションぷらっとホームには、x64を追加することが出来たのですが
その下のプロジェクトのぷらっとホームにx64が出ません。何故ですか?
http://up3.viploader.net/ippan/src/vlippan243062.jpg
0005デフォルトの名無しさん2011/11/03(木) 02:31:12.00
>>4
http://hibari.2ch.net/test/read.cgi/tech/1299982561/938

にょろん?
0006デフォルトの名無しさん2011/11/03(木) 03:33:05.20
>>1
乙です

40代のLinux鯖屋ですが未だにVC6でたまに仕事がありますw
未だに作法がわからず、とりあえず動くものを納品してます。
よろです。
0007デフォルトの名無しさん2011/11/03(木) 07:30:15.00
>>5
それわたしです
SDK入れたり色々してみたんですが
やっぱりうまく行きません
0008デフォルトの名無しさん2011/11/03(木) 17:58:21.43
ウインドウアプリケーションを作っているんですが
基本ネットにつないであるデスクトップの32ビットVistaに入れたVC++2008EEはthis->とか入れたらドロップリストみたいなのが出て自動入力できるんですが
ノーパソの64ビット7に入れたVC++2010EEでは全く出てくれません。どうしてでしょうか?
0009デフォルトの名無しさん2011/11/03(木) 18:48:11.40
>>8
「#include <」とか、
「#include "」とかって書くとどうなります?
2010からヘッダファイルもインテリセンスしてくれるので動作確認できます。
ちなみに、インテリセンスさんは頻繁に気絶されるので、動かないときは再起動してあげてください。

↑で何も変化ないなら、設定切れてるかインストール失敗したのでは?
0010デフォルトの名無しさん2011/11/03(木) 18:54:46.30
>>9
ありがとうございます
#include <と書くとヘッダファイルのドロップリストがいっぱいでてきました
でもメンバは全く出ないのです
0011デフォルトの名無しさん2011/11/03(木) 18:56:42.39
Ctrl+Jでおk
0012デフォルトの名無しさん2011/11/03(木) 19:08:29.44
Ctrl+J?何もおこりませんが
0013デフォルトの名無しさん2011/11/03(木) 19:47:33.80
ソリューションを全クリーンして、自分で .pdb (だっけ?)を削除した上でリビルドしてもかわんない?
0014デフォルトの名無しさん2011/11/03(木) 20:50:26.09
.ncb も削除しとけよ
0015デフォルトの名無しさん2011/11/05(土) 08:00:18.97
MethodInvokerデリゲートをC++で使いたいのですが、C++だけサンプルがなくて使い方がよく分からないです。
ttp://msdn.microsoft.com/ja-jp/library/system.windows.forms.methodinvoker.aspx#Y0

コンパイルしようとするとかっこの対応関係でエラーが出てしまいます。
どなたかC++での書き方を教えて頂けませんか。
0016デフォルトの名無しさん2011/11/05(土) 11:21:49.18
そのサンプルのままやろうとしたの?
匿名メソッドって使えたんだっけ?
0017デフォルトの名無しさん2011/11/05(土) 12:05:03.42
はい。
サンプルのままやろうとしました。

C++/CLIはサンプルが少ないので、いつもC#を参考にして色々試しているのですが、今回はどう変えればいいのか分かりませんでした。
0018デフォルトの名無しさん2011/11/05(土) 13:33:37.66
C++/CLI には匿名メソッドがなかったような気が。
※ this.Invoke の行から始まるヤツのこと

でもデリゲートはあったはずだから、匿名メソッドの部分を通常?の関数?にして
やってみればいいんじゃね。それも分からないなら、デリゲートをちゃんと勉強してからだと思う。

で、あやふやな記憶で書いてる。間違ってたらごめん。
0019デフォルトの名無しさん2011/11/06(日) 22:05:29.05
デリゲートの概念がすぐに理解できずにちょっと躓きましたが、なんとか解決できました。
関数化は簡単でしたが、関数で引数を受けなければならない場合、Invokeの引数は(デリゲートのインスタンス,引数)となるんですね。

アドバイスを下さった方々、ありがとうございました。
0020デフォルトの名無しさん2011/11/06(日) 22:40:02.81
やっと立ったのね
遅いわよ>>1乙
0021デフォルトの名無しさん2011/11/07(月) 00:22:30.65
ネストがややこしいのですが細かく考えすぎないほうがいいのでしょうか?
0022デフォルトの名無しさん2011/11/07(月) 00:40:07.38
ネストが深くなるなら、深い部分を関数かするとかは同等手段だね。
try 〜 catch とか古くは do 〜 while(false) を使って流れの中では正常ケースしか存在しないようにするとかも。
0023デフォルトの名無しさん2011/11/07(月) 00:40:30.80
x同等
o常套
0024デフォルトの名無しさん2011/11/07(月) 01:24:06.69
すみません、ここ最近参考書を買って独学しているものです
頭では理解しているのですがいざこういう処理をするプログラムを書けって言われて書けないことが多々あるのですがまずいのでしょうか?
また対策として何かありますか?
0025デフォルトの名無しさん2011/11/07(月) 01:29:12.57
>>24
それが普通。
その度に調べて自分の血肉にしていくしかない。
0026デフォルトの名無しさん2011/11/07(月) 01:37:02.45
そうなんですか
自分語りのつもりはないのですが学生時代はアホだったものでこれも向いてないのかなと不安になりました
素早いレスありがとです
0027デフォルトの名無しさん2011/11/07(月) 23:18:21.83
インストール時に保存先を別のディスクに選んでもへ殆どがC:に保存されるけど後でコピーして別のディスクにいれて起動できる?
0028デフォルトの名無しさん2011/11/11(金) 01:06:18.33
VC ってプロジェクトの設定に OutDir のようなマクロ変数を使いますよね。
これの中身を外部のプログラムなどから覗くことは出来ないでしょうか。

プロジェクトファイルが XML で書かれているので、その中に定義があると思ってたのですが、見あたらなかったです。
0029デフォルトの名無しさん2011/11/14(月) 18:27:40.34
現在実行中のスレがどのような呼び出し階層でそこに居るのか調べて、std::stringに文字列を代入したいのです。
なんという関数を利用すれば解決できるかわかりません。

び出し階層、ログ、アサート、assertで検索してみましたが、節穴でみつけられていません。
ヒントをください。
0030デフォルトの名無しさん2011/11/14(月) 19:13:20.15
>>29
スタックトレースという
こういうのを使ってごにょごにょやるようだ
http://msdn.microsoft.com/ja-jp/library/cc428994.aspx
0031デフォルトの名無しさん2011/11/14(月) 23:56:35.07
質問です。
メモリリークの検出方法を調べていたんですが。

�@最初に_CrtSetDbgFlagを記述する方法と
// メイン関数
int main(int argc, char* argv[])
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
  :
}

�A最後に_CrtDumpMemoryLeaksを呼び出す方法があるようなのですが
int main(int argc, char* argv[])
{
  :
_CrtDumpMemoryLeaks();
}

�@だとメモリリークが検出されず�Aだと数箇所のメモリリークが検出されてしまいます。
どちらが信用できるのでしょうか?ソースを追ってみたところ
メモリリークが発生しそうな箇所はありませんでした。
0032デフォルトの名無しさん2011/11/15(火) 08:09:01.13
>>31
mainのスコープのデストラクタは_CrtDumpMemoryLeaks();を呼んだ時点で
まだ呼ばれてはいないぞ。ヒープの解放予定のあるオブジェクトがあったら
当然誤検知
だからどちらも信用できる
ただ�@のほうが自動で全部終わったあとに調べるから使い勝手はいいと思われ
0033デフォルトの名無しさん2011/11/16(水) 12:45:25.00
xmlのフォーマットで書かれたテキストファイルを読み込みたいのですが、
そもそも、ファイルの内容がXMLとしておかしくないかチェックしてくれる便利なライブラリを紹介いただけないでしょうか?
<root>
 <piyo>ababababa<hoge></piyo>
 Hello World</hoge>
</root>
の場合は、<piyo>に値があるのに、閉じられる前に次のタグが始まっているからパースエラー、というようなチェックをして欲しいのです。
よろしくお願いします。
0034332011/11/16(水) 13:07:54.11
33です。
rapid_xml(もしくは、boost::property_tree)でxmlのパースができることを見つけたのですが、閉じタグをチェックしてくれないので少し困っています。
ここまでのチェックは、他のライブラリも含めて、してくれないものなのでしょうか?

<root>
 <aa>えー</cc>
 <bb>びー</bb>
</root>
この例の場合、<aa>の閉じタグが何故か</cc>になっているのでパースエラーになってほしいのですが、rapid_xmlだと問題なしにされてしまいます。
欲を出すと、boostライセンスのように取扱が簡単なものがよいのですが…。
MSXMLも試してみます。(…MSのは、どうしてこんなに複雑なのだろう…。)
0035332011/11/16(水) 13:10:16.30
33です。スレッド間違えました。
【初心者歓迎】C/C++室 Ver.76【環境依存OK
↑のスレッドのつもりで書き込んでいました。申し訳ないです。あちらへ移動します。
0036デフォルトの名無しさん2011/11/16(水) 16:12:15.70
ビルド結果の文字列の並びを変更することって可能でしょうか?

========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
↓
========== ビルド: 正常終了 1、失敗 0、更新不要 0、スキップ 0 ==========
0037デフォルトの名無しさん2011/11/16(水) 16:17:52.35
不可能
0038デフォルトの名無しさん2011/11/16(水) 16:54:55.76
>>36
msenvui.dllの中に入っている文字列リソースのようなので、
それを自己責任で書き換えてしまえばできるかもしれないけど。
0039デフォルトの名無しさん2011/11/16(水) 19:38:05.16
(`●ω●´)  < ふ か の う〜

と某スレでは書きます。
0040デフォルトの名無しさん2011/11/16(水) 22:49:02.71
したいこと: スタートアップフォルダにソフトを置いて、PC起動時にRAMディスクドライブに
"z:\test\"という共有フォルダを作成したい。

#include "stdafx.h"
#include <direct.h>
int _tmain(int argc, _TCHAR* argv[])
{
_mkdir("z:\test\");
return 0;
}

あとは共有設定したいのですが続きをお願いします。
0041デフォルトの名無しさん2011/11/16(水) 22:58:37.71
ttp://eternalwindows.jp/security/share/share02.html
0042デフォルトの名無しさん2011/11/17(木) 04:52:33.57
mkdir
net share ...
のバッチで十分な気がしないでもない
0043デフォルトの名無しさん2011/11/17(木) 10:09:42.41
プロジェクトのプロパティの
構成プロパティ>リンカー>入力>追加の依存ファイル
とは、何を入力する欄なのですか?

visual c++ 2010 Express を利用してプログラムの学習をしていて、
boost c++ libraryをインストールした際は、
Program Files\Microsoft SDKs\Windows\v7.0A
にヘッダとライブラリをコピーするだけで利用できたのに対して、
libxml2をインストールした際は、上記に加えて、
構成プロパティ>リンカー>入力>追加の依存ファイル
に対して、libxml2.lib を追記しないとリンクに失敗して、LNK2001・LNK2019が発生していたことが質問の背景にあります。

以前、何かのまねをしてプロジェクトを作っていたときに、
追加の依存ファイルに、ws_32.lib だったかを追記するようにという記述を思い出したので、
試してみたら、リンクエラーが無くなって解決できました。
そして、逆に、どうして必要・不要なのか気になってきました。

よろしくお願いします。
0044デフォルトの名無しさん2011/11/17(木) 10:36:02.61
>>43
ライブラリは明示的にリンクしろと書かないかぎりリンクされない
追加の依存ファイルはリンクするライブラリを指定する場所
boostはヘッダに
#pragma comment(lib, "〜.lib")
と書いてリンカに自分のライブラリを指定しているから追加の依存ファイルに書かなくてもリンクが通る
0045デフォルトの名無しさん2011/11/17(木) 19:13:06.02
テンプレートクラスが気持ち悪い
0046432011/11/17(木) 21:30:26.01
>>44
ありがとうございます。
ところで、どこでそんなことを知るのですか?
0047デフォルトの名無しさん2011/11/19(土) 14:06:07.11
現在VC2008で汎用のテンプレートクラスを作成していて
エラー出力の方法を模索しています
コンソールアプリならコンソールに
GUIアプリならアラートという風に出力先を静的に切り変えたいのですが
そのためのdefine定義がVCに既定であったりするのでしょうか?
0048デフォルトの名無しさん2011/11/19(土) 14:20:39.40
_CONSOLE
ちょっとプロジェクト作ってプリプロセッサの定義を見れば書いてあるぞ。

でもそんなんで切り替えるんじゃなくて、例外かなにかをそのクラスを使う側で捕捉できるようにして、
捕捉した側で出力を行うようにした方が設計的に良くないか?
0049デフォルトの名無しさん2011/11/19(土) 14:50:36.64
今作成しているエラー処理がリリース時には必要のないもので
外部にまでひっぱりだすのが面倒臭いのでクラス内に直接書くつもりです。
本来のエラー処理の関してはおっしゃる通りだと思います。
0050デフォルトの名無しさん2011/11/20(日) 07:34:01.71
privateのインスタンスメソッドのユニット試験がとても面倒です。
というか、やり方がわかりません。
教えて欲しいです。

C言語であれば、全ての関数はグローバル的な感じなので、適当なファイルにmain()を作って、そこから呼び出すだけだったのですが…。
自宅で趣味でプログラムをしているだけなので、殆ど試験をしていません。
が、何か寂しいです。

何かよい方法があれば教えてください。よろしくお願いします。
0051デフォルトの名無しさん2011/11/20(日) 11:23:37.44
#ifdef [ユニット試験識別用のマクロ]
#define private public
#endif

とか。
0052デフォルトの名無しさん2011/11/20(日) 11:36:14.21
インテリセンスorz
■ このスレッドは過去ログ倉庫に格納されています