トップページ⇒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/
0680デフォルトの名無しさん2012/11/15(木) 11:37:40.47
CString が含まれる定義体でメモリ確保したい場合はどうすればいいですか?

typedef struct _HOGE
{
 CString str1;
 CString str2;
 CString str3;
} HOGE;

HOGE *hoge = (HOGE*)HeapAlloc(GetProcessHeap(), 0, sizeof(HOGE));
0681デフォルトの名無しさん2012/11/15(木) 12:25:07.10
HOGE *hoge = new HOGE;
0682デフォルトの名無しさん2012/11/15(木) 12:41:15.23
構造体には実体じゃなくてスマポ突っ込めば?
0683デフォルトの名無しさん2012/11/15(木) 13:22:50.91
>>681
ありがと
0684デフォルトの名無しさん2012/11/19(月) 23:12:15.06
CString str[3];
0685デフォルトの名無しさん2012/11/27(火) 01:33:59.97
2010アカデミックってとっくのとうに販売終わってたんだな……
0686デフォルトの名無しさん2012/12/02(日) 14:07:19.69
VC++でフォームアプリケーションを作ろうと思い、プロジェクトを新規で作ったのですが
コードをそのまま(変更せず)にビルドしようとするとエラーが出ます
どうしたらいいですか?
0687デフォルトの名無しさん2012/12/02(日) 15:05:08.26
please show us error messages
0688デフォルトの名無しさん2012/12/05(水) 23:25:32.18
This problem not an error. It's my wife. hahaha
0689デフォルトの名無しさん2012/12/07(金) 01:28:27.62
リソースダイアログを使わずに、IEの表示部分(IEコンポーネント?)を特定のウィンドウの子コントロールとして追加したいです。
が、検索してみるとリソースダイアログ上で張り付けたコントロールの取得方法ばかり見つかり、結局方法が分かりませんでした…。

コモンコントロール(EditとかTreeViewとか)と同じような感じで使用したいだけなのですが、
どのようにすると可能でしょうか。

Doc/Viewの分離はしておらず、CHtmlViewは利用できませんでした。
comでIWebBrowser2をCoCreateInstanceしてみた所、成功してはいたようだったのですが
HWNDの値の取得もCreateWindowもしておらず、どのようにサイズ変更すればよいのかなど分かりませんでした。

技術的な面では、Vista以降あたりで動作してくれればよいと考えております。
ご助力お願いいたします。
0690デフォルトの名無しさん2012/12/07(金) 06:31:51.54
self.ie = iewin.IEHtmlWindow(self, -1, style = wx.NO_FULL_REPAINT_ON_RESIZE)
self.ie.LoadUrl(self.current)
self.ie.Navigate(URL)
0691デフォルトの名無しさん2012/12/11(火) 16:06:33.83
C言語のみ経験があるプログラミング初心者です。
>>66の人と全く同じことをしたいと考えています。
ヘッドマウントディスプレイのセンサー値を取得して、
別プログラムの中での視点移動に連動できるようにしたいです。

公式のサンプルは問題なく実行できました。
ウィンドウに表示したりといったGUIの部分は不要で、
数値だけ取得して、ソケット通信で別プログラムに渡せば実現可能だと
考えていますが、サンプルを眺めてもどこをどういじればいいのか分からない状態です。
0692デフォルトの名無しさん2012/12/11(火) 16:13:08.23
サンプル見てもわかりませんの人に
ちょちょいっと教えてどうにかなるとはとてもじゃないが思えないんだが
なのでこんな場所ではなく、まともな人に対価を支払って教えてもらうのが一番正しい選択だと思いました。
0693デフォルトの名無しさん2012/12/14(金) 21:45:02.01
コンストラクタでエラーをNULLで返したいのですが
戻り値を指定出来ません
例外をださずにNULLを返すにはどうすればいいのでしょう?
0694デフォルトの名無しさん2012/12/14(金) 22:00:46.70
失敗するような処理は、別のメンバ関数などに外だし?する。
0695デフォルトの名無しさん2012/12/19(水) 20:58:29.02
中だし派だけどどうしたらよいですか
0696デフォルトの名無しさん2012/12/19(水) 21:04:56.22
ゴムでも付ければ?
0697デフォルトの名無しさん2012/12/20(木) 10:41:23.77
俺は昆布だしだな
0698デフォルトの名無しさん2012/12/20(木) 11:12:49.54
かつお風味の
0699教えてちゃん2012/12/20(木) 12:45:14.11
GetComm○○、SetComm○○系の関数が1つも成功しないです。
OSはXPSP3、開発はVS2010を使用、

プログラムの内容は下記と大体同じで、違うのはCOM1ではなくてパイプを使っている点。
http://msdn.microsoft.com/en-us/library/aa363201.aspx

書いているプログラム(クライアント側)

HANDLE hpipe = CreateFile(L"\\\\.\\pipe\\test", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(hpipe == INVALID_HANDLE_VALUE) return;

BOOL ret;
COMMPROP prop;
DCB dcb;
COMMTIMEOUTS timeout;
ret = GetCommProperties(hpipe, &prop); // ステップ実行で確認→1つも成功しない。 @err=1
ret = GetCommState(hpipe, &dcb);
ret = GetCommTimeouts( hpipe, &timeout); // SetCommTimeoutsもできない。

// ReadFile, WriteFile は成功する。

CloseHandle( hpipe );



よろしくおねがいします
0700デフォルトの名無しさん2012/12/20(木) 12:59:36.97
普通にパイプには使えないだけなんでしょう
07016992012/12/20(木) 13:03:23.31
>>700
パイプはタイムアウト設定できないんですか?
07026992012/12/20(木) 13:47:31.72
情報すくないながら、できないようなこと書いてる人がいました。
とりあえずあきらめます。

http://stackoverflow.com/questions/13767989/named-pipe-reading-timeout
0703デフォルトの名無しさん2012/12/21(金) 02:27:00.96
Win32APIのGetOpenFileNameをコールするとVC++2008EEで
「Win32スレッド」というスレッドが3つ立ち上がり、
ダイアログを閉じた後でもそのまま居残り続けます。

何なんすかこれ?
0704デフォルトの名無しさん2012/12/21(金) 02:31:06.88
適当にコールスタック見ればわかるのでは?
0705デフォルトの名無しさん2012/12/22(土) 21:22:36.15
>>703
気にする必要なし
07067032012/12/22(土) 21:37:31.37
>>704
オープンダイアログが開くところでブレークかけてコールスタック見てみましたが、
GetOpenFileNameをコールしている自分の関数より上のものは見られませんでした。

>>705
了解です!
0707デフォルトの名無しさん2012/12/25(火) 23:56:48.48
.hと.hppの違いは何でしょうか
0708デフォルトの名無しさん2012/12/25(火) 23:58:29.98
h->cのヘッダファイル hpp->cppのヘッダファイル
0709デフォルトの名無しさん2012/12/26(水) 00:13:13.78
確かにそうなんですけども、拡張子の表記以上の違いはないのでしょうか
.hでも.hppでも動作に違いが無いように思います
単にコンパイラがC++だから両方ともC++としてコンパイルされているということでしょうか
0710デフォルトの名無しさん2012/12/26(水) 00:45:27.63
hpp は C++ のテンプレートとかを使用していてコードをヘッダファイルに書かなければならない場合に
「使われることもある」拡張子じゃなかった?

C++ でも普通のヘッダファイルは .h だろ。
0711デフォルトの名無しさん2012/12/26(水) 10:32:52.59
C++は
#include <cstdio>
とか
#include <strstream>
とか
.h
無いのが普通
0712デフォルトの名無しさん2012/12/26(水) 11:27:55.25
別に拡張子なんてただの決めごとで、動作に違いなんて出るわけない
0713デフォルトの名無しさん2012/12/26(水) 22:40:44.84
トップウィンドウに対して SetWindowSubclass や SetWindowLongPtr でサブクラス化する場合に多重にサブクラス化するとエラーになってしまうので、既にサブクラス化済みかを判定するにはどうしたら良いですか?
0714デフォルトの名無しさん2012/12/26(水) 22:43:10.91
トップウィンドウに対して SetWindowSubclass や SetWindowLongPtr でサブクラス化する場合に多重にサブクラス化するとエラーになってしまうので、既にサブクラス化済みかを判定するにはどうしたら良いですか?
0715デフォルトの名無しさん2012/12/27(木) 04:12:25.92
GetWindowLongPtrでDefaultProcじゃなければでいいんちゃう?
0716デフォルトの名無しさん2012/12/27(木) 08:09:17.01
>>715
すみません、説明が抜けていました...別プロセスのウィンドウがサブクラス化されているか判定したいのです。
0717デフォルトの名無しさん2012/12/27(木) 17:54:51.80
>712
そう思い、VC++でソースファイル名をxxx.cで書いてコンパイルエラーがorz
0718デフォルトの名無しさん2012/12/31(月) 10:24:56.51
includeなら変わらん。
コンパイルオプション付けるくらいなら拡張子替えるけどな。
0719デフォルトの名無しさん2013/01/07(月) 20:07:13.66
>>716
多重にサブクラス化して
(そのサブクラス化をやめようとする以外の状況で)
どういうエラーになるのか分からないけど、
GetClassInfoExで元々のウィンドウプロシージャが取得できるかもしれない。
別プロセスのウィンドウに対してGetClassInfoExでそれが取得できるのか知らないけど。
0720デフォルトの名無しさん2013/01/07(月) 20:09:54.18
Visual Studio 2010 で windws form
にて chart control でグラフ表示をしています
そこでchart controlの使い方で質問なんですが
たとえばタイマーなどで以下のようなプログラムをループさせていて
for(int i= 0; i>100; i++){
chart1->Series[0]->Points->Add(i);
}
コンパイルしてグラフをみていくとX軸が1づつ増えて自動でX軸のMAXを延長してくれますが
このときにX軸を0からMAXまでではなく最新の20だけ(iが80ならminが60、max80)みたいに
X軸の範囲を決めて使うことって可能でしょうか?
よろしくお願いします
0721デフォルトの名無しさん2013/01/12(土) 15:19:31.20
あるクラスの中でRegisterClassEx関数とCreateWindowEx関数を別個のメソッドの内部で呼び出すとCreateWindowEx関数がエラーを出す
GetLastError関数によるとエラーは1407(Cannot find window class)とのこと
一方で、一つのメソッドの中で順に呼び出すとエラーなく実行された
MSDNによるとCreateWindowEx関数が失敗する原因は、
?パラメータに無効な値が指定された。
?システムクラスを登録したモジュールが別のモジュールである。
?WH_CBT フックがインストールされており、失敗コードを返した。
?WM_CREATE または WM_NCCREATE のウィンドウプロシージャが失敗した。
の四つであるそうで、二つ目の「?システムクラスを登録したモジュールが別のモジュールである。」の項にあることが原因であるように思われます

つきましては、質問なのですが、この「?システムクラスを登録したモジュールが別のモジュールである。」というのはどういう意味なのか(モジュールとは一体何のことを指して言っているのか)、
二つの関数を別のメソッドで呼び出すことはできないのかについて、どなたかご教示頂けないでしょうか
0722デフォルトの名無しさん2013/01/12(土) 17:33:46.73
hInstanceの値が二つの関数で一致してないと言う意味じゃないかな
0723デフォルトの名無しさん2013/01/12(土) 23:59:18.83
>>722
ありがとうございます!
このレスで自らの過ちが明確にわかりました。自分がまぬけでした
RegisterClassEx関数を呼び出すメソッドの方に、「this->hInstance = hInstance;」と書き加えたところ正常に動作しました
0724デフォルトの名無しさん2013/01/16(水) 15:23:13.91
Web browserで広告クリックすると強制的にIEで開いてしまう
のですが、強制的にweb browserの中で開く方法を教えてください
VisualBasic2010
0725デフォルトの名無しさん2013/01/20(日) 18:58:09.52
template関数の実装はヘッダ内部で書かないとリンクエラーを起こすようなのですがどうしてなのでしょうか
googleで検索してみたもののはっきりと説明のされたサイトが見つかりません
0726デフォルトの名無しさん2013/01/21(月) 00:05:24.85
ヘッダに全部書いとかないと
たとえばstd::vector<int>とかしたときに定義が作成できないから
0727デフォルトの名無しさん2013/01/21(月) 00:19:29.40
別にヘッダに書かなくても、関数の具体化の宣言をテンプレート関数のある翻訳単位に
まとめておけばいいんだっけ?
それが嫌なら全部ヘッダに書け、と
0728デフォルトの名無しさん2013/01/21(月) 00:20:49.28
>リンクエラー
0729デフォルトの名無しさん2013/01/21(月) 15:49:20.79
ソースファイルを複数に分けて作業するときに変数の宣言や受け渡しを分かりやすく説明してるサイトや書籍はありますか?
0730デフォルトの名無しさん2013/01/21(月) 15:51:14.27
ここで聞けばいいよ
0731デフォルトの名無しさん2013/01/21(月) 16:02:15.64
何かを作っているってわけではないのですが
ソースファイルを一つですることに慣れてしまってコンパイルに掛かる時間だったり公開するときに恥ずかしかったりで分けてできるようになりたいたいと思ったのですが今までと勝手が違ったりで
0732デフォルトの名無しさん2013/01/21(月) 16:41:12.37
>>729
C言語入門書の次に読む本

みたいなタイトルの本には、それっぽいのが載ってた

まあ、分割コンパイルでググれば良いと思う
0733デフォルトの名無しさん2013/01/21(月) 16:55:07.48
丁度自分の欲しそうな本だったので早速ぽちりました
ありがとうございます!
0734デフォルトの名無しさん2013/01/22(火) 07:29:01.77
リンカの概念は難しいよな
今でもテンプレートとか使うとわかんなくなる
0735デフォルトの名無しさん2013/01/24(木) 01:54:05.47
visual c++ 2008にでopencvを使ってプログラムを組み
while文を終了した時にcmd.exeが終了しません。
コマンドプロンプトのアプリケーションの終了でも
プロセスの終了でも終了できず、パソコンの電源ボタンを
押すしか対処できません。
ビルドも正常にできて、正常に実行されますが、
終了がうまくいきません、どうしたらいいのでしょうか?
0736デフォルトの名無しさん2013/01/24(木) 02:37:22.00
atexit()すればいいんじゃないかな
0737デフォルトの名無しさん2013/01/24(木) 14:49:38.58
CPUは正常に暴走しています
0738デフォルトの名無しさん2013/01/27(日) 00:17:51.13
propertyキーワードって何をしているんでしょうか?
また使う意味は?
0739デフォルトの名無しさん2013/01/27(日) 00:48:10.49
http://msdn.microsoft.com/ja-jp/library/vstudio/yhfk0thd.aspx
0740デフォルトの名無しさん2013/01/27(日) 01:59:20.84
>>739
つまり
propertyキーワードの中にgetとsetの定義がされてあって
入力のときはset,出力のときはgetが自動で使われるということ?
0741デフォルトの名無しさん2013/01/27(日) 12:28:37.67
まあそんな感じ
C#の機能の一つだったものを、VC++独自の拡張として導入したもの
「C# property」で検索すれば出てくる
0742デフォルトの名無しさん2013/01/30(水) 11:55:40.70
>>735
デバッガ上ではどうなるの?
0743デフォルトの名無しさん2013/02/02(土) 21:29:21.69
cURLとlibcurlのライブラリを使うにはプロジェクトのプロパティにどう設定すればいいのでしょうか?
ファイルはlibcurl-7.19.3-win32-ssl-msvc.zipとcurl-7.28.1.zipをDLしました。
環境はwindows7 64bit、Visual C++ 2010 Expressで、WIN32コンソールアプリです。
0744デフォルトの名無しさん2013/02/03(日) 11:24:20.61
>>743
普通にincludeとlibの設定すれば行けると思うけど。
プロパティで言えば
VC++ディレクトリのライブラリティレクトリ、
C/C++の追加のインクルードディレクトリ、
リンカー 入力 の追加の依存ファイル、
の3つかな。
DLL使うならそれなりの設定やコピーもね。
07457432013/02/03(日) 15:27:59.79
>>744
リンカー 入力 の追加の依存ファイルを設定したら動きました。
ありがとうございました。
0746デフォルトの名無しさん2013/02/04(月) 21:50:40.98
VC++を使ってマウスショートカット的なアプリケーションを作りたいのですが、
特定のアプリケーションごとに動作を切り替えるような処理を作るのに
参考になるようなページはありますか?

もしくはこういうワードで調べると出てくる、といったものでも結構です。
ご存知のかたお願いします。
0747デフォルトの名無しさん2013/02/04(月) 21:55:35.51
GetForgroundWindow
0748デフォルトの名無しさん2013/02/05(火) 14:59:36.63
A.hファイルで構造体を宣言し、B.cppで実体宣言してるはずなんだけど
C.cppでメンバに値を代入すると波線が引かれ定義されていないと言われる
でもそこで右クリックから宣言へ移動や定義へ移動をするとB.cppの実体宣言したところに飛ばされる

いろいろ試行錯誤したけどついに意味がわからなくなりました
どういうことなんでしょうか VC++です
0749デフォルトの名無しさん2013/02/05(火) 15:04:27.75
C.cppでA.hをincludeしてないんだろう
0750デフォルトの名無しさん2013/02/05(火) 15:32:23.37
B.cppの実体はC.cpp上、もしくはincludeファイル上でextern宣言されてる?
0751デフォルトの名無しさん2013/02/05(火) 16:04:18.04
ただのインクルードしわすれだろ
0752デフォルトの名無しさん2013/02/05(火) 22:05:19.20
ちなみに、ビルドしてエラーになる?
インテリセンスでそういうのなら、正常な状態でもたまになったような。
0753デフォルトの名無しさん2013/02/05(火) 22:15:31.78
試しにファイル名変えたら開けませんって返ってくるから
インクルードは大丈夫なはず

ファイル分割前は
typedef struct tagABC
{
typedef struct tagXYZ
{
inti;
doublej;
}XYZ;
XYZ xyz[10];
}ABC;
ABC abc[5];

abc[0].xyz[0].i=1;

みたいに書いてたんだけど (すいませんレス分けます)
0754デフォルトの名無しさん2013/02/05(火) 22:17:43.40
これを分割しようとして
A.hに
typedef struct tagABC
{
typedef struct tagXYZ
{
inti;
doublej;
}XYZ;
XYZ xyz[10];
}ABC;

B.cppに
ABC abc[5];

で、C.cppで
abc[0].xyz[0].i=1;//識別子abcが定義されていません (abcに波線)

で、ビルドしたら
C.cpp(○○): error C2065: 'abc' : 定義されていない識別子です。
っていう状況
多分B.cppの実体宣言がちゃんと出来てないんだと思う
あとXYZはこのままでいいのか疑問
でもB.cppでABCと同じようにしようとしたらエラー吐かれる
0755デフォルトの名無しさん2013/02/05(火) 22:29:01.41
>>750 を読んで理解してる?
0756デフォルトの名無しさん2013/02/05(火) 22:32:19.06
>>754
A.h内でextern ABC abc[5];
A.hをB.cpp C.cppでインクルード
使用したい.cppではextern無しでABC abc[5];
0757デフォルトの名無しさん2013/02/05(火) 22:45:03.04
すみませんでした
なんか焦ってて飛んでました
わざわざtodoまで書いて下さってありがとうございます
0758デフォルトの名無しさん2013/02/06(水) 00:09:52.82
みんな優しくてよかったね
0759デフォルトの名無しさん2013/02/06(水) 17:07:25.80
同名関数の引数の型違いのつもりで
bool Hoge(bool);
int Hoge(int);
を定義したのですが
コンパイルしようとすると
区別出来ないと言われてるみたいです
どうすれば回避できますか?
0760デフォルトの名無しさん2013/02/06(水) 17:08:24.49
間違った
int Hoge(bool);
int Hoge(int);
です
0761デフォルトの名無しさん2013/02/06(水) 17:24:16.72
ttp://codepad.org/6Gz6kpCW
問題ない
0762デフォルトの名無しさん2013/02/06(水) 17:25:53.78
関数名を違うものにする
0763デフォルトの名無しさん2013/02/06(水) 17:26:49.76
BOOLはダメだよ、BOOLそのものはintのtypedef
0764デフォルトの名無しさん2013/02/06(水) 19:24:08.77
bool と BOOL まちがえてたのか
0765デフォルトの名無しさん2013/02/06(水) 19:49:50.78
>>747
ありがとうございました。
Express使おうと思ってますのでWTLでも入れてみようかと思ってるんですが
MFCじゃなくてもこの関数って使えますか
0766デフォルトの名無しさん2013/02/07(木) 08:14:46.38
>>761-764
まさにそれです
ありがとうございますた
0767デフォルトの名無しさん2013/02/07(木) 10:23:35.03
こんないいスレだったのか
0768デフォルトの名無しさん2013/02/07(木) 10:46:05.55
どうせ自演なんだし
マスゴミのやらせや印象操作と同じで
捏造やりたい放題
0769デフォルトの名無しさん2013/02/07(木) 11:03:41.06
自演、自演ってうるさい。おまえこそ常習犯だろ。
ふつうは、自演なんていう発想をしない
0770デフォルトの名無しさん2013/02/07(木) 11:04:20.70
ブラウザ
0771デフォルトの名無しさん2013/02/07(木) 19:30:51.75
最近 急に大量のpdbを開くようになっちゃったんだけど
そのせいでデバッグが始まるのに10秒くらいかかる

ntdllのpdbなんていらないよー
どうしたらいいの
0772デフォルトの名無しさん2013/02/08(金) 12:29:12.61
オプション→デバッグ→シンボルのリストのチェックを外す
0773デフォルトの名無しさん2013/02/09(土) 11:05:32.28
ソースの総行数知りたいです
0774デフォルトの名無しさん2013/02/09(土) 16:23:20.51
VS のcl で定義済みマクロ一覧を表示するにはどうしたら良いでしょうか?
gcc -E -dM -x c++ -std=c++11 /dev/null | sort
みたいなのと同じことができればOKです
cl /E までは同じようなオプションがあるんだけど、 -dM 相当のオプションってどれなんでしょうか?
cl /? 見てる限りだとわからないです・・
0775デフォルトの名無しさん2013/02/10(日) 02:57:35.94
ヘルプ。
途方もないコードのデバック途中で寝たくなったときってどうしてる?
今、言ったん寝て昼から同じ所スタートでデバックし直したいんだけど…
0776デフォルトの名無しさん2013/02/10(日) 10:31:57.09
>>775
状況が許されるなら寝ればいい。頭が硬くなってるならそれ以上のものはない。
許されないなら、エナジードリンク系でものみながらしなない程度に頑張れ。
0777デフォルトの名無しさん2013/02/10(日) 11:33:41.86
起きる手段があるなら20分くらいの仮眠が効く
0778デフォルトの名無しさん2013/02/10(日) 12:20:45.97
チームでやってるなら、リーダーに要請して順に1時間くらいずつ仮眠を取るのが最善なんだけどね。
疲れてるときに単純にひとりで寝た日には起きたときにはすべてが終わってたりするから怖いよな。。
0779デフォルトの名無しさん2013/02/10(日) 12:37:56.25
1時間だと脳が睡眠体勢に入ってしまうので、、、寝るための準備時間というのなら
そんなもんかなあ。
0780デフォルトの名無しさん2013/02/11(月) 19:53:41.10
>>772
ありがとう!設定をいじってみる
■ このスレッドは過去ログ倉庫に格納されています