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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。

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

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

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

【過去スレ】
Part34 ttp://pc12.2ch.net/test/read.cgi/tech/1245382769/
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/10/27(火) 21:18:12
おおおおおおおおおおおおおおにぃぃぃぃちゃああああああああああああああああああああああんん
3デフォルトの名無しさん:2009/10/27(火) 21:26:29
【関連スレ】
■MFC相談室 mfc21d.dll■
http://pc12.2ch.net/test/read.cgi/tech/1250919279/
Win32API質問箱 Build82
http://pc12.2ch.net/test/read.cgi/tech/1253699773/
【C++】 DirectX初心者質問スレ Part26 【C】
http://pc12.2ch.net/test/read.cgi/tech/1256403984/
C言語なら俺に聞け(入門篇) Part 54
http://pc12.2ch.net/test/read.cgi/tech/1254829314/
C++相談室 part74
http://pc12.2ch.net/test/read.cgi/tech/1256397778/
C/C++の宿題片付けます 131代目
http://pc12.2ch.net/test/read.cgi/tech/1255709298/
【初心者歓迎】C/C++室 Ver.69【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1256022655/
4デフォルトの名無しさん:2009/10/27(火) 21:30:42
5デフォルトの名無しさん:2009/10/27(火) 22:18:30
ぬるぽ
6デフォルトの名無しさん:2009/10/27(火) 22:23:39
↓まかせた
7デフォルトの名無しさん:2009/10/28(水) 01:32:44
int型の変数の偶数奇数を調べる方法を教えてください
一番下のビットを調べればいいような気がしますが、やり方がわかりません
87:2009/10/28(水) 01:45:36
ビット演算子というのを使って

int y = 1;
if((x & y) == 1){

こんな条件式でいいんでしょうか?
9デフォルトの名無しさん:2009/10/28(水) 02:16:55
それでいいし
if (x & 1) { ... }
だけでもいい
10デフォルトの名無しさん:2009/10/28(水) 02:31:43
>>7-8

BOOL IsKisuh( int nValue)
{
  if ( nValue == 0) return FALSE;
  return ( nValue % 2);
}
11デフォルトの名無しさん:2009/10/28(水) 04:24:45
>>10
関数名がキモイ
12デフォルトの名無しさん:2009/10/28(水) 09:07:11
>>10
なんで0を例外扱いしているの?
まさか、0を2で割ってはいけないなんて寝惚けたことは言わないよね?
13デフォルトの名無しさん:2009/10/28(水) 09:10:26
それは兎も角、BOOLを返す関数に割り算の結果を突っ込むのは問題だな。
14デフォルトの名無しさん:2009/10/28(水) 10:01:44
BOOLだから負の値があっても大丈夫w
15デフォルトの名無しさん:2009/10/28(水) 13:13:33
0って偶数だよな
16デフォルトの名無しさん:2009/10/28(水) 15:06:30
XP VC2005 MFC での質問です。
ボタンイベント【OnBnClickedButton1()】で、
AfxBeginThread( ThreadFunk1, NULL );
を実行したいです。

その下に、
UINT CStringTestDlg::ThreadFunc1(LPVOID dummy)
{
AfxMessageBox(_T("スレッドが呼ばれた"));
return( 0 );
}

また、TestDlg.hファイルに、
static UINT ThreadFunc1(LPVOID);

を追加しました。

C2065: 'ThreadFunk1' : 定義されていない識別子です。
C2653: 'CStringTestDlg' : 識別子がクラス名でも名前空間名でもありません。

ですが、上記のエラーが出てわかりません。

他のツールソースを見ながら少しずつ出来ることを増やしていこうと勉強中なのですが、
これは他のソースからAfxBeginThreadを勉強しようと思いそれを使用している部分をコピーしました。

エラーが出るので、クラスビューから追加しなければいけないのかとも思いましたが、
UNIT は選択できないため、もしクラスビューから追加するのであればその方法も教えて頂きたいです。

同じ方が見ているかわかりませんが、Part34  949 です。

宜しくお願いします。
17デフォルトの名無しさん:2009/10/28(水) 15:17:48
>>16
ThreadFunc1 を宣言してるのに、ThreadFunk1を使おうとしてるから。
k と c な。
おかしいと思ったら変数とかはコピペでもっていってみるといい。
1816:2009/10/28(水) 15:30:20
>>17
ご指摘ありがとうございます。
盆ミスですみません。

error C2653: 'CStringTestDlg' : 識別子がクラス名でも名前空間名でもありません。

しかし上記にスペルミスはありませんでした。(「TestDlg」検索でたくさんひっかかるのを確認。)
19デフォルトの名無しさん:2009/10/28(水) 15:43:00
は?そっちもかよ。
それはファイル名からの推測だが、
CTestDlgクラスを作ったのに雑誌通りCStringTestDlgのメンバとして書いてるんだろ。
CStringTestDlg → CTestDlgでどうよ
20デフォルトの名無しさん:2009/10/28(水) 15:44:23
って雑誌じゃないか、本・・だっけ
2116:2009/10/28(水) 15:52:01
>>19
ああああああああああああ。

ありがとうございます。


CStringなんとか  と、先入観で勘違いをしていました・・・。

CTestDlgで通りました。

ありがとうございます。
22デフォルトの名無しさん:2009/10/28(水) 15:57:18
>>21
>C2065
>C2653
コンパイラ エラー のコードがちゃんと出ているんだから、
ヘルプ(MSDN)で調べるクセをつけといたほうがいいぞ。

考えられる原因も、ちゃんとそこに載っているから。
2316:2009/10/28(水) 16:06:19
>>22
了解しました。
MSDNもよくみるようにします。
24デフォルトの名無しさん:2009/10/28(水) 20:56:43
一番最初で詰まってしまいました
プロジェクト : error PRJ0015 : NULL デバイスがシステム内にありません。ビルドを実行できません。
と出てビルド?できません
ググったらhttp://msdn.microsoft.com/ja-jp/library/c22s4fy4.aspxが出てきたんですが
リソースをあけても出てくるので
”NULL デバイスに対する適切な特権がないためにこのエラーが発生することもあります。”
ということなんでしょうか? これをどうすればいいのかわかりません。
25デフォルトの名無しさん:2009/10/28(水) 21:02:37
あきらめよう
26デフォルトの名無しさん:2009/10/28(水) 21:34:46
ディスクとかメモリ足りてる?
27デフォルトの名無しさん:2009/10/29(木) 15:57:03
配列をひとつずつ宣言することはできますか?
たとえば最初にint A[5]とか宣言した後に6番目の要素を追加するような感じで
メモリ領域を確保とかすれば可能なんでしょうか?
28デフォルトの名無しさん:2009/10/29(木) 16:27:35
>>27
いみふ。日本語でOK
29デフォルトの名無しさん:2009/10/29(木) 16:29:43
std::vectorつかうとか、cならmallocとrealllocの組み合わせとかだな
30デフォルトの名無しさん:2009/10/29(木) 17:15:40
malloc()とrealloc()を組み合わせるくらいなら、malloc()は要らない。
31デフォルトの名無しさん:2009/10/29(木) 17:17:21
まあ書くこと無くてそう突っ込むやつも出るとは思ったけどな。
無くても書けるだけであったほうがわかりやすい時は使った方がいい。
32デフォルトの名無しさん:2009/10/29(木) 17:52:44
初回だけ例外的にmalloc()を使って処理するようなみっともないプログラミングの方が判り易いと思うならその通りだね。
33デフォルトの名無しさん:2009/10/29(木) 21:46:14
クラスAの関数内で宣言している配列Bを使って、クラスCの関数をループして使いたい場合、
@クラスAの関数内でループさせ、クラスCの関数に配列Bからひとつずつデータを渡して何度も呼び出す
A配列Bを(グローバルに宣言して)クラスCの関数に受け渡して、クラスCの関数内でループさせる

どちらの方法を使うほうがよりスマートでしょうか?
詳しく書くと、クラスCは描画処理関連のクラスで、描画はクラスCでしか行えません
クラスAの関数で描画用の情報をまとめてローカルな配列Bに入れています
Aの方が速度的に速そうな気がしますが、@の方がグローバル宣言しなくていいのでプログラム的に簡単なようにも思います
描画処理自体の回数はどちらも変わらないので、@の方が良いんでしょうか
3433:2009/10/29(木) 21:49:06
追記:配列Bは、構造体の配列です
35デフォルトの名無しさん:2009/10/29(木) 22:13:10
>>32
教わった通りのことしかかけない自分で考えることのない人はそれでいいよ
36デフォルトの名無しさん:2009/10/29(木) 23:23:36
CもしくはC++スレでやればいい話
37デフォルトの名無しさん:2009/10/30(金) 02:14:08
F10キーの”ステップ オーバー”で、次の行に移ろうかという時に、Visual C++がフリーズして
WindowsのGUI自体もほとんど反応しなくなってしまうのですが、どういった要因でフリーズしてしまうのでしょうか。

デスクトップのGUI全体が半死状態になって
Ctrl+Shift+Escでタスクマネージャを起動させてもまともにコントロールが表示されず、Visual C++のプロセスを殺すこともできなくて
PCの再起動かけないといけない状態です。

使用しているソフトはVC++2008EE SP1、XP Home Edition SP3で用いています。
38デフォルトの名無しさん:2009/10/30(金) 09:58:14
>>37
それだけの条件では何が起きているかまでは想像しようがありません。ステップオーバーしようとしている関数が悪さをしているのでは?

>>33
クラスAの関数から配列BをクラスCの関数に渡すことはできないの?
構造体の配列でも引き数で渡すことはできますよ。
尤も、配列ではなくvectorにしておけばサイズ情報を別パラメータにしなくていい分よりシンプルになりますが。
39デフォルトの名無しさん:2009/10/30(金) 11:47:17
int型の単純な代入文ですら発生します。
40デフォルトの名無しさん:2009/10/30(金) 11:51:43
>>39
>37? だとしたら、動作環境が劣悪なんじゃないの? 特にメモリ容量辺りを見直すべし。
41デフォルトの名無しさん:2009/10/30(金) 11:56:20
メモリは2GBなんですが・・・
仮想メモリというか、ページファイルも含めれば十分にあると思います。
42デフォルトの名無しさん:2009/10/30(金) 12:12:12
XPたまにそういうことあるなあ
OS入れなおしで直ったが・・・
43デフォルトの名無しさん:2009/11/01(日) 22:10:51
リリース版の作り方を教えてください
4443:2009/11/01(日) 22:23:50
ttp://funini.com/kei/vs/を見て設定してみましたが
「プリコンパイル済みヘッダーがありません」というのが
#include "stdafx.h" を書いていっても消えません
4543:2009/11/01(日) 22:31:14
「プリコンパイル済みヘッダを使用しない」で解決しました
VC++ 2008 Express Editionでした
46デフォルトの名無しさん:2009/11/02(月) 08:59:08
Visual C++ プログラマだと思い込んでいる、
ただの Visual C++ ユーザー、Visual Studio ユーザー
って多いよね。
プログラマではなく、ただの統合環境(IDE)ユーザーでしかない人。

IDEをそれなりに使いこなして、アプリっぽいものを作れる人と、
IDEがあってもなくても、アプリをガツガツ組める人とは
雲泥の差がある。
47デフォルトの名無しさん:2009/11/02(月) 09:55:35
使いこなして無い奴のが多くないか?
デバッガ使える環境なのに使わないとかありえんだろ。
検索と同じように、コツというものはあるけどな
48デフォルトの名無しさん:2009/11/02(月) 11:20:14
プログラミング自体始めてのやつもいれば
VCは初心者だけど他で経験あるやつ
万年初心者のやつ
初心者といってもいろいろだろ
49デフォルトの名無しさん:2009/11/02(月) 11:22:18
いつもコマンドライン使ってるから
IDEの使い方は必要最小限しか知らない
50デフォルトの名無しさん:2009/11/04(水) 13:00:07
GetGlyphOutlineという関数をループ中で
size = GetGlyphOutline(hdc, str[i], GGO_GRAY4_BITMAP, &gm, 0, NULL, &Mat );
こんな感じで使っているのですが、この関数の戻り値がループの初回は460で二回目は0xFFFFFFになります
それぞれの引数を初期化したり定数にしてみたりしましたが変わりません
この関数が0xFFFFFFを返すというのはどういう状況なんでしょうか
51デフォルトの名無しさん:2009/11/04(水) 13:29:51
>>50
MSDNによると、
--
戻り値
フラグ GGO_BITMAP、GGO_GRAY2_BITMAP、GGO_GRAY4_BITMAP、GGO_GRAY8_BITMAP または GGO_NATIVE が指定されていて関数が成功した場合、
0 を超える値が返ります。失敗した場合は、GDI_ERROR が返ります。これらのフラグのうちの 1 つが指定されていてバッファサイズまたはアドレスが 0 の場合、必要なバッファのサイズがバイト単位で返ります。
GGO_METRICS フラグが指定されていて関数が失敗した場合、GDI_ERROR が返ります。

--
ということだそうだ。
52デフォルトの名無しさん:2009/11/04(水) 13:36:38
成功じゃなかったら失敗だろ
53デフォルトの名無しさん:2009/11/04(水) 13:37:15
>51
どうも
#define GDI_ERROR (0xFFFFFFFFL)
ということなので、どうやらGDI_ERRORが返ってきてるようですね
引数変えたりしてもうちょっと試してみます
54デフォルトの名無しさん:2009/11/04(水) 13:48:55
いやいやいや・・・
エラーが返ってきてるのがわかったら次はGetLastErrorだろ
55デフォルトの名無しさん:2009/11/04(水) 15:14:21
str[i]
ここがループ内で変わってるから、違う結果になってるだけだと思う
56デフォルトの名無しさん:2009/11/04(水) 15:24:28
実はループ制御変数はiではなかったって落ちだったりして。
57デフォルトの名無しさん:2009/11/06(金) 03:21:30
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2143: 構文エラー : ';' が '文字列' の前にありません。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2059: 構文エラー : '文字列'
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2143: 構文エラー : ';' が '{' の前にありません。
1>c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(32) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)

#ifdef __cplusplus
extern "C" {
#endif

インクルードファイルの" extern "C"{ "という部分で何故か怒られます
何かインクルードファイルが足りてないとかでしょうか?
58デフォルトの名無しさん:2009/11/06(金) 03:28:00
全部貼れ
59デフォルトの名無しさん:2009/11/06(金) 03:39:42
お前の書いたコードの stdio.h をインクルードする前の部分がおかしい
60デフォルトの名無しさん:2009/11/06(金) 03:55:27
なんとなくわかりました どうも
61デフォルトの名無しさん:2009/11/07(土) 10:12:35
StdAfxにプロジェクトで使う標準ライブラリまるごとインクルードして
プロジェクト共通の名前空間内でusing namespace std;
みたいな使い方してるんだけどStdAfxってこういう使い方でいいんでしょうか?
62デフォルトの名無しさん:2009/11/07(土) 12:06:18
ファイルサイズの調べ方を教えてくだしあ
63デフォルトの名無しさん:2009/11/07(土) 13:52:01
>>62
FindFirstFile() API を呼んで、返ってきた WIN32_FIND_DATA の
nFileSizeHigh および nFileSizeLow メンバを調べる
64デフォルトの名無しさん:2009/11/07(土) 14:49:11
#include <iostream>
#include <boost/filesystem.hpp>
int main()
{
namespace fs = boost::filesystem;
fs::path p;
std::cin >> p;
if(fs::exists(p)){
if(fs::is_directory(p)){
std::cout << "Directory." << std::endl;
}else{
std::cout << "size: " << fs::file_size(p) << " bytes." << std::endl;
}
}else{
std::cout << "Not found." << std::endl;
}
}
65デフォルトの名無しさん:2009/11/07(土) 17:46:57
>>64
if と else の間の文にはより短いほうを記述しなさいって習わなかった?
66デフォルトの名無しさん:2009/11/07(土) 18:01:28
例外・除外する処理を先に書け、と言われた。
短い方とか聞いたことない。
6762:2009/11/07(土) 20:14:30
>63
ありがとうございます
その構造体、調べてみると上位32ビットと下位32ビットを記録するってあるんですが、
32ビット超えててもWIN32APIで扱えるんでしょうか?
6862:2009/11/07(土) 20:15:46
>64 こちらの方もありがとうございました
69デフォルトの名無しさん:2009/11/07(土) 20:38:06
上位32ビットと下位32ビットなら
当然32ビット超えなら余裕で大丈夫だろ
70デフォルトの名無しさん:2009/11/07(土) 21:26:57
DirectXとWin32APIを使用して開発しているのですが
DirectXも含めた形でコンパイルするにはどうすれば良いでしょうか?
71デフォルトの名無しさん:2009/11/07(土) 23:32:24
>>65
そこしか突っ込むところが見つけられなかったんですねw
72デフォルトの名無しさん:2009/11/08(日) 09:55:40
>>70
普通にやればいい、どこで困ってんの?
73デフォルトの名無しさん:2009/11/09(月) 01:25:09
>>64でスペースを含むファイルを指定できるようにする場合はまた複雑なんですかね
74デフォルトの名無しさん:2009/11/09(月) 09:54:45
>std::cin
これをスペースまで含んでも入力できるやつに差し替えればいいだけだろう。
75デフォルトの名無しさん:2009/11/09(月) 10:05:31
newで確保した領域って、deleteしない限り確保されっぱなしなんでしょうか?
76デフォルトの名無しさん:2009/11/09(月) 10:13:28
スマートポインタを使って見えないところでdeleteしてるとかでない限りそうだな
77デフォルトの名無しさん:2009/11/09(月) 18:19:31
>76
ってことは、ある関数内でchar * str = new char[10]とかで宣言したら、
returnする前にdeleteしないと、ポインタが失われて開放できなくなるんでしょうか?
78デフォルトの名無しさん:2009/11/09(月) 18:45:43
そうだよ、それがメモリリーク
79デフォルトの名無しさん:2009/11/09(月) 19:16:28
わかりました、どうもありがとうございます
80デフォルトの名無しさん:2009/11/09(月) 22:32:59
文字列からダブルクォーテーション+カンマをstrstrで検出したいのですが、
ダブルクォーテーションを含んだ文字列を扱うにはどうすればいいんでしょうか
現在は下のように一文字ずつシングルクォーテーションで代入しているんですが
 char search[3];
 search[0] = '"';
 search[1] = ',';
 search[2] = 0;
 char * strtmp = strstr( str, search);
もっと簡単な方法はあるでしょうか?

それからもうひとつ別の質問ですが、文字列でswitchしたいのですが、switchは整数でしか使えないため、
現在else ifを何度も繰り返してやってる状態です
もっとすっきりした書き方はないでしょうか?
if(element == "TEST1"){   //elementはchar*型です
} else if(element == "TEST2"){
} else if(element == "TEST3"){
} else if...
こんな感じで何度も繰り返してます
81デフォルトの名無しさん:2009/11/09(月) 22:51:58
>>80
エスケープシーケンスを使う
"\","

>if(element == "TEST1"){   //elementはchar*型です

elementはCString型かstring型の間違いよな?
せいぜい条件をvectorに入れてfindするくらいか。
82デフォルトの名無しさん:2009/11/09(月) 23:05:06
>81
どうも \を入れれば特殊文字も使えるんですね 勉強になりました
83デフォルトの名無しさん:2009/11/10(火) 00:30:37
>if(element == "TEST1"){   
>} else if(element == "TEST2"){
>} else if(element == "TEST3"){

この例のように比較すべき文字列の最後の文字だけが異なるのなら、方法はある。
switch()は確かに文字列は扱えない。が、文字なら扱えるのだから。
84デフォルトの名無しさん:2009/11/10(火) 04:25:18
クラスのメンバ宣言で
 WCHAR * FILENAME;
どこかで
 FILENAME = new WCHAR[20];
 FILENAME = L"xxx.jpg";
どこかで
 delete [] FILENAME;

これでコンパイルして実行すると、deleteしようとしたときに
AssertionFailure:BLOCK_TYPE_IS_VALIDが出ます
何故かdeleteできないようなのですが、どうすればいいでしょうか?
8584:2009/11/10(火) 04:54:36
ポインタだから代入したら別のとこに移動しちゃうからdeleteできないんですかね
WCHAR FILENAME[20];で宣言して、memcpyで代入したら特に問題なさそうだったのでそちらにします
86デフォルトの名無しさん:2009/11/10(火) 05:02:42
アドレス 値
0x0100  "XXXXXXXXXXXXXXXXXXXX"
0xf200  "xxx.jpg"

FILENAME = new WCHAR[20]; // FILENAME = 0x0100; FILENAME は確保したメモリアドレスを指す。
FILENAME = L"xxx.jpg";    // FILENAME = 0xf200; FILENAME はL"xxx.jpg"が置いてあるメモリアドレスを指す。

delete [] FILENAME; // 0x0100を解放しなければならないのに、0xf200のアドレスを解放しようとしたのでエラー

つまり、FILENAME = L"xxx.jpg"; がダメ。たとえば以下のようにする。

FILENAME = new WCHAR[20]; // FILENAME = 0x0100; FILENAMEは確保したメモリのアドレスを指す。
wcscpy(FILENAME, L"xxx.jpg"); // 0xf200のアドレスから、0x0100のアドレスに文字列をコピーしてくる。
delete [] FILENAME; // 0x0100に確保したメモリアドレスを解放する。
87デフォルトの名無しさん:2009/11/10(火) 05:03:27
orz
88デフォルトの名無しさん:2009/11/10(火) 09:46:33
>86
ありがとうございました

続けて質問ですが、例えば
char str[6] = "123456";
という文字列から、int型の整数123456を導きたい場合はどうすれば良いのでしょうか
double k = 0;
for(i = 0; i < strlen(str); i++)
 k += (char[i] - 48) * pow( 10 , strlen(str) - i - 1);
これで多分求められる気がしますが、関数として用意されてるかな?と
89デフォルトの名無しさん:2009/11/10(火) 09:58:36
int n = atoi(str);
90デフォルトの名無しさん:2009/11/10(火) 10:16:32
ありがとうございました
91デフォルトの名無しさん:2009/11/10(火) 10:26:55
>>88のはかなり無理やりだなw
数ヵ月後にもういちど書いてみて、全然違うコードになると思うから。
92デフォルトの名無しさん:2009/11/10(火) 10:45:22
そろそろ教科書読み返して、MSDNの見方とググり方覚える時期だろw
93デフォルトの名無しさん:2009/11/10(火) 10:58:04
>>88
"123456"という文字列を入れるのにstr[6]はサイズが足りないから、
atoiは動かない可能性がある。
94デフォルトの名無しさん:2009/11/10(火) 11:02:35
コンパイラもちょっとは気を利かして配列を拡張してくれよな。
Javaとか普通にやってくれるぞ?
もう少し顧客満足度について考えるべき。
95デフォルトの名無しさん:2009/11/10(火) 11:09:31
ご主人様の書いた内容に忠実に従っているんだから、いいコンパイラだと思うがなw
96デフォルトの名無しさん:2009/11/10(火) 12:35:37
C言語初心者用のスレがあるだろ
97デフォルトの名無しさん:2009/11/10(火) 14:52:48
>>94
サイズを指定しなければ気を利かしてくれる
98デフォルトの名無しさん:2009/11/10(火) 15:02:11
まあ気を利かせるのが実行時なのかコンパイル時なのかの違いだな
99デフォルトの名無しさん:2009/11/14(土) 12:56:03
>>94
気を利かせるってのがそもそもおかしい。
それを認めると、書いた通りに動かない可能性が出て来てしまうではないか。


プログラムはあなたが思ったようには動かないが、あなたが書いたようには動く
100デフォルトの名無しさん:2009/11/15(日) 02:25:29
Win32API質問箱の方はC++専用でもないみたいなので、こっちでいいんでしょうか

CreateEventで作ったイベントオブジェクトの状態を知るにはどうすればいいんでしょうか
マルチスレッドにしてWaitForSingleObject()とすればイベントが起きるごとに作業ができるようですが、
マルチスレッドではなく、フレームごとに状態をチェックするようなことはできないのでしょうか
101デフォルトの名無しさん:2009/11/15(日) 10:07:27
さあ?ここは初心者スレだから、初心者にも回答できる範囲ならすぐレスがつくと思うけど
102デフォルトの名無しさん:2009/11/15(日) 14:58:41
状態ってシグナル状態のことだよね。
WaitForSingleObjectでいいじゃない。
シングルスレッドでだって使える。
103デフォルトの名無しさん:2009/11/16(月) 01:59:25
SAFE_RELEASEマクロを利用するためだけに<d3d9.h>をインクルードするより、
自分でマクロ定義した方が良いんでしょうか?
それともコンパイルしたら同じことになりますか?
104デフォルトの名無しさん:2009/11/16(月) 02:14:38
SAFE_RELEASEはd3d9.hに定義されてるのか。
105デフォルトの名無しさん:2009/11/16(月) 04:11:16
すいません、勘違いでした
よく使われてるマクロだったのでどこかのヘッダに入ってるものだとばかり思ってました
106デフォルトの名無しさん:2009/11/20(金) 00:02:28
 
107デフォルトの名無しさん:2009/11/20(金) 20:50:14
プロジェクトってどのくらいの大きさで分けるべき?
ゲーム作ってるとして
・キャラクターの派生(100とかありそう)
・アイテムの〜
・その他の特に関連のないこまごまとしたソース郡
・それらを纏めるMainプロジェクト
ぐらいでいいんだろうか
108デフォルトの名無しさん:2009/11/20(金) 20:57:03
すいません、日記と間違えました
109デフォルトの名無しさん:2009/11/20(金) 21:01:42
根本的に、Visual C++と関係ないです。
110デフォルトの名無しさん:2009/11/21(土) 00:15:40
VC++2005や2008であった、VC++ディレクトリというオプションはどこから選べますか。
以前は、ツール→オプションで開くダイアログボックスの、プロジェクトおよびソリューションというところにありました。
111デフォルトの名無しさん:2009/11/21(土) 00:16:31
すいません。現在使ってるバージョンはVC++2010beta2です。
112デフォルトの名無しさん:2009/11/21(土) 00:17:16
VS2010の話?
113デフォルトの名無しさん:2009/11/21(土) 02:14:02
教えて下さい。
Win32APIオンリー(SDK)の環境でやってます。
キーボードのEnterキーを押されたら○○する・・というようにしたいのですが
Enterキー以外のキー(1とか2とかSHIFTとか)は正常に取得できます。
Enterキーだけが取得できません。

unsigned char keys[256];

WM_KEYDOWN:

GetKeyboardState(keys)

if (keys[VK_RETURN]&0x80){
MessageBox(hWnd,"Enterが押された","",MB_OK);
}
if (keys[VK_SHIFT]&0x80){
MessageBox(hWnd,"SHIFTが押された","",MB_OK);
}

シフトを押すとメッセージが出ますが、エンターキーは(テンキーの物も)押しても
何も出ません。

あと、 WM_KEYDOWN: で
if(wParam==VK_RETURN)のようにしても、やっぱりエンターキーだけが取得できません。(他のキーは問題ない)

またウィンドウ上にフォーカスを持つような物も配置していません。

どうしてでしょうか?
114デフォルトの名無しさん:2009/11/21(土) 10:35:55
あるプロジェクトがスタートアッププロジェクトかどうか判別するためのマクロ(あるいは方法)って存在しますか?
115デフォルトの名無しさん:2009/11/21(土) 10:48:50
>>113
GetKeyState関数使ってもだめ?
http://msdn.microsoft.com/ja-jp/library/cc364676.aspx
116デフォルトの名無しさん:2009/11/21(土) 12:09:16
判別されているものには必ず判別方法は存在する
117113:2009/11/21(土) 16:05:45
>>115
GetKeyStateでも、やっぱりエンターキーのみが取得できません。

一応2台PCがあって、
WinMe(デスクトップ)とWinXP(ノート)のどちらでも同じ症状です。
118デフォルトの名無しさん:2009/11/21(土) 17:39:09
デバッガで調べれば解決するだろうけど、MessageBoxが閉じてるだけの気がする
119デフォルトの名無しさん:2009/11/21(土) 17:42:12
CDトレイを出したときオリジナルの音を出すことと
サブディスプレイに任意の動画を流すということは
VC++でできるのでしょうか?
できないならなんの言語でできるのでしょうか?

120デフォルトの名無しさん:2009/11/21(土) 18:36:30
できる
121デフォルトの名無しさん:2009/11/21(土) 18:41:17
$eject && beep

122119:2009/11/21(土) 19:24:44
俺、やります!
123デフォルトの名無しさん:2009/11/21(土) 22:30:05
CreateWindowでタイトルバーやフレームの太さを考慮して
ウィンドウサイズを指定するにはどうすれば良いでしょうか?
124デフォルトの名無しさん:2009/11/21(土) 22:39:43
>>123
AdjustWindowRect
125デフォルトの名無しさん:2009/11/22(日) 00:41:37
>>124
有難う誤字増す
126デフォルトの名無しさん:2009/11/22(日) 05:05:50
ある値を01100010・・・と変換してファイルに出力ってどうすれば出来ますか?
そのファイルを先頭から数ビット読んで対応したものに変換、というのを
繰り返したいんですが。それと、2進数は16進数で処理して表さなければいけないのでしょうか?
127デフォルトの名無しさん:2009/11/22(日) 05:40:33
>>126
「2進数を16進数で処理する」という言い方では君が何を疑問に
思っているのか伝わらないよ。何か根本的なところを勘違いしている
気はするんだけど何を勘違いしているのか読み取れないよ。

ちなみにCやC++の整数型の内部表現は2進数しか無い。
ソースコードに整数型の定数値を書く際の表記法は
2進数、10進数、16進数の3通りが用意されているけどね。
でも3通りの表記法のどれを使ってもコンピュータに
とっては同じ意味になる。
たとえば次の3つの書き方は全く同じ意味になる。

1) int i = 10; // 10進数で表記した値(2進数の1010)を変数に代入
2) int i = 0x0a; // 16進数で表記した値(2進数の1010)を変数に代入
3) int i = 012; // 8進数で表記した値(2進数の1010)を変数に代入

 この事を理解した上で、何を疑問に思っているのかもう1度投稿してみて。
128デフォルトの名無しさん:2009/11/22(日) 05:43:12
>ちなみにCやC++の整数型の内部表現は2進数しか無い。
>ソースコードに整数型の定数値を書く際の表記法は
>2進数、10進数、16進数の3通りが用意されているけどね。

わろす
129デフォルトの名無しさん:2009/11/22(日) 05:44:13
>>127
誤:ソースコードに整数型の定数値を書く際の表記法は2進数、10進数、16進数の3通りが用意されているけどね。
正:ソースコードに整数型の定数値を書く際の表記法は8進数、10進数、16進数の3通りが用意されているけどね。
130デフォルトの名無しさん:2009/11/22(日) 05:44:53
質問の意味がよくわからないけど、2進数は「0b」、16進数は「0x」を頭に書けばそのまま使える

ビット演算について知りたいなら「ビット演算 C++」でググるのが早い

それとも"01100010"という文字列が欲しいって意味?
131デフォルトの名無しさん:2009/11/22(日) 06:31:55
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void dmp(unsigned char *b, int len){
int i, j;
for(i = len; --i >= 0; )
for(j = 256; (j >>= 1) > 0; )
printf("%d", (b[i] & j) ? 1 : 0);
}
int main(int ac, char **av){
char buf[4096];
int i, f;
printf("input: (123, 0.5, 3.4e-6, etc...) > ");
fgets(buf, sizeof(buf), stdin);
printf(buf);
f = 0;
for(i = 0; i < strlen(buf); i++){
char c = buf[i];
if((c == '.') || (c == 'E') || (c == 'e')){ f = 1; break; }
}
if(f){
double d;
sscanf(buf, "%lf", &d);
printf("%.16f\n", d);
dmp((unsigned char *)&d, sizeof(d) / sizeof(char));
}else{
sscanf(buf, "%d", &i);
printf("%d\n", i);
dmp((unsigned char *)&i, sizeof(i) / sizeof(char));
}
return 0;
}
132デフォルトの名無しさん:2009/11/22(日) 10:04:50
CやC++初心者向けのスレがあるよ
133デフォルトの名無しさん:2009/11/22(日) 12:57:52
質問です。
エディットボックスを2個用意して、1/2縦と1/2横を切り替えたいのですが、どのようにすればいいでしょうか。
http://www1.axfc.net/uploader/Sc/so/57058
http://www1.axfc.net/uploader/Sc/so/57059
134デフォルトの名無しさん:2009/11/22(日) 13:00:22
>>133
SetWindowPos
135デフォルトの名無しさん:2009/11/22(日) 21:13:04
ここって、ウィンドウ表示さえ覚束ない俺は来るべきじゃない?
136デフォルトの名無しさん:2009/11/22(日) 21:59:07
別にGUIアプリじゃなくてもいいけど、C++プログラム自体がかけないというなら
C++初心者スレとかの方があってると思う。
137デフォルトの名無しさん:2009/11/22(日) 22:01:13
::ShowWindow( >>135, SW_SHOWMINNOACTIVE);
138デフォルトの名無しさん:2009/11/23(月) 03:41:24
>>127-131
レスありがとうございます。しようとしている事は画像の符号化です。
輝度値をハフマン符号で表現し、ファイルに格納したいのです。
現段階では出力ファイルはそのままでは見れなくて、復号化処理を行う
と見れる、という状態にしたいのです。
簡単に言うと、値3→(10) 値10→(1001) ・・・を順に (101001・・・)とファイルに出力
出来ないかと思った次第です。
使用しているC++入門の本には8進と16進の扱い方しか載ってなかったので、
>>130さんの方法で少し頑張りたいと思います。
139デフォルトの名無しさん:2009/11/25(水) 15:32:25
VC++6.0使ってるんだけど、
ダイアログアプリケーションでデストラクタの追加ってどうやればいいんですか?

仮想関数の追加やらみたけど、載ってないですし、自分でメンバ関数の追加でやっていいのかもわかりません。

ネットでいろいろ調べても追加の方法が書いてなく・・・

すみませんが、おしえてください m(_ _)m
140デフォルトの名無しさん:2009/11/25(水) 15:37:08
>>135
ウィンドウ表示って難しそうだけど…

普通のCとWindowsCの違いって、CUIかGUIの違いとそっくりそのままなんだよね。


>>135
C言語の文法の法則によれば、CUIのプログラムができるし
WindowsのCの法則にちゃんとしたがって組めば、GUIの画面ができるし。

昔の真っ黒な画面に入力していったアプリが、GUIになってExcelに変わったとかいう話だけで
初心者が思うほど、GUIプログラミングも難しくないんだよね。Excelに変わったのと同じくらいというだけ。
141デフォルトの名無しさん:2009/11/25(水) 15:41:41
win32だとshort intよりintのほうが早いって本当にゃん?
floatよりdoubleのほうが早いって本当にゃん?
142デフォルトの名無しさん:2009/11/25(水) 16:53:16
>>139
メンバ関数の追加でやってもいいし、手動でやってもいい。
所詮はC++、IDEの機能を使わなきゃできない、なんて類のものではない。
143デフォルトの名無しさん:2009/11/25(水) 17:46:13
>>141
たぶんいいたいのは、結局内部ではshort int はintに、floatはdoubleに変換するから
変換の手間だけ遅くなるって意味だと思うよ。まあ状況によってはそういうところもある
144デフォルトの名無しさん:2009/11/25(水) 18:09:30
>>140
なんでExcel?w
145デフォルトの名無しさん:2009/11/25(水) 20:26:48
Visual C++ 2008 で、
ウォッチウィンドウが、昼間に使っていたときは表示されていたのですが、
夜になって表示されなくなりました。(Express , Professional 両方とも)

ヘルプメニューには
> [デバッグ] メニューの [ウィンドウ]、[ウォッチ] を順にポイントし、
と書いてありますが、[デバッグ] メニューの [ウィンドウ]に[ウォッチ]が見当たりません。
( [ブレークポイント]、[出力]、[イミディエイト]の3つのみ )

ウォッチウィンドウを表示させる方法をご存知の方、教えてください。
146デフォルトの名無しさん:2009/11/25(水) 20:34:03
デバッグ時にしかそのウィンドウは無いはず。
147デフォルトの名無しさん:2009/11/25(水) 20:47:08
>>146
ありがとうございます。パソコン再起動して、デバッグにしたら表示されました。
パソコン再起動中に、いつもは開かないVisual Studioのダイアログボックスが開いて、
デバッガが(応答なし)と出ました。
私がうっかりしていただけかも知れません。

自分のウォッチウィンドウへの依存度の高さに気付かされました。
148デフォルトの名無しさん:2009/11/25(水) 23:01:50
マイクロソフト、Visual C++ 2008 Expres Edition を使用しています。
2次元配列の関数へのアドレス渡しで困っています。
GCC ユーザーなもので、いまいちVisual系が解かりませんのでご教授願います。
以下は、行列 Matrix[50][10] をつくり、各要素に1を代入するソースなはずです。
/****************************************************/
#include <stdio.h>

void ALL_ONE(int *Px, int NofRow,int NofCol){
int i;
for (i = 0 ; i < NofRow*NofCol ; i++){
*(Px+i) = 1;
}
}

void main(void){
int Matrix[50][10];
ALL_ONE(&Matrix,50,10);
/*以下に対して各処理を続行*/
}
/****************************************************/
GCCでは incompatible pointer type の warning は出るものの、
コンパイルでき、結果が表示されます。

マイクロソフト、Visual C++ 2008 Expres Edition では、
コンパイルエラー
error C2664: 'ALL_ONE' : 1 番目の引数を 'int [50][10]' から 'int *' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。
変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。となってしまいます。どなたかたすけてください、お願いします。
149デフォルトの名無しさん:2009/11/25(水) 23:10:58
>GCCでは incompatible pointer type の warning は出るものの、

この時点でダメじゃないか。^^
いまいちVisual系が解かってないんじゃなくて、
C言語の基礎がわかってない。
&Matrix は int[50][10] 型へのポインタを返すので、

void ALL_ONE(int (*Px)[50][10], int NofRow,int NofCol){

と書く必要がある。

150デフォルトの名無しさん:2009/11/25(水) 23:24:48
>>148

>ALL_ONE(&Matrix,50,10);

配列名は、配列先頭要素へのポインタだから、
「&」は、いらないんじゃないですか。

ALL_ONE(Matrix,50,10);
151デフォルトの名無しさん:2009/11/26(木) 00:10:25
>>148
ALL_ONE(&Matrix[0][0], 50, 10);としておけ、VC++でもコンパイル通るしGCCでも警告が出なくなる。
これがエラーになるか警告しかでないかの差異はC++かCかの違い。
VC++でもCとしてコンパイルすれば警告になるし、GCCでもg++ならエラーになる。
152デフォルトの名無しさん:2009/11/26(木) 00:19:37
Visual C++ 2008 Expres Edition を使っています。
1〜9の数字を並べて表示させようと思っていて、

int C[9]={1,2,3,4,5,6,7,8,9};
を最初に作ってます。
そして一度でも使った数字には0を当てはめます。
k=0;
do{
printf("数を選んで下さい\n");
while(k<9){
if(C[k]!=0){
printf("%d\n",C[k]);
k++;
}

最初に1〜9を表示させるにはどうすればよいですか?
153デフォルトの名無しさん:2009/11/26(木) 00:20:52
C言語なら俺に聞け(入門編)にいきなさい
154デフォルトの名無しさん:2009/11/26(木) 00:25:26
スレチなのですね。すみませんでした。
155デフォルトの名無しさん:2009/11/26(木) 06:21:44
今のVC++ってVB6の感覚でできるんでしょうか?
VC6のとき、さっぱり意味がわからずに挫折した者なんですが
今のVCならいけるでしょうか?
156デフォルトの名無しさん:2009/11/26(木) 11:23:56
あんまかわらん
C#にしとけ
157デフォルトの名無しさん:2009/11/26(木) 15:14:07
VC++使いっています。
CStringに入っている文字列を
UTF-8形式のテキストファイルに書き出したいのですが、
よく分かりません。
CStringWに変換して
wfopen_s
で書き出せばいいかと思うのですが、書き出すサイズが
GetLength()で取得すると、文字数しかわからず、実際のサイズが分かりません。
やってること自体見当違いでしょうか・・・。
ご教授いただけますと幸いです。
158デフォルトの名無しさん:2009/11/26(木) 15:55:33
>>157
まずはUTF-8とUTF-16とUnicodeの違いを調べたほうがいい。

MultiByteToWideCharとWideCharToMultiByteを使って以下のように変換をする。
char(sjis?) -> wchar_t(utf-16) -> char(utf-8)
wfopen_sとfopen_sの違いはファイル名をUnicodeで指定するかどうかだけ。書き込みには関係ない。
書き込むサイズはWideCharToMultiByteの戻り値を見れば分かる。
159デフォルトの名無しさん:2009/11/26(木) 20:29:10
>>157
>>156も言っているが、ファイルを開くのにはwfopen_sでもfopen_sでも同じ。
ファイル名もCStringで与えるなら、_tfopen_sがおすすめ。

ただし、2番目の引数を"w,ccs=UTF-8"と指定すること。UTF-8への変換はCRTがやってくれる。
これだけで、あとはいつもどおり、fprintf_s/fwprintf_s/_ftprintf_sやfputs/fputws/_fputts、
putchar/putwchar/_puttcharなどFILE*に書き込む関数が使える。
160デフォルトの名無しさん:2009/11/26(木) 22:12:06
148です。149さま,150さま,151さま
皆様ありがとうございました。

>>151さま
ALL_ONE(&Matrix[0][0], 50, 10);
でいけました!!!
ありがとうございます。
今後は、「配列の位置」をまじめに記述するよう心がけます。
考えてみれば、当然のことですね。。
&Matrix[0][0]でなくても&Matrix[5][0]でも良い訳ですからね。

>>149さま
ありがとうございます。
「まじめに動けばいい!」と思ってwarning は全て無視してました。
精進いたします。ちなみに
void ALL_ONE(int (*Px)[50][10], int NofRow,int NofCol){
はアウトでした。

>>150さま
gcc は ALL_ONE(Matrix,50,10); でいけまました。
visual C++ .net の教科書は & をつけろとありました。
ちなみに、visual C++で、配列が1次元のときは & なしで大丈夫でした。
私の想像ですが、ALL_ONE(Matrix,50,10);の記述は、コンパイル時、内部マクロで、ALL_ONE(&Matrix[0],50,10);に書き換えられてコンパイルされるのかと。。。ふと思いました。

おかげで、助かりました。再度、皆様方に厚く御礼申し上げます。
161デフォルトの名無しさん:2009/11/26(木) 23:25:08
>私の想像ですが、ALL_ONE(Matrix,50,10);の記述は、コンパイル時、内部マクロで、ALL_ONE(&Matrix[0],50,10);に書き換えられてコンパイルされるのかと。。。ふと思いました。

死ね
162デフォルトの名無しさん:2009/11/27(金) 00:06:08
マクロっていうのはおかしいけど、&HOGE[0]とHOGEが同一という認識は正しいよ。
163デフォルトの名無しさん:2009/11/27(金) 23:08:47
自慢じゃないが、"&"と"*"は、ウォッチウィンドウで確認しながら、つけたり外したりするのが確実。
自慢じゃないけどね。
164139:2009/11/28(土) 14:23:20
>>142
どうもありがとうございます。遅れてしまい、すみません。。
質問したこと忘れてました。。

メンバ関数の追加でやればいいんですね。自分は以前Java業でして、倉庫の奥の
VC6.0を引っ張り出して、遊んでいます。いまいちIDEの機能がつかめなく
どうすればいいかわかりませんでした。

助かりました。これから、やってみます。ありがとうございました。
ググッても必要な情報がでてこなかったので・・・
165デフォルトの名無しさん:2009/11/30(月) 02:58:06
static double func[][4] = {
{ 1.0, 0.0, 0.0. 0.0 },
{ 0.0, 1.0, 0.0, 0.0 },
{ 0.0, 0.0, 1.0, 0.0 },
{ 0.0, 0.0, 0.0, 1.0 },
};

とあるソースに書いており、それは動いたのですが、他のプロジェクトのソースにこのまま写すと
error C2143: 構文エラー : ';' が '}' の前にありません。
error C2059: 構文エラー : '}'
error C2143: 構文エラー : ';' が '{' の前にありません。
error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
error C2059: 構文エラー : ','

とエラーがでて動きません。
なぜでしょうか
166デフォルトの名無しさん:2009/11/30(月) 10:35:14
>{ 1.0, 0.0, 0.0. 0.0 },

コンマがピリオドになっている。
167デフォルトの名無しさん:2009/11/30(月) 20:12:03
追加ライブラリと同じように、追加インクルードファイルディレクトリを
ソース内でpragmaなどを使って指定する方法はありますか?
168デフォルトの名無しさん:2009/12/01(火) 10:26:01
#pragma comment(linker, "/libpath:〜")
でできないかな?
169デフォルトの名無しさん:2009/12/01(火) 10:27:28
ってインクルードかいな
170デフォルトの名無しさん:2009/12/01(火) 17:40:11
直接指定したらいいじゃんw
171デフォルトの名無しさん:2009/12/01(火) 18:20:35
>>168-170
stdafx.hあたりに、>>168のようなライブラリフォルダと同じような書き方で
インクルードフォルダを指定できたらと思っているのですが、
やっぱり無いんでしょうかね。
172デフォルトの名無しさん:2009/12/01(火) 18:29:16
pragmaでinclude関連はinclude_aliasしかわからん。
これと>>170組み合わせたら?
173デフォルトの名無しさん:2009/12/01(火) 18:29:56
つーかインクルードパスをソースから指定する理由がわからん。
174デフォルトの名無しさん:2009/12/01(火) 18:36:34
自分が使わないものまで全部知ってる必要ないからな
正確な情報が必要ならサポートに相談すべき
175デフォルトの名無しさん:2009/12/03(木) 13:53:27
出力ウィンドウに、ファイルパス+(行数)みたいな形で出力すると、
VC++標準のコンパイルエラーなどの出力と同じように、ダブルクリックとかF8キーでジャンプできるようになりますが
決まった形式とかあるんでしょうか。今はVC++の出力を真似て書いてます。
176デフォルトの名無しさん:2009/12/03(木) 14:35:23
はなくそってうめぇな、おい
177デフォルトの名無しさん:2009/12/03(木) 14:37:54
失礼します。
VisualC++ 2008 Express Editionを使用しているのですが、
グローバルな文字列の配列を宣言するには、どのようにすれば良いのでしょうか?

private: System::String^ PrivateString[1000];
これではエラーになってしまうので、何か良い方法がありましたらご教授よろしくお願いします。
178デフォルトの名無しさん:2009/12/03(木) 15:14:38
どんなエラー?ほんとにC++/CLIなの?
もしそうなら↓で聞いた方がいいかも。

C++/CLI part3
http://pc12.2ch.net/test/read.cgi/tech/1206447234/
179デフォルトの名無しさん:2009/12/03(木) 16:29:01
>>178
エラーはこれです。

1>d:\cpp\Form1.h(986) : error C2728: 'System::String ^' : ネイティブ配列はこのマネージ型を含むことはできません
1> 'array<System::String ^>' を意図しましたか?

arrayを使えば良いのかな?でも
private: array<System::String ^> PrivateString = gcnew array<System::String ^>(1024);
ではダメでした

1>d:\cpp\Form1.h(987) : error C3149: 'cli::array<Type>' : トップレベルの '^' なしに、この型をここに使用することはできません
1> with
1> [
1> Type=System::String ^
1> ]
1>d:\cpp\Form1.h(987) : error C3845: 'HC3::Form1::PrivateString': ref クラス または値型の内部で、スタティック データ メンバのみ初期化することができます

180デフォルトの名無しさん:2009/12/03(木) 16:36:39
array<System::String ^>^
じゃないのか
181デフォルトの名無しさん:2009/12/03(木) 16:54:03
>>180
ありがとうございます。
加えてstaticにすることで、動作しました。

private: static array<System::String ^>^ PrivateString = gcnew array<System::String ^>(1024);
182デフォルトの名無しさん:2009/12/04(金) 04:37:58
度々失礼します。

VisualC++ 2008 Express Editionで、iniファイルの操作を行おうと思っているのですが、カレントディレクトリの取得から躓いてしまいました。
http://msdn.microsoft.com/ja-jp/library/system.io.directory.getcurrentdirectory.aspx
を、参考に記述してみたのですが、最初の
String^ path = Directory::GetCurrentDirectory();
の、ところでエラーが発生してしまいました。

1>d:\cpp\Form1.h(1049) : error C2039: 'GetCurrentDirectoryW' : 'System::IO::Directory' のメンバではありません。
1> c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::IO::Directory' の宣言を確認してください。
1>d:\cpp\Form1.h(1049) : error C2660: 'GetCurrentDirectoryW' : 関数に 0 個の引数を指定できません。

namespaceは宣言していますし、GetCurrent〜は::の後の予測変換で表示されているのを選んでいるので、メンバになっていると思うのですが・・・。
すいませんが、よろしくお願いします。
183デフォルトの名無しさん:2009/12/04(金) 05:11:21
>>182
たぶんこれ。
http://social.msdn.microsoft.com/forums/ja-JP/vcgeneralja/thread/a2c9c7cc-1441-4ce3-bfdf-bdfaa0810d37/

ていうか GetCurrentDirectoryW でぐぐったら最初にでてきたぞ。
184デフォルトの名無しさん:2009/12/05(土) 01:38:33
>>183
ありがとうございます。
'GetCurrentDirectoryのところで'GetCurrentDirectoryW'の説明があったから、そっちは検索してませんでした。
CLIもいろいろとめんどくさいのですね。
185デフォルトの名無しさん:2009/12/05(土) 11:21:14
他スレからの誘導です。
可変長の符号をファイルに出力したいのですが
どのようなプログラムにすればいいでしょうか?

例.値(10進)「3 3 6 3 6 2」

3・・・00
6・・・01
2・・・100

出力後のファイル(2進)「0000010001100」

最低1バイト単位でファイルに出力したいのですが。
186デフォルトの名無しさん:2009/12/05(土) 11:45:25
1バイトのバッファにビット演算で格納して言って、溢れたらファイルに出力でいいんじゃないの?
187デフォルトの名無しさん:2009/12/05(土) 13:52:44
単なる文字列の置き換えじゃん。
188デフォルトの名無しさん:2009/12/05(土) 19:27:45
プロジェクトをテンプレートとして登録したいのですが、それらしきメニューが見当たりません。
調べているとVC++2005では出来ないそうですが、VC++2008は出来ますか?
エディションはExpressです。
189デフォルトの名無しさん:2009/12/05(土) 19:46:59
>>184
最近のWindows SDKだとその問題への対処がなされていて、>>182のように書いてもエラーが出なくなっている。
いつからだかは分からないけど、すくなくとも最新のWindows SDK 7.0はそうなっている。
190デフォルトの名無しさん:2009/12/06(日) 10:44:56
>>188
これじゃないの?
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/535myprojecttemplate/myprojecttemplate.html
2005EEはもう消してしまったけど、VS2005ProとVC#2008EEにはテンプレートのエクスポートの項目あるけどなあ
191デフォルトの名無しさん:2009/12/06(日) 13:18:43
>>190
ありがとうございます。
それがVisual C++ にはエクスポートの項目が見つからないのです。
192デフォルトの名無しさん:2009/12/08(火) 12:02:08
最近、VisualC++ 2008 Express Editionを使い始めたのですが、
テキストエディタのことで質問させて下さい。

カーソルのある行をコピー、カーソルのある行を選択、
もしくはカーソルのある行を削除というショートカットコマンドはあるんでしょうか?
MSDNで探して見たのですが、見当たりません。
もし、そのようなショートカットを使いたい場合はどうしたらいいのでしょうか?
193デフォルトの名無しさん:2009/12/08(火) 12:49:20
カーソルのある行の最左端をマウスクリックすりゃその行全体を選択できるけど、それじゃダメなのか?
あとは Ctrl+X, とか Delete すりゃいいんだが。
194デフォルトの名無しさん:2009/12/08(火) 14:32:20
RGB値に簡単に倍率を掛ける方法はないですか?
RGB(r*x,g*x,b*x)みたいな事をしたいんですが
これだと3色の値を覚えないといけないので
作られた後の色に対して倍率を掛けたいのです
195デフォルトの名無しさん:2009/12/08(火) 15:27:06
RGB値って何?
196デフォルトの名無しさん:2009/12/08(火) 17:22:22
RGB( r, g, b ) * x

これで何が不満だというのだ。
197デフォルトの名無しさん:2009/12/08(火) 17:24:05
それは倍率になってないだろ。w
198デフォルトの名無しさん:2009/12/08(火) 17:29:07
>>194
GetRValue GetGValue GetBValueでRGB値から各値は取れますよ。
199デフォルトの名無しさん:2009/12/08(火) 19:09:23
>>192
1文字も選択していない状態でCtrl+Cすると、カーソルのある行をコピーすることになる。
Ctrl+Xで切り取りも同様。
200194:2009/12/08(火) 21:59:21
>>198
ありがとうございました
201デフォルトの名無しさん:2009/12/09(水) 00:38:44
>>193
回答ありがとうございます。
以前はそれで済ませてましたが、キーボードから手を離してマウス操作だと、
めんどくさく感じていたので・・・。

>>199
回答ありがとうございます。
やりたかった動作です。
本当に助かりました。
202デフォルトの名無しさん:2009/12/09(水) 10:15:24
ぬるぽ
203デフォルトの名無しさん:2009/12/09(水) 11:34:04
ガッ
といったところで1つ質問良いでしょうか
作成手段:「空のプロジェクト」から窓作成
目的:リソースビューで追加したウィンドウのハンドルを取得したい

コード抜粋
/**********winmain.cpp***********/
HINSTANCE hInst; //instance
HWND hEdit; //edit control
wndProc(HWND hWnd,UINT uiMsg,WPARAM wParam,LPARAM lParam)
{
  HWND hDlog;//ダイアログのハンドル
  switch(uiMsg){
    case WM_CREATE://ウィンドウ作成時
      hDlog = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PROPPAGE_MEDIUM),
        hWnd, DialogProc);//エディットボックスを持ったダイアログを作成
      hEdit = /*???   エディットボックスのハンドルを取得   ???*/
      /*** なんじゃもんじゃ ***/
  }
  /*** なんじゃもんじゃ ***/
}

/**********resource.h***********/
#define IDC_EDIT1            1020
#define IDD_PROPPAGE_MEDIUM   106

グローバル変数hEditにエディットボックスのハンドルを取り付けたいのですが
findwindowとかでは出来ないっぽいので、どーしたらよいものかと・・・
IDD_PROPPAGE_MEDIUMの中身はただのエディットボックスを持ったダイアログということでお願いします
204デフォルトの名無しさん:2009/12/09(水) 11:41:33
GetDlgItemとか?
205デフォルトの名無しさん:2009/12/09(水) 14:26:03
GetDigItem・・・
hEdit=GetDlgItem(hDlog, IDC_EDIT1);
でnullっぽい(unused)でした。
なんぞやり方間違ってるのか。ハテ
206デフォルトの名無しさん:2009/12/09(水) 14:43:22
>>205
ほんとに0x00000000だったのか?
unusedは気にしないでいいぞ
207デフォルトの名無しさん:2009/12/09(水) 15:04:46
SetWindowText(hEdit,MAKEINTRESOURCE(int value));

文でnullリファレンス例外が飛んでるっぽいのでnullだと考えてたのですが
じゃあどこか別のところを見ているのか・・・
208デフォルトの名無しさん:2009/12/09(水) 15:09:56
>>207
>SetWindowText(hEdit,MAKEINTRESOURCE(int value));
そりゃないだろ、MAKEINTRESOURCEは数値を文字列に変換するわけじゃないぞ。
とりあえず、SetWindowText(hEdit, _T("Hello")); で試すとどうなる?
209デフォルトの名無しさん:2009/12/09(水) 15:20:35
herroが出てきました・・・getdigitemは問題ないぽいです
value(int)を文字列の頭に入れておく・・・という感じでしょうか

数値文字列変換苦手だー
210デフォルトの名無しさん:2009/12/09(水) 15:26:31
とりあえず万能のsprintf()を覚えておけばいいと思うよ。
211デフォルトの名無しさん:2009/12/09(水) 17:18:58
sprintfの%.数字gで対応〜

ありがとうございます。山越えたみたいです・・・
212デフォルトの名無しさん:2009/12/09(水) 17:39:00
VC++ 2008eeでC++の勉強を始めたのですが
この先どのように勉強を進めて良いのか分かりません
皆さんはどのようにマスターされたのでしょうか?
やさしいC++ 第3版の内容は一通り終わっています
213デフォルトの名無しさん:2009/12/09(水) 17:39:41
なんか作る
214デフォルトの名無しさん:2009/12/09(水) 17:42:51
基本的な文法が理解できるようになったのなら、後は何がしたいのかによる。
215デフォルトの名無しさん:2009/12/09(水) 19:08:12
しょうもない質問
struct struct{
int i;
}

main(){
 for(0から10回){
  func1();
 }
}
func(){
 static struct a ={0};
 a.i++;
}

もうここまで書いたなら試せって話だが。これってa.i=10でいいよね
216デフォルトの名無しさん:2009/12/09(水) 19:14:25
C++スレでやってくれ
217デフォルトの名無しさん:2009/12/09(水) 20:27:06
>>214
自分が作りたいものによって学ぶべきものが変わってくるという事ですね
色々調べてみます
ありがとうございます
218デフォルトの名無しさん:2009/12/09(水) 21:40:01
日本語話せます程度の話だからな
219デフォルトの名無しさん:2009/12/09(水) 21:59:46
日本語の単語を知ってます、程度じゃね
話せるようになるには数作るしかない
220デフォルトの名無しさん:2009/12/09(水) 23:16:33
エラーで困っているので助けてください。

error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です
error LNK2001: 外部シンボル ""public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ)" は未解決です。
error LNK2019: 未解決の外部シンボル "public: virtual void __thiscallCDialog::OnInitDialog(void)" (?OnInitDialog@CDialog@@UAEXXZ) が
関数"public: virtual int __thiscall CprototypeApp::InitInstance(void)"(?InitInstance@CprototypeApp@@UAEHXZ) で参照されました

とエラーが出ていますが、原因がわからず困っています。

同じソースを別の人の環境で実行すると何もエラーも出ずにコンパイル・リンカーが通ります。
私も昨日までは通っていましたが、コーディングを設定ファイル?とかがおかしくなってしまったのか、
昨日のデータを使ってもリンカーエラーが出て困っています。

環境として、
自分   VisualStadio 2008 VC++(MFC)
別の人  VisualStadio 2008 VC++(MFC)

本当に困っています。何か知っている方がいらっしゃったら力を貸してください。
221デフォルトの名無しさん:2009/12/10(木) 00:17:32
必要なライブラリをリンクしてない
222デフォルトの名無しさん:2009/12/10(木) 12:42:23
>>220
ソリューション丸コピーでビルドが通らないの?ならVisual Studioをインストールしなおすのがいいだろう。
プロジェクトファイル(.vcproj)やソリューションファイル(.sln)もソースファイルだよ。
プログラマが操作した設定が書かれている。
223デフォルトの名無しさん:2009/12/10(木) 13:02:26
MFCスレとマルチ
224デフォルトの名無しさん:2009/12/10(木) 17:40:48
MFC+VC2005です。

BYTE配列で持ってるBMPファイルのデータを
(CFileでWriteするとbmpファイルになるデータです)
JPEGに保存する方法はどういうのがあるでしょうか。

無駄なディスクI/Oは避けたいので
一度保存して、それをCImageで開くと言うのは最終手段と思っているのですが。
225デフォルトの名無しさん:2009/12/10(木) 17:47:42
IStreamで
226デフォルトの名無しさん:2009/12/10(木) 18:16:51
IStreamが嫌なら、CreateDIBitmapしてCImageのAttachを呼ぶなど。
227デフォルトの名無しさん:2009/12/10(木) 18:37:01
@コマンドプロンプトを開く
Aバッチファイル実行
Bcl sample.cppと打つ
この手順で勉強しているのですが、毎回毎回これをやるのがつらいので、
sample.cppをドラッグアンドドロップすると上記手順を実行してくれるようなソフトや方法はありませんか?
228デフォルトの名無しさん:2009/12/10(木) 18:56:07
そういうやり方が好みならコンパイル用のバッチ作って、そこへsample.cppをドラッグアンドドロップだな
あと、コマンドラインでやりたいなら、VCじゃなくて他のコンパイラの情報を参考にした方がいいし、
コンパイラもそっち使った方がいいかもしれない。
229デフォルトの名無しさん:2009/12/10(木) 19:18:44
なるほど、Windowsのバッチで出来るのですか。
Linuxでg++でプログラミングしたことはあるのですが、WindowsでやるならVisual C++をやりたいなぁと思っておりまして。
申し訳ありませんが、
Windowsのバッチを書いて下さりませんか?
m(_ _)m
230デフォルトの名無しさん:2009/12/10(木) 19:42:48
こんな感じかな。vcvars32.batは2番のバッチファイルのことだから適当に置き換えること。
@echo off
call vcvars32.bat
cd /d %~dp1
cl "%~nx1"
pause
231デフォルトの名無しさん:2009/12/10(木) 20:01:39
どうもありがとうございます。
これ、ちょっと応用すればいろいろ使えそうですね。
232224:2009/12/11(金) 09:18:48
>>225-226
試してみます、ありがとうございます
233デフォルトの名無しさん:2009/12/11(金) 15:03:58
VC++って何気に変数名とかクラス名とかに日本語使えるけど
別に良いよね(ry
234デフォルトの名無しさん:2009/12/11(金) 15:22:02
一応vcもNMAKEってのがあるぞ、Linuxやってるとのことなので一応
235デフォルトの名無しさん:2009/12/11(金) 17:56:53
msdev もコマンドラインから使えるよ。
.dsp とターゲット("〜〜 release" とか)を指定してビルドできる。
236229:2009/12/12(土) 00:15:30
ありがとうございます!!!
237デフォルトの名無しさん:2009/12/12(土) 16:40:09
Visual C++ 2008 Express EditionでCLRのWindowsフォームアプリケーションを作ろうとしています。

標準状態で、画面のDPI設定を通常サイズ(96DPI)と125%(120DPI)にした場合で実行時のフォント及びフォームサイズが変わってしまいのす。
変わらないようにする方法は無いのでしょうか?

画面のDPI設定を無視して常に同じ大きさのフォームを表示がしたいです。

CLRを使うことがそもそもの間違いならそう指摘してください。
238デフォルトの名無しさん:2009/12/12(土) 16:43:13
>変わらないようにする方法は無いのでしょうか?

考え方が間違っている。
96DPIと120DPIの双方に対応できるようにするのが正解。
239デフォルトの名無しさん:2009/12/12(土) 17:09:48
winの仕様だから、おまかせで作るとそうなる。
気に入らないなら自分で調整するか、最初から自分で出す。
240デフォルトの名無しさん:2009/12/12(土) 19:29:32
サイズを変えてるのに変わってしまうという文句はどういうことだ?
変えてるんだから変わるのは当たり前だろ?
241デフォルトの名無しさん:2009/12/13(日) 10:27:02
プログラム次第ですが、変わって構わない場合と、変わると不味い場合がある。

不特定環境での実行を想定するなら、サイズが違うことを前提で画面サイズ固定のプログラムを作るのは当たり前ですよね。
242デフォルトの名無しさん:2009/12/13(日) 13:49:57
Visual C++ 2008 expressでdataGridViewを使用しようとしています。
環境としては.NETを用いて、CLR-Windowsフォームアプリケーションの
プロジェクトにしています。

 double 型の配列データをdataGridViewに表示させようとしています。
例えば、test[0]〜test[10]にdouble型の数値データが入っていると
します。
 フォームにdataGridViewを配置します。名前はデフォルトのまま
dataGridView1とします。自動的に出てくるメニューで列の追加を選び、
ヘッダーテキストをtestにして追加を押します。そして閉じます。
次に、Form1.Load()で

dataGridView1.Rows.Add(test);

と書くと、ここで

error C2228: '.Rows' の左側はクラス、構造体、共用体でなければな
りません

とエラーが出てしまいます。どのようにすればよろしいのでしょうか。
記してあること以外は、全てデフォルト設定になっています。
243デフォルトの名無しさん:2009/12/13(日) 14:41:40
>>242
dataGridView1->Rows->Add(test);
244デフォルトの名無しさん:2009/12/14(月) 13:31:30
初心者です教えてください。
LinuxでC言語であるプログラムを作り、その途中に「scanf("%d",&a);」
というのをいれて、プログラムをそこで一度ストップさせ、
なにか入力があったときに開始する といったようなものを作りました。(説明下手ですみません)
VCではコマンドラインがありませんが、同じようにできますか??
245デフォルトの名無しさん:2009/12/14(月) 13:36:33
できるよ
Win32コンソールアプリケーションで作ればいい
246デフォルトの名無しさん:2009/12/14(月) 13:59:53
ありがとうございます

板違いかもしれませんが、VCで作ったプログラムを
matlabでmexして動かそうと思っているのですが、コンソールアプリケーションをmexしたらできますか?
247デフォルトの名無しさん:2009/12/14(月) 14:09:14
すみません 246の者です
日本語が意味不明な気がしたため、追記させていただきます。
244で書いたようなことをmatlabでmexして動かしたいと思っています。
それは可能ですか?
248デフォルトの名無しさん:2009/12/14(月) 14:23:57
わからんけどmatlabとかmexとかVisualStudioでググるとそれらしきことを書いたとこはあるみたいだが
249デフォルトの名無しさん:2009/12/14(月) 17:46:35
リソースエディタというのは無料では使えないんでしょうか?
vc++2008eeを使ってるんですがどこを探しても見つからないもんで・・・
250デフォルトの名無しさん:2009/12/14(月) 17:47:52
VisualStudio付属のリソースエディタはStandard以上、EEには無い。
ただし、リソースコンパイラ等は付属しているので、テキストでrcファイルを書くか、
外部のリソースエディタを使って組み込むことは可能。
251デフォルトの名無しさん:2009/12/14(月) 17:49:52
ありがとうございます
外部ツール導入してみます
252デフォルトの名無しさん:2009/12/15(火) 07:19:29
253デフォルトの名無しさん:2009/12/15(火) 23:25:00
すみません。VC++6.0で作成したソフトをVC2008でもう一度作成しようとすると
変更点とか多いですか?

友達がVC6.0で作ってくれたサンプルコードをくれたので、VC2008でやってみたいんですが。
もちろんMFCです。ちなみにVC2008は、StandardEditionをかおうかどうか迷っています。

容易にできるなら、買いたいと思っています。
254デフォルトの名無しさん:2009/12/16(水) 00:26:33
StandardEditionは2010で廃止だお
今買わないとPro買うしかなくなるお
255デフォルトの名無しさん:2009/12/16(水) 01:35:10
VC++2008EEでwindowsSDKを使っています。
createprocessで起動したアプリのウィンドウサイズを取得取得したくて調べていたら
EnumWindowsでプロセスIDの一致でウィンドウハンドルを取得するのが一般的みたいなので
ttp://akky.cjb.net/mfc/appclose.html
ここのサンプルを試していたのですが、うまく動いてくれません。
プロセスID一致のifの中にブレークポイントを置くと止まるので、一致までは行ってるみたいなんですがメモ帳が終了しません。
どこがおかしいのでしょうか。
256デフォルトの名無しさん:2009/12/16(水) 10:07:57
ブレークポイントで止まるなら、spy++とか実行してその時のウインドウハンドル比べたり
WM_CLOSEがたしかに投げられてるか調べてみては。
257デフォルトの名無しさん:2009/12/16(水) 10:19:15
サンプルは説明を簡素化するのにメモ帳使ってるだけで
きちんとデバッグしたかったら自分で作ったプログラム使えばいい。
258デフォルトの名無しさん:2009/12/16(水) 15:27:16
>>255

そこ、MFC使ってるじゃん。

あなたは、MFCのついてないExpressEditionだから、そのサンプルのままじゃ動かないでしょう。
259デフォルトの名無しさん:2009/12/16(水) 15:33:48
まあちょっとやってみたけど(Afx)MessageBoxの変更でEEで動かしたよ
CreateProcessの第2引数はリテラルじゃダメで変数にしたけどな。
ちゃんとメモ帳起動して終了した。
260デフォルトの名無しさん:2009/12/16(水) 15:58:46
>>255

これを追加 #include <windows.h> の下の行に追加
   ↓
#include <tchar.h>


以下の箇所を書き換え

AfxMessageBox(_T("メモ帳を終了させます。"));
      ↓
MessageBox(NULL, _T("メモ帳を終了させます。"), "メッセージボックス", MB_OK);

if(AfxMessageBox(_T("強制終了させますか?"), MB_YESNO) == IDYES)
      ↓
if(MessageBox( NULL, _T("強制終了させますか?"), "メッセージボックス", MB_YESNO ) == IDYES)


261デフォルトの名無しさん:2009/12/16(水) 16:24:33
質問者はブレークポイントで止まると書いてるんだし、
実行とメモ帳起動まではうまくいってるとわかるだろう
262デフォルトの名無しさん:2009/12/16(水) 18:28:45
ソース貼れよ
263デフォルトの名無しさん:2009/12/16(水) 18:53:29
VC++2008EEで、CrossWalkSDK(3DCGソフト間のデータ
コンバータ用のSDK)を勉強しているのですが、SDK内の
ヘッダのクラスの定義部分でエラーが出てしまいます。
===================================================
#include "SIBCNode.h"
#include "SIBCString.h"

//エラーの出る部分
class XSIEXPORT CdotXSIParam : public CSIBCNode
{
 public:
CdotXSIParam(); // Default constructor.
 //-- 以下メンバ関数が続く ---------------
};

//--- Global Functions ----------------------
XSIEXPORT CdotXSIParam* CreatedotXSIParam();
XSIEXPORT void AllocateLocalXSIArray(SI_TinyVariant*, SI_Long);

<エラーの内容>
error C2470: 'CdotXSIParam' : 関数定義のようですが
パラメータリストがありません。外見上の本体をスキップします。
===================================================
CdotXSIParamがクラス名である事は分かるのですが、
エラーの元になっているクラス名の前やグローバル関数の
戻り値の前にある「XSIEXPORT」の部分の意味が分かりません。

こういう書き方は自分の持っているC++の本(独習C++)では
載っていないので推測なのですが、VisualC++で設定される機能
なのでしょうか? よろしくお願いいたします。
264デフォルトの名無しさん:2009/12/16(水) 19:06:28
XSIEXPORTに右クリックで定義を表示させれば出てくることもあるけど
たぶん#defineで関数規約か__declspec(・・・)とか書いてあるんだと思うよ
XSIの文字で固有のものだってわかるだろう
265デフォルトの名無しさん:2009/12/16(水) 19:35:31
クラス宣言の前に呼び出し規約っぽい定義はあんま知らんな、クラス宣言が関数に思われてるし
定義XSIEXPORTの中身がわからんとなんともいえんが 他のファイルの後にincludeしなきゃならんとかか
266263:2009/12/16(水) 19:51:57
>>264さん、>>265さん、ありがとうございます。
仰るとおりファイル内を検索してみると

#ifndef XSIEXPORT
# define XSIEXPORT __declspec(dllexport)
#endif

という記述が見つかり、VC++でプリプロセッサや
追加の依存ファイル等をいろいろ設定していたら無事に
コンパイルできるようになりました。
declspec等の呼び出し規約キーワードというものがあるのも
知りませんでした…orz
267デフォルトの名無しさん:2009/12/16(水) 23:17:01
255です。
レスありがとうございました。
今までWM_CREATE内にサンプルをコピペして実行していたのですが
ボタンを作って実行したら正常に動きました。
ttp://www.dotup.org/uploda/www.dotup.org464900.cpp




268デフォルトの名無しさん:2009/12/16(水) 23:20:30
そういうオチだったのか・・・・・・ ゴクリ 予想できなかった。。。。
269デフォルトの名無しさん:2009/12/17(木) 01:27:01
だれか、漏れに最新版のVisualStudioを寄付してほしいお。

寄付してくれたら、ひまだからご希望のソフトをつくってあげるお。
270デフォルトの名無しさん:2009/12/17(木) 01:29:06
最新版のVisualStudioが当たるプレゼントコーナーとかどこかにないかお?

MFCがいるから、StandardEdition以上だお( ^ω^)
271デフォルトの名無しさん:2009/12/17(木) 09:53:04
評価版の有効期限を延ばす方法
ネットで知ったのですが、評価版の有効期限を延ばす方法が存在します。実際にやってみたのですが、うまくいきました。
あまりおおっぴらにできることではないので内緒です。でもちょっと調べれば判るとおもいます。
どうしても判らない人は、Express Editionで我慢しましょう。
272デフォルトの名無しさん:2009/12/17(木) 15:39:14
Visual Studio2008 Standard EditionではExpress Editionでは出来なかった、.NET無しでのフォームアプリケーションの視覚開発できますか?
273デフォルトの名無しさん:2009/12/17(木) 17:03:28
フォームは.net
274デフォルトの名無しさん:2009/12/17(木) 17:17:16
フォームを使わない、リソースエディタでのダイアログやMFCのFormViewということなら可能
275デフォルトの名無しさん:2009/12/17(木) 22:31:20
Expressでもできるけどね
276デフォルトの名無しさん:2009/12/18(金) 07:58:44
SDKなら無料で配布してたよね
277デフォルトの名無しさん:2009/12/19(土) 16:44:00
俺のチンポも無料で配布してんだけど・・・なかなか
278デフォルトの名無しさん:2009/12/19(土) 17:45:13
>>277
なかなか人柱になってくれる人がいないわけね。
279デフォルトの名無しさん:2009/12/21(月) 06:02:43
プログラム以前の質問なんですが
新規作成からプロジェクトを選んでCLR→空のCLRプロジェクト
プロジェクト名を入力し、ソリューションのディレクトリ作成にチェックを入れてOKを押すと
画面左側にソースファイルやヘッダーファイルなどのソリューションのディレクトリが表示されるはずなんですが
何をしてもディレクトリが表示されません、そのおかげでソースファイルを右クリック→追加新しい項目からcppファイルを追加したいのにそれができません…
何か解決方法はありませんでしょうか?
visual c++ 2008 express editionを使用していて、過去に同じことをやったらソースファイルが出ていたはずなんですが今は出てこないんです…
280デフォルトの名無しさん:2009/12/21(月) 06:12:44
279です
すみません、自己解決できました
バーのプロジェクト→新しい項目の追加からcppファイルを追加し動作させることができました
スレ汚し申し訳ありませんでした
281デフォルトの名無しさん:2009/12/21(月) 07:46:21
ドンマイ
282デフォルトの名無しさん:2009/12/23(水) 23:00:51
VC++2005を使ってスレッドを使うプログラムを作成しています。
AfxBeginThread()を用いてスレッドにウィンドウハンドルとデータを与え、
計算を行った後メッセージを贈ってスレッドの作成元に計算結果を送信するようにしているのですが、
実行すると2〜3回に1回の頻度で

「一般エラー:ウィンドウハンドルが無効です」

とエラーメッセージが表示されます。
実行するたびに出るわけではないので、どこでエラーが出ているのかが良く分からないのですが、
問題としてはどういったことが考えられるのでしょうか。
283デフォルトの名無しさん:2009/12/23(水) 23:08:02
一番単純でありがちなのが、スレッドのパラメータとして渡すのがメインスレッドのローカル変数で、サブスレッドが値を読む前に破棄されているということ。
284デフォルトの名無しさん:2009/12/24(木) 19:28:39
>>282
メインスレッドのほうが見に行かないと
285282:2009/12/24(木) 21:39:05
色々レスありがとうございます。

>>283
調べてみましたが、どうも問題は変数部分ではなくて
計算を行うスレッド内で動かしていたプログレスバーの部分だったようでした。
最初の書き込みで一切触れていない部分ですみません。
>>284
メインのほうが見に行くということは、計算のスレッド部分の関数を呼び出すなりして
値を取り出すということでしょうか

まだ上手く動作できるようになっていませんので、まだ何か思いつく所があったらお願いします。
286デフォルトの名無しさん:2009/12/30(水) 00:37:50
age
287デフォルトの名無しさん:2009/12/31(木) 23:07:51
VC++2008を使ってCの勉強をしている者なんですが、最初はCの入門書籍・入門サイトを見ながら、
「ソリューションの中のプロジェクトにソースファイル(cppファイル)を追加して、コード
(例えばHalloWorldの練習)を書く。
書けたらデバッグなしで開始→上手くいったらHalloWorldの練習コードを全部消して次のコード
(例えばscanfの練習)を書く→上手くいったらscanfの練習コードを全部消して次のコード……(以下繰り返し)」
のような手順で勉強していました。

でも最近になって1つのソリューションの中に複数のプロジェクトを作れるのを知って、試しに

ソリューション
L__プロジェクト1
  L__HalloWorldの練習.cpp
L__プロジェクト2
  L__scanfの練習.cpp

のような構成にしてみました。
それでこれを「デバッグなしで開始」してみると、いつもHalloWorldしか実行されません。
scanfの練習.cppを真ん中のエディタ画面に出していても、HalloWorldが実行されます。
ソリューションの中の一番上のプロジェクト以外を実行したい場合はどうすればよいのでしょうか?

自分で色々試してる最中に、メニューに「プロジェクトのビルド順序」というのを見つけたので
「プロジェクトの依存関係」というところをいじって「ビルドの順序」タブで
scanfの練習.cppが一番上に来るようにしてみたのですが、上手くいきませんでした。

見当違いな質問をしていたらすみません……。
288デフォルトの名無しさん:2009/12/31(木) 23:14:31
>>287
ソリューションエクスプローラーで、プロジェクトを右クリックして
「スタートアッププロジェクトに設定」を選ぶ。
289287:2009/12/31(木) 23:22:38
>>288
できました! ありがとうございます!!
「スタートアッププロジェクトに設定」って、てっきり「VC++を起動した時に、勝手に
そのプロジェクトを開いてくれる」(ブラウザのスタートページに指定みたいな)機能」だと
思い込んでました。
これで前の練習用のコードを見返すのも楽になりそうです、ありがとうございました!!
290デフォルトの名無しさん:2009/12/31(木) 23:52:43
入門レベルでそういう方法は非常に珍しいと思う。
291デフォルトの名無しさん:2010/01/03(日) 23:39:44
フォームのスクリーンキャプチャをしたくて、下記のように書いたのですが、
コンパイルは通るのに、肝心の中身はキャプチャされていなくて真っ黒になってしまうのですが、
どうしてでしょうか?

いろいろ試したのですが、どうしても解決できないので、解決策を教えて下さい。よろしくお願いします。


Graphics^ g1 = this->CreateGraphics();

Bitmap^ img = gcnew Bitmap(this->Width, this->Height, g1);
Graphics^ g2 = Graphics::FromImage(img);

IntPtr dc1 = g1->GetHdc();
IntPtr dc2 = g2->GetHdc();
HDC hDC1 = static_cast<HDC>(dc1.ToPointer());
HDC hDC2 = static_cast<HDC>(dc2.ToPointer());

BitBlt(hDC2, 0, 0, img->Width, img->Height, hDC1, 0, 0, SRCCOPY);
292デフォルトの名無しさん:2010/01/04(月) 21:18:20
ノートPCでVisualStudio2008を使いたいのですが、推奨解像度はどれくらいでしょうか?
実用的な解像度を教えていただけると助かります。
293デフォルトの名無しさん:2010/01/04(月) 21:54:50
可能な限り大きいやつを。
XGAあれば何とか使えるが、高ければ高いほど能率上がる。
294デフォルトの名無しさん:2010/01/05(火) 17:20:47
CStringで躓いているのですが教えていただけないでしょうか?
下記のようなソースで構造体にCStringを使っているのですが
そこに値をセットしようとするとメモリアクセス違反に
なってしまいます。どうにも問題ないように見えるのですが
何か間違いがあるのでしょうか?

typedef struct _st {
 CString cstr;
} ST;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
 void *hoge = malloc(sizeof(ST));
 ST *st;
 st = (ST *)hoge;
 st->cstr = "";
}
295294:2010/01/05(火) 17:28:18
ごめんなさい。わかりました。
296デフォルトの名無しさん:2010/01/05(火) 22:40:20
敢えて言おう。mallocを使うのはお勧めしない
297デフォルトの名無しさん:2010/01/06(水) 03:56:35
>>291
DrawToBitmapはだめ?
298デフォルトの名無しさん:2010/01/06(水) 07:29:32
CStringについて教えてください。
Cstring buff = "hogehoge";
buff = buff.Left(4);
とするとbuffを4文字で切れますが、これだと無駄にメモリを
使ってしまうと思います。
char *buff[10];
strcpy(buff, "hogehoge");
buff[4] = '\0';
みたいにぶつ切りできないでしょうか?
299デフォルトの名無しさん:2010/01/06(水) 08:02:28
>>298
Truncateメンバ関数
300デフォルトの名無しさん:2010/01/06(水) 08:11:53
>>299
ひゃっほー
ありがとう!
301デフォルトの名無しさん:2010/01/06(水) 10:28:02
CStringからchar*への変換は下記のような方法があるようですが
このようにメモリをコピーする方法しかないでしょうか?
CString str = "test";
char *p = new char[str.GetLength()+1];
strcpy( p, str );
delete [] p;

char *p;
p = str.char_pointer();
みたいにできればありがたいのですが。

302デフォルトの名無しさん:2010/01/06(水) 10:35:14
303デフォルトの名無しさん:2010/01/06(水) 10:59:07
>>302
英語のリファレンスただ置くだけで回答だと思うなよ。てかCStringの日本語ドキュメントなかったっけ?

俺自身CStringあんまり使わないから仕様は詳しく知らないんだが、メンバ関数にoperator const char*()が存在してるなら

p = (char*)(const char*)str;

でいいんじゃないかと思った。
ただまぁせっかくCStringクラスを使っているんだから生のポインタなんて使わない処理にした方がいい気がするんだが。
304デフォルトの名無しさん:2010/01/06(水) 11:05:00
>>303
うひょー
天才すぎる
305デフォルトの名無しさん:2010/01/06(水) 11:15:02
>>303
いや、こいつ調べなさすぎだろ、と思って皮肉でURLだけおいたんだが。
306303:2010/01/06(水) 11:18:02
>>304
ごめん俺何か変なこと言ったかな。皮肉られてる気がするんだが
307デフォルトの名無しさん:2010/01/06(水) 11:20:11
>>306
いえ。とんでもない。助かりました。
VB厨なので調べるのも難しくorz
308303:2010/01/06(水) 11:30:00
リロードしてから書き込むべきだった

>>305
そういうことかスマソ

>>307
ただの被害妄想だったか
参考までに今調べたら「CString ポインタ 変換」でまんまの解決策があったとだけ言っておこう
309デフォルトの名無しさん:2010/01/06(水) 12:27:50
>>303
これならコピーした方がいいだろ。
内部へのポインタをconstはずして
使うとか、トラブルのもと。
310デフォルトの名無しさん:2010/01/06(水) 12:28:54
>>307
const char* ではなく char* に変換するのが「書き換えたいから」という目的なら、
p = (char*)(const char*)str;
は危険。

書き換えないのなら
char* p ではなく const char* p にすればよいだけ。
311デフォルトの名無しさん:2010/01/06(水) 17:51:37
>>297
助かりました。大変ありがとうございました。
312デフォルトの名無しさん:2010/01/06(水) 18:22:14
298の
buff = buff.Left(4);
これってまずくないの?
(298はTruncateを使うようにしたみたいなんで分岐した話として)
313デフォルトの名無しさん:2010/01/06(水) 22:15:04
>buff = buff.Left(4);
>これってまずくないの?

なぜまずいと思ったのか言ってごらん。
314デフォルトの名無しさん:2010/01/06(水) 22:19:01
>>312
それは別に問題ないんじゃないの?

Truncateって知らんからMSDN見てみたけど、載ってない。
なんでだ。
http://msdn.microsoft.com/ja-jp/library/abzc9989(VS.80).aspx
315デフォルトの名無しさん:2010/01/06(水) 23:03:24
教えてください。

VC2003 でアンマネージなプロジェクトに一部マネージを混ぜて使ってます。
(ファイルごとのプロパティで /clr をつけてます)

ここで、アンマネージの関数(クラスの静的メソッド)の引数にマネージオブジェクト
(System::Cllectios::ArrayListなど)をつけて普通に呼び出す分には問題なく実行できます。
が、この関数を関数ポインタ経由で呼ぼうとすると例外が発生して不正終了します。
以下のようなコトをしたいのです。
アンマネージの関数ポインタ?がマネージオブジェクトの引数に対応してないのでしょうか。

void func( System::Collections::ArrayList* list )
{}

void hoge()
{
System::Collections::ArrayList* list = __gc new System::Collections::ArrayList();
void(*test)( System::Collections::ArrayList* ) = func;

func( list ); // ok
(*test)( list ); // ng
}
316デフォルトの名無しさん:2010/01/07(木) 01:27:25
>>314
CStringTの基底クラス、CSimpleStringのメンバ。
http://msdn.microsoft.com/ja-jp/library/8fx6d2h7.aspx

>>315
<gcroot.h>をインクルードして、funcとtestの型をgcroot<Systaem::Collections::ArrayList*>にしたらきちんと動いているようだった。
ちなみに、VC++ 2008では元のコードのままで動いた。おそらく2005でもそうだと思う。

> アンマネージの関数ポインタ?がマネージオブジェクトの引数に対応してないのでしょうか。
これが原因だと思う。gcroot<>自体はアンマネージ型で、
アンマネージクラスにマネージクラスオブジェクトを置きたいなどというときに使える。
317デフォルトの名無しさん:2010/01/07(木) 09:27:14
CStringみたいな途中でサイズ変る前提のやつは
ブロック単位でメモリ管理してるから
ちまちまバイト単位でメモリ節約しても何の意味もなかったと思う。
318デフォルトの名無しさん:2010/01/07(木) 11:42:49
C++でdllを作成しています。
他のdllをリソースとして、自分が今作成しているdllに組み込むことは可能でしょうか?

具体的には、SQLiteのdll、sqlite3.dllを自分が作成しているdllにリソースとして組み込みたいと思っています。
319デフォルトの名無しさん:2010/01/07(木) 12:09:51
組み込まなくても使えると思うけど、ばれないようにパクリたいということ?
320318 :2010/01/07(木) 12:38:38
>>319
返信ありがとうございます。簡単にいうとそうです。
sqlite3.dllを使用していることをバレるのが困るというより、
sqlite3.dllを使用しているので SQLite形式のファイルをどこかで使かわれていることが、簡単にばれるのが少し困るので
この方法を考えています。バイナリで見られたらすぐにわかりますが(笑

リソースとしてdllを読み込む方法を知らなかったので質問しました。 可能ということでよろしいでしょうか?


321デフォルトの名無しさん:2010/01/07(木) 12:40:41
sqliteってソースあるね。あれを取り込んだら?
322319:2010/01/07(木) 15:28:18
>>321

・・・オープンソースがあることを知りませんでした・・・
ありがとうございます。 それを使ってみますm(_ _)m
323312:2010/01/07(木) 16:13:18
>>313,314
i=i++; と似た匂いを感じてしまったんだが、考え直してみたら i=i+1; と同じか。
Left()はconstだからいいんだな。
324315:2010/01/07(木) 21:25:27
>>316
それで出来ました。
すごく助かりました。これで似たようなコードをあちこちに置かなくてすみます。
ありがとうございます。
325デフォルトの名無しさん:2010/01/08(金) 22:14:12
回転寿司でお稲荷さんが回ってなかったから注文したら、
渡されるところで隣に座ってた人に横からお稲荷さん取られた
それは私のお稲荷さんだ!って言ったら反対側に座ってた人がイクラを噴出した
私も一瞬後で気づいて、たぶん顔真っ赤になってたろうけど全部食べた
326デフォルトの名無しさん:2010/01/09(土) 20:11:17
みなさんはCStringを使わないとのことですが
何を使っているのでしょうか?
327デフォルトの名無しさん:2010/01/09(土) 20:34:35
>>326
いや、ふつーに使ってるよ。
使わないって半可通だろ?
328デフォルトの名無しさん:2010/01/09(土) 22:06:28
へー
329デフォルトの名無しさん:2010/01/09(土) 22:20:25
std::string
330デフォルトの名無しさん:2010/01/10(日) 06:55:30
>>327
Windowsプログラマはそうだろうけど。

・・・ま、ここはVCのスレだし、いいのか・
331デフォルトの名無しさん:2010/01/10(日) 18:15:33
解決法を教えてください。
MS VisualC++2008でcvBlobを使おうとしたのですが、エラーがでてビルドが完了しません。(下記にエラーメッセージ)
OpenCV1.0は既にインストールしてあり、PC上での動作は確認してあります。
OSはWindows XP SP3です。
足りない情報がありましたら教えてください。
よろしくお願いします。

////////エラーメッセージ//////////

\cvblob.cpp(27) : fatal error C1083: include ファイルを開けません。'opencv/cv.h': No such file or directory
opencv\cv\include\cvcompat.h(784) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
test.cpp(3) : fatal error C1083: include ファイルを開けません。'cvblob.h': No such file or directory
cvlabel.cpp(27) : fatal error C1083: include ファイルを開けません。'opencv/cv.h': No such file or directory
332デフォルトの名無しさん:2010/01/10(日) 18:40:11
文字コードはとりあえずおいといて、
インクルードパスの設定の仕方をだな
333デフォルトの名無しさん:2010/01/11(月) 03:13:23
>332
cvBlobは使いたいプロジェクトのディレクトリに入れるだけでOK…
という話を見たのですが、インクルードパスの設定が必要になるんですね。
もう少し格闘してきます。
アドバイスありがとうございました!
334デフォルトの名無しさん:2010/01/11(月) 04:52:44
全くの初心者ですが教えてください。

まず適当に設置したボタンをクリックするとエディットボックス1(m_edit1)に表示されている文字列のうち、マウスでドラッグして選択した部分のみを別のエディットボックス2(m_edit2)に表示させたいです。
次にm_edit2に表示された文字列を取得してgoogle検索やWikipedia検索をさせるボタンを配置したいです。

わからないことは以下の二つ
1.選択文字列を取得して、新たに定義したCStringにコピーする方法
2.任意の文字をgoogle、wikipedia検索させる方法

2に関してはVC++じゃないような気もするのですが、教えてください…
335334:2010/01/11(月) 07:35:08
すみません自己解決しました
336デフォルトの名無しさん:2010/01/11(月) 13:25:04
VC++2008EEでCTRL+ALT+DLLを無効にするGINAを作成したく

http://7ujm.net/C++/GINADLL.html

上記にあるサンプルをビルドしてXP pro sp3に入れてみましたが
「MSGINA.DLLを読み込めませんでした」と出てログオンできません。
初心者でソース自体に不備があるのか、ビルドの仕方が悪いのか判断できない状況です。

アドバイスお願いします




337デフォルトの名無しさん:2010/01/11(月) 13:42:32
そんなこともわからない人が手を出すのは危険だと思うが
ビルドした時とインストールしたものは同じ環境?
まずは普通にDLL作って普通に動作させるとこからやってみては
338デフォルトの名無しさん:2010/01/11(月) 13:43:26
もし違う環境ならDLLの前にEXEもやってみて
339336:2010/01/11(月) 14:38:41
>>337
アドバイスありがとうございます。

インストールしたものは別環境です。
たしかに仮に動かせたとしても今の私では危険ですね。

VB厨なので敷居は高く感じますが、ものぐさせずに一からやってみます。
340デフォルトの名無しさん:2010/01/11(月) 14:58:11
環境違うのなら、まずはReleaseビルドとランタイムライブラリ関連かな
とりあえずデフォルトが/MDなのでredist入れるか/MTにするかかな。
341336:2010/01/11(月) 16:17:00
>>340
/MTに変更して動作しました。
ありがとうございました!

342デフォルトの名無しさん:2010/01/12(火) 08:21:46
exeを下記のような動きにする場合はどのようにすればいいのでしょうか

・exe実行時の引数に何も指定しなかった場合はFormを表示してwindowsアプリとして振舞う
・exe実行時の引数に特定のコマンドが指定されていた場合はFormを表示せず
動作を実行したのち終了

開発環境はvc++ 2008 Express Edition SP1です

343デフォルトの名無しさん:2010/01/12(火) 08:40:11
>>342
lpCmdLineに文字列があるかどうかで分岐させればいいんじゃないの?
344デフォルトの名無しさん:2010/01/12(火) 09:37:25
>>343
ありがとうございます。
できました

もしかして・・・vc++ 2008 Express Edition SP1の場合CLRを使わないと
Formなどを使うことはできませんか?
345デフォルトの名無しさん:2010/01/12(火) 09:42:59
>>344
Express Editionにはリソースエディタついてないからな
346デフォルトの名無しさん:2010/01/12(火) 10:12:25
Formは.net専用
347デフォルトの名無しさん:2010/01/12(火) 15:04:44
>>344
窓アプリ作れるかって事ならできるよ
やりかたは↓でわかるよ
http://www.kumei.ne.jp/c_lang/index_sdk.html
348デフォルトの名無しさん:2010/01/12(火) 20:05:27
今日windows7が家に届いて、c++を本格的に勉強しようと思っています
おすすめのコンパイラってあります?
349デフォルトの名無しさん:2010/01/12(火) 20:13:00
>>348
Visual C++ 2008 Express Edition
350デフォルトの名無しさん:2010/01/12(火) 20:42:11
>>348
GNU C++コンパイラ (G++)
351デフォルトの名無しさん:2010/01/12(火) 21:25:37
char a = "no";
string s;
s = "aho"+a+"sakata";

↑はエラー出るけど、こんな感じの書き方はできませんか?
+= や copy使うとパッと見すごく分かりづらいです。
char aをstring型で複製するのも嫌です。
352デフォルトの名無しさん:2010/01/12(火) 21:34:21
char a = "no";

この時点でなぁ
353デフォルトの名無しさん:2010/01/12(火) 21:43:01
char* a = "no";
std::string s;
s = std::string("aho")+a+"sakata";

こんなんで?
354デフォルトの名無しさん:2010/01/12(火) 21:51:29
>>353
ありがとうございます
まさにこんなのです
355デフォルトの名無しさん:2010/01/14(木) 20:46:30
if(a = b + c){ }
とやったら、b + c != 0の場合にif文の中に入るんでしょうか?
356デフォルトの名無しさん:2010/01/14(木) 21:49:01
そうだよ。
357デフォルトの名無しさん:2010/01/14(木) 22:41:59
>>355
まあa, b, cは組み込み型だよね?
そうじゃないとしたら+や=のオーバーロード次第でなんとでもなる。
358デフォルトの名無しさん:2010/01/18(月) 11:07:28
教えてください。

VisualC++6.0で他人が作ったものを修正することになりました。
現在はVisualC++2005しかないため、6.0のdspファイルを開き2005用に変換しました。

プロジェクト→プロパティ→MFCの使用で、
「スタティックライブラリで使用」を選択し、ビルドしたところ、
下記のようなエラーが出てしまいます。

1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に LIBCMTD.lib(dbgdel.obj) で定義されています。
1>nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) は既に LIBCMTD.lib(delete2.obj) で定義されています。
1>.\Debug/lc8_kensa.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

「共有DLLで使用する」を選択すれば、ビルドできます。
(もちろん警告は山のようにでますが・・・)

原因と解決方法を教えて頂けますか?


また、取り急ぎ、「共有DLLを使用する」でビルドしたアプリケーションを配布し、
実行したところ、「例外 不明なソフトウェア例外(0xc0000409)がアプリケーションの0x00411741で発生しました」
と表示され、エラーとなってしまいます。

この原因は「スタックライブラリで使用」にしてないので、起こったと思っているのですが、
違いますか?

よろしくお願い致します。
359デフォルトの名無しさん:2010/01/18(月) 12:50:00
>原因と解決方法を教えて頂けますか?

エラーも警告も無視せずに対処しよう
360デフォルトの名無しさん:2010/01/18(月) 13:33:08
>エラーも警告も無視せずに対処しよう

対処したいのですが、原因がわからず、対処方法がわかりません。
教えて頂けないでしょうか?
警告に関しては原因がわかっておりますので、対処したいと思います。
361デフォルトの名無しさん:2010/01/18(月) 13:52:06
元のやつの設定がどうなってるかわからんが、
プロジェクトのプロパティのコード生成のランタイムライブラリのあたり弄ってごらん
362デフォルトの名無しさん:2010/01/18(月) 14:47:34
仕事の手伝いはお金を払ってもらわないとな
363デフォルトの名無しさん:2010/01/18(月) 17:25:33
>>361
ランタイムライブラリを適当にいじってみましたが、残念ながらうまくいきませんでした。

>>362
すいません。仕事じゃないです。
私事です。すいません。。。
364デフォルトの名無しさん:2010/01/18(月) 17:34:39
自分で作ったやつじゃなくて他人が作ったやつをいじりたいとか
正直ソフト板あたりでやってほしいと思う、
365デフォルトの名無しさん:2010/01/18(月) 17:41:42
>>363
とりあえず、何をどうしたか全部書け。
まずはビルドするとき、クリーン→リビルドでやれ
366デフォルトの名無しさん:2010/01/18(月) 18:03:25
>>364
すいません。ソフト板っていうのがあるんですか!?
初心者でよく知らず、申し訳ありません。

>>365
まず、6.0で作成されたプロジェクトをフォルダごと、自分のプロジェクトフォルダに移しました。
\\My Documents\Visual Studio 2005\Projects\***
という具合です。
そこで、dspファイルを開くと、

プロジェクト '***.dsp' は現在の Visual C++ プロジェクト形式に変換されなければなりません。変換した後、このプロジェクトを旧バージョンの Visual Studio で編集することはできません。
変換してこのプロジェクトを開きますか?

と出てくるので、「はい」を選択して開きました。
これの「MFCの使用」を「スタティックライブラリ」に選択すると、
>>358のようなエラーが出てしまいます。。。

クリーン→リビルドでやるので正しいやり方なんですね!
これまではビルドしかしてませんでした。。。
勉強になります。
ありがとうございます!
367デフォルトの名無しさん:2010/01/18(月) 18:09:29
そのソースをうpすればコンパイルしてやらんこともないよ
368デフォルトの名無しさん:2010/01/18(月) 18:29:14
正しいやり方つーか、、、設定変えたら状況によっては必要。
これではまるやつも多いので・・・
369デフォルトの名無しさん:2010/01/18(月) 19:08:27
それよりVS2010と.NET4で開発すると中途半端なのを何とかしてくれ。
WCFやEntityFramework4を使ったプロジェクトで作成しても、開発環境内でしか動作しない。
IISでホストできない構成ファイルとかアセンブリ参照とか、、、もう鬱になる。
370デフォルトの名無しさん:2010/01/19(火) 05:16:27
完全に初心者ですが、困っています。
助言よろしくお願いしますorz

VC++6.0にて、
あるプログラムの閾値をスライダーで調整できるようにしろ、との実習が出たのですが、
ResourceViewタグのDialogでウィンドウ内にスライダーを作ったところでつまずいています。

スライダーとプログラムはどうすれば関連付けられるのでしょうか。
371デフォルトの名無しさん:2010/01/19(火) 09:22:15
ボタン、テキストボックス、その他コントロールと同じ
372デフォルトの名無しさん:2010/01/19(火) 10:05:34
VS初心者じゃなくプログラミング初心者でVS等無料ツールを使いつつ学習できるサイトありますか?
373358:2010/01/19(火) 11:37:32
スタティックでビルドできました。

参照URL:http://support.microsoft.com/kb/148652/ja

プロジェクト→プロパティ→構成プロパティ→リンカ→入力を選択
「特定のライブラリの無視」に Nafxcwd.lib Libcmtd.lib を入力
「追加の依存ファイル」にも Nafxcw.lib Libcmt.lib を入力

で、ビルド成功しました!
皆様、アドバイスありがとうございました!

しかーし!!
「例外 不明なソフトウェア例外(0xc0000409)がアプリケーションの0x00411741で発生しました」
と表示され、エラーとなってしまいます。
ググってみても、SPのバージョンが低いとかセキュリティの問題と出てきますが、
他に考えられる原因はありますか?


374デフォルトの名無しさん:2010/01/19(火) 11:58:10
いろいろ間違ってるw
375373:2010/01/19(火) 13:51:25
>>374
いろいろって何ですか?
教えてくらはい(>_<)
376デフォルトの名無しさん:2010/01/19(火) 14:00:44
>>375
いやです(>_<)w
377デフォルトの名無しさん:2010/01/19(火) 20:09:19
ものすごく初心者なのでサルにもわかるようにお願いします
ドキュメントにhellowprld.cppといファイル名でテキストで
#include <iostream>
using namespace std;

int main()
{
cout << "Hello world!" << endl;

return 0;
}
と入力、helloworld.cppという名前で保存
Visual C++ 2008 Express Editionのコマンドプロントを開いて
[cd \]と入力さらに[cd cpp]とうつと指定されたパスが見つかりませんになります
なぜでしょうか?

378デフォルトの名無しさん:2010/01/19(火) 20:23:18
保存したところにcdしろよ
379デフォルトの名無しさん:2010/01/19(火) 20:25:26
[cd cpp]と打つ前に、[mkdir cpp]と打ってみたらどうですか。
380デフォルトの名無しさん:2010/01/20(水) 12:01:19
>[cd \]と入力さらに[cd cpp]とうつと指定されたパスが見つかりませんになります
>なぜでしょうか?

ドライブが違うんだろ
381デフォルトの名無しさん:2010/01/20(水) 12:25:25
いやいやいやいや、そもそも
>helloworld.cppという名前で保存
この保存場所さえ把握してないのではw
382デフォルトの名無しさん:2010/01/20(水) 12:27:26
>>372
プログラムを学習できるサイトならググればいくらでもあるよ。
VisualStudioの使い方なら↓を参照。
http://www.atmarkit.co.jp/fdotnet/easyvs2008/index/index.html
http://msdn.microsoft.com/ja-jp/library/h8w79z10%28VS.80%29.aspx
383デフォルトの名無しさん:2010/01/20(水) 12:28:30
>>372
プログラムを学習できるサイトならググればいくらでもあるよ。
VisualStudioの使い方なら↓を参照。
http://www.atmarkit.co.jp/fdotnet/easyvs2008/index/index.html
http://msdn.microsoft.com/ja-jp/library/h8w79z10%28VS.80%29.aspx
384デフォルトの名無しさん:2010/01/25(月) 11:49:20
僕のVisual C++では#pragma region hoge が働いてくれません。
2005からの機能らしいですけど、2005のアカデミックバージョンは対象外ですか。
関数の定義など、他の部分でのコードの折り畳みはできるんですが……。
385デフォルトの名無しさん:2010/01/25(月) 16:39:39
VC2008 Expressを使ってみたのですが、
Windowsフォームアプリケーションで作るとC++/CLIになるのですね?
CLIを使用しないで、フォームを使用したアプリケーションを作成するには、どうしたら良いのでしょうか?
386デフォルトの名無しさん:2010/01/25(月) 16:45:00
無理。フォームは.NET Frameworkの一部
ダイアログリソースということなら、外部のリソースエディタ使って組み込むのはできる。
387デフォルトの名無しさん:2010/01/25(月) 16:59:28
>>385
std買ってMFC
388385:2010/01/25(月) 17:04:27
ありがとうございます。
C++/CLIでは.NET用のライブラリしか使えず、C++用のライブラリを使用したいのですが、
どうやって作成していいのか混乱してしまって・・・。

ダイアログソースで作成する場合、どのようなリソースエディタを使用すれば良いのでしょうか?
389デフォルトの名無しさん:2010/01/25(月) 17:30:51
>>384
自分もVS 2005のアカデミックで今試してみたけど、
#pragma region hoge 〜 #pragma endregionは使えているよ。
何か間違えていない?
390デフォルトの名無しさん:2010/01/25(月) 17:40:13
>>388
>>387がいいとは思うけど、リソースエディタでググれば2,3種類くらいに絞れると思うよ。
組み込むには、VC++EEに付属のrc.exeをビルドイベントとかで設定してやればいい
391385:2010/01/25(月) 18:03:01
>>387
>>390
ありがとうございます。
MFCがどんな物か、VS2010βを使用してみたのですが、MFCで作成しようとするとなんかややこしそうですね。

リソースエディタはresEditを使用している人が多そうですね。
http://www.hor-net.org/~vorga/freedev3vcee2.html
ここの説明わかりやすかったので、使ってみようと思います。
ありがとうございました。
392384:2010/01/25(月) 18:03:01
// main.cpp
#include <windows.h>
int function(int n) {
return n * 2;
}
#pragma region hoge
int WINAPI wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int) {
return func(0);
}
#pragma endregion

こういう単純なコードですら、働いてくれません。しかも、この場合だとwWinMainまで死にます。
このコードに間違いはありますか?
393デフォルトの名無しさん:2010/01/25(月) 18:38:36
デバッガのウォッチウィンドウでstd::vecterなどを見ると、単純にクラスメンバが表示されるのではなく、配列の要素数などが一目で分かる形で書かれているのですが、あれはどういう方法を使っているのですが?
394393:2010/01/25(月) 18:39:56
×vecter
○vector
恥ずかしい死にたい
395393:2010/01/25(月) 20:04:15
×使っているのですが
○使っているのですか

もう俺死んだ方がいい
396デフォルトの名無しさん:2010/01/25(月) 20:17:27
ちょっと訛っただけだろ?w
細けえことは気にすんな!
397デフォルトの名無しさん:2010/01/26(火) 00:54:54
VC2008ExpressEdition .Net環境でFormにスクロールバーを出して使おうとしています。
HorizontalScroll->Valueの値をスクロールイベントでいじっても0に戻ってしまいます。
回避する方法はないものでしょうか?

Formにはその他のコントロールは一切無し、したがってAutoScrollはFalseです。
Show時にHorizontalScrollをVisibleにしてファイルをドロップした段階でEnableにします。

デバッグ用に値を観察しているのですが、スクロールイベント終了時には値は正常なようです。
しかし再度イベントが発生した時にValueが0からやり直し、といった具合です。

主な目的は画像の貼り付けと表示です。
よろしくお願いします。
398デフォルトの名無しさん:2010/01/26(火) 09:51:24
やりかた間違ってんじゃないの
399デフォルトの名無しさん:2010/01/26(火) 22:19:11
VS 2005 SDI MFC です
現在View に表示されているテキストが、ファイルから読みこんだものか、
それ以外(コピペまたは、キーボードからの入力)を識別するAPI や方法があれば教えてもらえないでしょうか。
400デフォルトの名無しさん:2010/01/28(木) 04:53:40
ちょっと調べていて疑問に思ったんですが、
MSペイントのキャンバスサイズをアンカーポイント?でつかんでサイズを自由に変更できるようになっているんですが、
あの処理は一から自分で組まないといけないのでしょうか?
それとも設定するだけで簡単に組み込めるようなクラスなどがあるのでしょうか?
401デフォルトの名無しさん:2010/01/28(木) 20:02:24
Visual C++を初めて使っている者です。
私はC++でなく、C言語でプログラミングをしたいのですが、
どのように操作すればソースをコードできるのでしょうか。

教えて下さい。お願いします。
402デフォルトの名無しさん:2010/01/28(木) 20:07:37
>>401
.cっていう拡張子のファイルにソースを書いて開けばビルドできるんじゃなかった?
403401:2010/01/28(木) 20:11:24
VC++のデバッガの機能を使用するから、VC++上にコードかけって言うんです。
404デフォルトの名無しさん:2010/01/28(木) 20:52:34
ソリューションエクスプローラのプロパティ→C/C++→詳細→コンパイル言語の選択
でも指定できる。
プロジェクト全体でもファイル個別でも。
405デフォルトの名無しさん:2010/01/30(土) 22:55:41
VC++のデバッガを使うこととVC++上でコードを書くことはイコールにならんがな
{devenv,vcexpress} /debugexe hoge.exeでいいわけで
406デフォルトの名無しさん:2010/01/31(日) 13:35:27
独学でやってるなら入門書に書いてある通りにやればいいだけなんだが、
誰かに指示されてるならそいつに聞けよ。
407デフォルトの名無しさん:2010/02/02(火) 10:43:09
test
408デフォルトの名無しさん:2010/02/09(火) 00:39:19
スレ違いだったらすいません。

一週間くらい前からプログラミングに興味を持ち、C++2008をダウンロードして
やっているのですが、初めてのプログラミングはこのソフトからでいいのでしょうか?
ほかにもっとわかりやすいのがありました教えて欲しいのですが・・・
409デフォルトの名無しさん:2010/02/09(火) 01:46:52
とりあえずそれでいいっていうか「何を作りたいか」目的がはっきりしてた方が良い
「そのために何が必要か」ってアプローチが結果的に早道になると思う
410デフォルトの名無しさん:2010/02/09(火) 07:22:29
から、って言うけど別ので初めて後からVC++を使う気か?
どうせ使う気があるなら最初からVC++で慣れればいいじゃん
411デフォルトの名無しさん:2010/02/09(火) 10:58:36
>>408
悪いことはイワン
C#にしとけ
412デフォルトの名無しさん:2010/02/09(火) 19:08:19
>>408
いやC#はやめとけ
未来が暗い。
C++かC言語にしとけ。
413デフォルトの名無しさん:2010/02/09(火) 19:43:45
>>409
>>410
>>411
>>412
返答ありがとうございます。

このままC++を使うことにしました。
411さん、自分にはあまりC#はあってないと思ったのでC++にします。
せっかく返答していただいたのに申し訳ありません。

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

414デフォルトの名無しさん:2010/02/09(火) 19:52:47
でもよ、VC++2008を無料で落としても、
初心者がWinのプログラムを始めるには.Netしかないだろ?
そうするとCLIでやんなきゃならん。
だったらC#でいいんじゃないか?
415デフォルトの名無しさん:2010/02/09(火) 19:56:33
まずはプログラミングというものに慣れてからC++やらないと
挫折するよ
416412:2010/02/09(火) 20:27:48
C#はやめた方が良いだろう。

>>415の言うことは大抵は真実。
たまに才能があるヤツは別だけど、
いきなりやると嫌になるだけな気がするんだぜ。
417デフォルトの名無しさん:2010/02/10(水) 16:38:16
C#は便利すぎて他に移るのが苦痛になるから
何かと併用するならいいけど、それから始めるのはまずいかもね。
418デフォルトの名無しさん:2010/02/10(水) 18:54:35
> C#は便利すぎて他に移るのが苦痛になる
そうか?
C#よりP言語系のが便利だし、
就職できるかどうかの勝負なら便利言語以外も習得
するようになるだろう。

まああれだ、要するに
P言語(Python, Pascal, PHP)かC言語の
どっちか両極端からやるのがオススメ。
419デフォルトの名無しさん:2010/02/10(水) 18:55:48
VS2005で
あるスタティックライブラリの一部を利用するスタティックライブラリを作成したいのですが
どのように設定すればいいでしょうか
420デフォルトの名無しさん:2010/02/10(水) 19:25:08
>>418
Rubyをわすれないでください
421デフォルトの名無しさん:2010/02/10(水) 22:24:23
逆に1個もライブラリ使わずに作る方がむずかしい
422デフォルトの名無しさん:2010/02/11(木) 22:47:40
すみませんvc++2005を使っているのですが
スタティックライブラリのプロジェクトでcpp内でreplacement newが使えないのです
#include <new>も書いています.
どなたか解決法をご存じの方がいましたらよろしくお願いします
423デフォルトの名無しさん:2010/02/11(木) 23:12:37
replacement new??
424デフォルトの名無しさん:2010/02/11(木) 23:19:15
おっと re はいりません
すみません
425デフォルトの名無しさん:2010/02/11(木) 23:24:42
使えないってどういう状態を指してるのかわからないけど、変なヘッダとか入れてるんじゃないか。
10行くらいのnewヘッダだけ使った最小コードでも使えないの?
VC++2005Academicだとこんなコードで動くけどさ。
http://codepad.org/vqalFgq7

#include <new>
#include <iostream>
int main() {
const int ARRAYSIZE = 100;
int *parray = new int[ARRAYSIZE];
for (int i = 0; i < ARRAYSIZE; i++)
new (parray + i) int(i);
for (int i = 0; i < ARRAYSIZE; i++)
std::cout << parray[i] << std::endl;

delete [] parray;
return 0;
}
426デフォルトの名無しさん:2010/02/11(木) 23:34:43
自分の環境でもそのコードで動きました
チェックしてみます.ありがとうございます.
427デフォルトの名無しさん:2010/02/11(木) 23:40:58
ご指摘の通りメモリリーク検出用のライブラリを使用していました...
ありがとうございます
428デフォルトの名無しさん:2010/02/14(日) 11:18:49
今でもTCHARって使ったほうがいいのでしょうか?
今さら9x対応にするメリットもないし、書き方が冗長になるし
無駄な努力のように思えてきました。
皆さんの見解はどうですか?
429デフォルトの名無しさん:2010/02/14(日) 11:44:38
ライブラリとして提供するなら考慮してもいい
自分だけで完結するならいらんだろう
430デフォルトの名無しさん:2010/02/14(日) 12:29:54
なるほど、やはりその程度のものなんですね。
よくわかりました、ありがとうございます。
431デフォルトの名無しさん:2010/02/15(月) 03:26:16
VN.NET質問スレの方に誘導して戴きました。

Visual C++ .NET環境で下のようにIMEモードをNoControlにしているのですが、自作アプリケーションで
全角にした後に他のウィンドウにフォーカスを移して、また戻すと半角に戻ってしまっています。
ユーザーが設定した情報をフォーカスを変えても保持するようにするにはどうしたら良いのでしょうか?
よろしくお願いします。

this->ImeMode = System::Windows::Forms::ImeMode::NoControl;
432431:2010/02/15(月) 03:27:39
>>431訂正
×VN
○VBの間違いです
433デフォルトの名無しさん:2010/02/15(月) 10:53:36
>>431
あなたが使ってるのはC++ではなくC++/CLIという別の言語です。
C++/CLIには専用のスレもありますが、その手の質問はC++/CLIスレでも嫌われるので
C#かVB.NETの書き方を覚えてそっちで聞いた方がいいと思います。全く同じなので。
434431:2010/02/15(月) 16:38:22
>>433
回答ありがとうございます。このスレの方が良いと誘導されたのですが、
VB.NETスレに戻って質問した方が良いと言う事でしょうか?
435デフォルトの名無しさん:2010/02/15(月) 16:43:20
>>431
他のウィンドウのほうが悪さをしてる
436デフォルトの名無しさん:2010/02/15(月) 17:30:58
悪さっつーか、他でIMEコントロールされたら返ってきたときに変わるわな
437デフォルトの名無しさん:2010/02/15(月) 23:38:33
C++/CLIの罠はえげつないな
438デフォルトの名無しさん:2010/02/16(火) 09:40:00
中途半端にWinFormsのデザイナなんか付けるから勘違いするんだよな
相互運用専用の言語なのでそんなものが必要になるようなら使い方が間違ってる
439デフォルトの名無しさん:2010/02/17(水) 00:26:57
Win7 64bitでVC++2008EEを使ってるんですが、コード入力中に一瞬フリーズしたようになって1、2秒ですぐ入力を受け付けるようになるんですけど何ででしょうか
XP32bitを使っていたときも同じ症状があったんですけど、フリーズするタイミングがいつもバラバラでなにが原因なのかよくわからないんですけど・・・
440デフォルトの名無しさん:2010/02/17(水) 00:44:17
>>439
オートセーブみたいな機能([ツール]→[オプション]→[環境]→[自動バックアップ])
441デフォルトの名無しさん:2010/02/17(水) 01:25:07
>>440
レスありがとうございます。
保存のたびに一瞬止まってたんですね
442デフォルトの名無しさん:2010/02/17(水) 14:59:22
VisualC++2008にて、iTunesCOMWindowsSDKを使ってプログラミングしようと思っていて、
そのためにはiTunes 1.1 Type Libraryを参照に追加しなければならないようなのですが、
この参照に追加する方法が分かりません。
どのようにすれば設定できるのでしょうか?
443デフォルトの名無しさん:2010/02/17(水) 15:10:30
単にプロジェクトの参照に入れるだけで簡単に使えるのはC#かVBの話
444デフォルトの名無しさん:2010/02/17(水) 15:19:33
C++/CLIならプロジェクト右クリックで参照...から
C++なら付属のhとc組み込む
445442:2010/02/17(水) 15:30:05
C#での方法について解説したページを見てしまっていたようです。
どうもありがとうございました。
446デフォルトの名無しさん:2010/02/18(木) 21:55:56
Visual C++ 2008 ExpressEditionを使っているのですが、挿入メニューが
どうしても見つかりません。
リソースを挿入したいのですが…。
447デフォルトの名無しさん:2010/02/18(木) 22:22:40
エディションの制約によりリソースの編集は出来ないです
まあハック的手法を使えばリソース挿入できない事もないけどVCだけでは出来ない
448デフォルトの名無しさん:2010/02/19(金) 13:32:15
>>446
rcを手書きか、 RcEdit使いなはれ
449デフォルトの名無しさん:2010/02/19(金) 17:05:34
Visual C++ 2008 ExpressEditionでプログラムのデバッグをしていて、
途中でデバッグの停止をしたらコマンドプロンプトのウィンドウが残ったままになってしまいました。
このウィンドウを消したいのですが、×ボタンを押しても、右クリックで閉じるを選んでも消えてくれません。
どうすれば消すことが出来るのでしょうか。
450デフォルトの名無しさん:2010/02/19(金) 17:10:05
タスクマネージャで抹殺する
451デフォルトの名無しさん:2010/02/19(金) 17:19:26
タスクマネージャを見てもcmd.exeがありませんでした。
452デフォルトの名無しさん:2010/02/19(金) 17:20:51
待つ
453デフォルトの名無しさん:2010/02/19(金) 17:23:03
windowsって再起動したら大抵直るよね。
454デフォルトの名無しさん:2010/02/19(金) 17:36:52
再起動しようとしたところ、このコマンドプロンプトのウィンドウだけが残って再起動できなかったので、
仕方なく電源ボタン長押しで強制的に切ってきました。
455デフォルトの名無しさん:2010/02/19(金) 17:42:50
途中で送信してしまった・・・

パソコンを起動して、再びデバッグ中に停止したら同じ症状に陥りました。
再起動以外の方法で何とかウィンドウを消せないでしょうか。
456デフォルトの名無しさん:2010/02/19(金) 17:48:58
>>447
>>448
手書きでリソース書くことにしました。
ありがとうございます。
457デフォルトの名無しさん:2010/02/19(金) 19:38:10
>>455
うちはならない
VC++を再インストールしてみたら?
458デフォルトの名無しさん:2010/02/19(金) 19:42:08
>>455
多分メニューからデバッグの停止
CTRL+Cで停止するとそうなったような
459デフォルトの名無しさん:2010/02/19(金) 19:49:01
Ctrl + Alt + Break で終了出来る
460デフォルトの名無しさん:2010/02/19(金) 22:11:10
Visual C++再インストールしてみます。
ありがとうございました。
461デフォルトの名無しさん:2010/02/19(金) 23:22:44
デバッグ開始後すぐにVC++が強制終了してしまう場合は何が原因なんでしょうか?
462デフォルトの名無しさん:2010/02/19(金) 23:33:15
>>461
そんな特殊な状況、他に発生するのか?w
463デフォルトの名無しさん:2010/02/20(土) 03:23:25
vc++2008インストしたんだけど
ウィンドウにボタン配置したりする画面
あれどうやって出すの?
464デフォルトの名無しさん:2010/02/20(土) 03:30:44
プロジェクト作成するときに、CLRのフォームアプリケーションを選択するとできると思うよ。
465デフォルトの名無しさん:2010/02/20(土) 04:26:44
出来ますた
素早い回答ありがとうございます
466デフォルトの名無しさん:2010/02/20(土) 11:17:58
初心者用のCの教科書(林さんのp.294)を読んで勉強してます。
分からないことがあるので、どうか教えて下さい。

main関数を、int main(int argc, char *argv[])
のように、引数対応型にして、
コマンドラインから引数を渡すのではなく、
VC++のGUI上で引数を渡してビルドできるようになりたいです。

よろしければ、どうすれば良いか教えて下さい。

ちなみに、コマンドプロンプトではソースファイルをコンパイルできるんですが
GUIでは、何故かコンパイルできません。
467デフォルトの名無しさん:2010/02/20(土) 11:33:58
ソリューションのプロパティ→構成プロパティ→デバッグ→コマンド引数
で、デバッグ実行時のコマンドライン引数を与えることはできるけど。
468デフォルトの名無しさん:2010/02/20(土) 17:04:32
そういうことはGUIでやると、かえって手間がかかると思うが
469デフォルトの名無しさん:2010/02/20(土) 20:01:49
まったくゼロから始める初心者なんんですけど本屋に行ったらVisual C++とか
C++とか、いろんな本が売ってるんですけど、C++って書いてある本を買えば
まちがいないですか?
470デフォルトの名無しさん:2010/02/20(土) 20:08:03
>>469
初心者向けとか、特定のコンパイラ向けとかあるから、目的にかなったのを
選択しないとだめ。
471デフォルトの名無しさん:2010/02/20(土) 20:18:51
>>470
いろんなのが出ててまよってました。ありがとうございます。
472デフォルトの名無しさん:2010/02/20(土) 21:20:21
>>469
間違いだらけです
初心者向けとか入門書とかはすぐ使えなくなるから買っちゃだめ
473デフォルトの名無しさん:2010/02/20(土) 21:24:59
引数がめちゃくちゃ多くて
毎回入力するのが面倒なら
あらかじめ設定しとくのも
悪くはないと思うんだけど
普通はテストのために引数
変えながら試すはずだから
もしそういうことを自動で
やりたいなら敢えてテスト
用のプログラムを書いてね
474デフォルトの名無しさん:2010/02/20(土) 21:47:36
>>473
どれのことなんだ。
475デフォルトの名無しさん:2010/02/20(土) 21:59:40
476デフォルトの名無しさん:2010/02/20(土) 22:55:43
enumって何て読むの?
477デフォルトの名無しさん:2010/02/20(土) 23:00:59
C++スレでどうぞ。
478デフォルトの名無しさん:2010/02/20(土) 23:04:50
>>477
enumはCにもあるだろ。
479デフォルトの名無しさん:2010/02/24(水) 23:54:14
どこに書けばいいのか迷いましたが
一応visualC++のプロジェクトだったので質問します。

WMPの視覚エフェクトがつくりたくて
ttp://blogs.wankuma.com/ch3cooh/archive/2008/03/11/127149.aspx
のサイトを見ながらVisual Studio2008でプロジェクトを作成するまでは
上手くいったのですが、ビルドの際に、

'midl.exe' の起動中にエラーが発生しました。

とのエラーがでてビルドできません。
midlのパスが間違ってるとかそういうことじゃないのかなぁと思うのですが、
調べてもよくわかりませんでした。
助けてください。
480479:2010/02/25(木) 00:34:03
追記です。
ハードディスク内をmidl.exeで検索すると2種類でてきたので
VC\binにつっこんだらエラーが

error MIDL2398 : cannot execute MIDL engine

に変わりました。
これもmidlを起動できないとのメッセージですが英語になりました。
481デフォルトの名無しさん:2010/02/25(木) 09:50:13
wankumaに行って作った本人に直接聞けよ
482デフォルトの名無しさん:2010/02/26(金) 21:37:54
はじめまして。ソフトバンクの「基礎からのC」という本の通りにやってるのですが
下のようになって進めません。

Setting environment for using Microsoft Visual Studio 2008 x86 tools.

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>cd /D C:\c-lang\chapter03

C:\c-lang\chapter03>cl hello.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.

hello.c
hello.c(1) : fatal error C1021: プリプロセッサ コマンド 'inclube' が無効です。

C:\c-lang\chapter03>


どうすればいいか教えてくれたらうれしいです。
visual studio 2008を使ってます。
483デフォルトの名無しさん:2010/02/26(金) 21:40:48
いんくるーべじゃなくていんくるーどだよお
484482:2010/02/26(金) 22:24:40
いや本当にinclubeってあったんですけど・・・?
485デフォルトの名無しさん:2010/02/26(金) 22:26:48
>>484
includeでやってみろよ
486デフォルトの名無しさん:2010/02/26(金) 22:29:14
487482:2010/02/26(金) 22:29:30
すいませんホント始めたばっかりなのでそれもどうすればいいか・・・orz
488デフォルトの名無しさん:2010/02/26(金) 22:31:20
inclube → include に書き換える
489482:2010/02/26(金) 22:38:36
その場所はどうやってもなんにもできません
書き換えようとしてもけすことも書くことも無理です
490デフォルトの名無しさん:2010/02/26(金) 22:40:30
hello.c を、inclube で検索して、include に書き換える
491デフォルトの名無しさん:2010/02/26(金) 22:42:00
hello.cってソースファイルに
#inclube って書いてあんだろ?
それを書き換える

何にもできないのはなぜだ?
492482:2010/02/26(金) 22:45:17
すいませんできました。みなさんありがとうございます。いらいらさせてごめんなさい。
493デフォルトの名無しさん:2010/02/27(土) 03:11:55
Windowsべったりのプログラムを書いていて、
ファイル名から始まって変数名の付け方等悩んでいます。
別に拘りがあるわけではないので、何か適当な規則に従ってみようと思っているのですが、
VC++についてくるサンプルコード等参考にしつつコードを書いているのですが、
サンプルコード間でも割と記法がばらついており、さてどんな形で統一しようかと考え込んでしまいます。
MSDN等にコーディング規約に関する記事などありますでしょうか。
或いはまとまった大きめのコード(色んな記法を見れるコード)などあれば教えて頂けると幸いです。
494デフォルトの名無しさん:2010/02/27(土) 04:31:21
好きな宗派を選べばいいよ
495デフォルトの名無しさん:2010/02/27(土) 05:24:47
496デフォルトの名無しさん:2010/02/27(土) 08:19:10
>>494
どっぷりWindowsプログラムなので、MS教を信奉しようと思っているのですが、
.NET周辺は
MS自身も宗派替えをしてる感もあり、宗派選びの参考となる宗教書は無いかと思いまして。

>>495
どうもありがとうございます。そのスレは確認したのですが、
適当な名称、単語についてのアドバイスを貰うスレで、
>>命名規則や設計の善し悪しについて議論するのは基本的に禁止
ということでしたので、避けてこちらで相談させて貰いました。
スレチでしたら申し訳ない。
497デフォルトの名無しさん:2010/02/27(土) 11:35:49
498デフォルトの名無しさん:2010/02/27(土) 22:09:44
最近始めた者ですがコメントについての質問です。
ソースにコメントを書いているのに実行したら結果にそのコメントらしきものが
見当たりません。
コメントの意味って何なのですか?お願いします。
499デフォルトの名無しさん:2010/02/27(土) 22:12:16
>>498
・他の人が見てわかりやすい
・後で見返したときにどういうことしてるかわかる
・メモ程度に忘れないようにかいとく
500498:2010/02/27(土) 22:30:59
ありがとうございます。
要するにソースだけであって実行には関係ないものなんですね。
よくわかりました。
501デフォルトの名無しさん:2010/02/27(土) 22:47:59
最近始めた者ですがソースについての質問です。
ソースを書いているのに実行したら結果にソースらしきものが
見当たりません。
ソースの意味って何なのですか?お願いします。
502デフォルトの名無しさん:2010/02/28(日) 18:18:41
>>501
・人間が見てわかりやすい
・後で見返したときにどういうことしてるかわかる
・プログラムの動作をCPUが判るレベルに細かく分割してかいとく
503デフォルトの名無しさん:2010/02/28(日) 21:18:31
ちょっと%fについて質問です
printf("整数の定数=%f \n", 10);
では正しく動作しないんですよね?なのに
printf("加算の表示=%f \n", 55.0 + 10);
の10は整数なのに正しく動作します
そこんとことよく分からんのです
答えてくれたら有難いです
504デフォルトの名無しさん:2010/02/28(日) 21:25:41
55.0 + 10が整数じゃないから
505デフォルトの名無しさん:2010/02/28(日) 21:27:37
そりゃ式の評価値の問題だろ?
506デフォルトの名無しさん:2010/02/28(日) 21:52:23
C言語スレじゃないからどうでもいいけど
「正しく動作しない」じゃなくて「誰かが思ってる通りに動作しない」だろ
じゃなきゃコンパイラに欠陥があるってことか
507デフォルトの名無しさん:2010/02/28(日) 21:54:11
欠陥があるのはいつだってプログラマの脳みそです
508デフォルトの名無しさん:2010/03/02(火) 21:06:20
構造体配列がよくわかりません、教えてください
for(j=0;j<6;j++){chosen[j] = {"abt","abc","abc",0,0,101};}←まずこれがコンパイルできません、一つ一つ丁寧に入れないといけないのでしょうか?ちなみにVisual C++ 2008です
そしてもう一つの関数内でchosen[random()%5].nameというふうに使いたいから
namespace ホゲ {
using namespace System;
using namespace System::Drawing;
struct choosedata {  メンバ};
int random ;
struct choosedata chosen[6];
と一番上で宣言してるのですが、privateとかC++のことが良くわかってなくてフォームアプリケーションのヘッダに書いてるのですがここはおかしいですか?
sscanf(data,"%s ; %s ; %s ; %d ; %d ; %d",&chosen[5].type,&chosen[5].name,&chosen[5].answer,&chosen[5].right,&chosen[5].times,&chosen[5].rate);
それとここで%sの文字列がちゃんと入らないのですが何がおかしいのでしょうか?
よろしくおねがいします!

509鬼神の名無し:2010/03/02(火) 21:26:28
C言語の事詳しく教えてください!
510鬼神の名無し:2010/03/02(火) 22:06:13
511デフォルトの名無しさん:2010/03/03(水) 00:15:26
デバッグの時には乱数は変わらないのでしょうか?
srand((unsigned int)time(0));
a = (int)((rand() / ((double)RAND_MAX+1.0f)) * 10);
をしましたがデバッグを開始にしてもデバッグなしで開始にしても同じ値しか入りません
512デフォルトの名無しさん:2010/03/03(水) 01:03:58
>>511
ちょっとVC8で試してみたけどsrandの実装がショボイみたいだね。
一番最初に呼ぶrandがtimeと比例するような近い値を返してきてるから結果的に同じ値がaに入ることになる。
改善するにはtimeで得た値をsrandに渡す前にCRCとか使ってかき混ぜるのがいいと思う。
513デフォルトの名無しさん:2010/03/03(水) 06:49:00
最初の数回のrandを捨てる方が簡単か。そのうち内部状態が混ざってくる。
514デフォルトの名無しさん:2010/03/03(水) 10:56:03
VS2010βをダウンロードしてみました。
stdafx.hを使用したいのですが、プロジェクトを作成する時にMFCを選択しないと使用出来ないのでしょうか?
Win32の空プロジェクトのような、スッキリしたプロジェクトで使用することはできませんか?
よろしくお願いします。
515デフォルトの名無しさん:2010/03/03(水) 11:15:45
βは知らんけど、たぶん今までと同じだろ
516デフォルトの名無しさん:2010/03/03(水) 11:23:30
srandの実装がショボイと言うと
C言語の仕様に対してVC++のライブラリのsrandの実装がショボイと言ってるように聞こえるな
517デフォルトの名無しさん:2010/03/03(水) 11:38:47
time()よりGetTickCount()渡しとけよ
518514:2010/03/03(水) 12:05:12
すいません、今までを知らないので教えてください。
βを落とした理由が、ExpressではMFCが使えないとのことでしたので。
519デフォルトの名無しさん:2010/03/03(水) 12:20:59
>>518
プリコンパイルヘッダーを使用する設定にすればいいんじゃね?
520デフォルトの名無しさん:2010/03/03(水) 12:21:22
なんだ結局MFC使うのか
うかつに回答しなくて良かった
521デフォルトの名無しさん:2010/03/03(水) 12:36:51
使わないようにしたいと思ってる人が大多数だから
「stdafx.h 使わない」で検索すれば一発で見つかる
522デフォルトの名無しさん:2010/03/03(水) 15:00:02
>>512
ありがとうございました
523デフォルトの名無しさん:2010/03/03(水) 16:50:21
>>503
まだ間に合うかな・・・

printf("整数の定数=%f \n", 10);
コンパイラは10をint型で扱うのね。%fはfloat型だから一致してないわけで正しく表示させません。

printf("整数の定数=%f \n", 55.0+10);
これは55.0がfloat型なのでそれに10足したら65.0になるわけで%fで正しく表示されます。

55.0と10を足したらfloatになる・・・のはC言語の暗黙の型変換というヤツです。

コレに対して、10をfloatであると明示的に書いてやれば%fで正しく表示されます。
printf("整数の定数=%f \n", 10F);
printf("整数の定数=%f \n", (float)10);
printf("整数の定数=%f \n", 10.0);
etc
524デフォルトの名無しさん:2010/03/03(水) 16:57:27
ぐあっ
printf("整数の定数=%f \n", 10F);
では無く
printf("整数の定数=%f \n", 10.0F);
でした
525デフォルトの名無しさん:2010/03/03(水) 18:11:12
ファイルのある一行を書き換えたいのでr+で開いてその行のファイルポインタをコピーしておこうとしているのですが
while(fget(fp,,))ループのあるタイミングで*fpc = *fpとしてfpritf(fpc,"",)としようとすると、*fpc = *fpの行で「オブジェクト参照がオブジェクト インスタンスに設定されていません」
のエラーが出ます
fpc=fpとして同じようにすると、while(fget(fp,,))で最後まで回ってるからかfpritf(fpc)としても最後に書き込まれてしまいます
どうすれば良いのでしょうか?
526デフォルトの名無しさん:2010/03/03(水) 18:18:20
ftell()とfseek()組み合わせるとか
って上書きしかできんから行の長さかえられんけどいいのか
527デフォルトの名無しさん:2010/03/03(水) 18:25:04
ありがとうございます
行の長さが変えられないって数字だとしたら桁が変えられないってことですか?
ファイルを2個作るのが普通なのでしょうか?
ファイル1を開く、ある行を計算して保持しておく、ファイル2をwで開く、その行以外はコピー、その行に来た時保持しておいた値を書く
次また同じ操作をしたい時はファイル2をrで開いてファイル1をwで開く、というふうにするのですか?
528デフォルトの名無しさん:2010/03/03(水) 18:27:40
まあそんな感じ。
通常はテンポラリファイル作るかオンメモリでやるかってとこかなあ
529デフォルトの名無しさん:2010/03/03(水) 18:39:29
ありがとやっしたー!
ちなみに
フォームアプリケーションを作るのに
C#で作るのと
C++でフォームアプリケーションから作るのと
C++で空のプロジェクトから作るのと
動作の軽さは結構違うのどうか教えてください!
530デフォルトの名無しさん:2010/03/03(水) 18:46:17
やなこった
531デフォルトの名無しさん:2010/03/03(水) 18:54:14
そこをなんとか!
532デフォルトの名無しさん:2010/03/03(水) 19:10:27
プログラムによっても実行する環境によっても違うし、
使う人によっても感じ方が違うだろうから
本人が実際につくって試してみるしかない。
533デフォルトの名無しさん:2010/03/03(水) 19:16:35
>>529
素人が作るなら大して変わらないし、パソコンは高性能に
なってきてるから、よっぽどのことがない限り、どれもたいして
重くならない、とも言える。
534デフォルトの名無しさん:2010/03/03(水) 20:10:04
おお
535デフォルトの名無しさん:2010/03/03(水) 20:27:06
そもそも、C++フォームアプリケーションが、CLRのあれのことだったら、
C#でもC++でも.NET Frameworkで動くのだからどっちで書いても同じというのが答えだ。
536デフォルトの名無しさん:2010/03/03(水) 20:40:48
時間はC++で書くと3倍かかるけどな
537デフォルトの名無しさん:2010/03/03(水) 20:55:43
>>523
55.0はdoubleだろ?
538デフォルトの名無しさん:2010/03/03(水) 21:12:10
printfでそんなもの表示して何がうれしいんだろうね?
539デフォルトの名無しさん:2010/03/03(水) 21:12:47
Hello Worldがどうしたって?
540デフォルトの名無しさん:2010/03/03(水) 23:50:37
Visual C++ 2008 Express Editionです。
コンソールアプリケーションを作っているのですが、
デバッグを使っていて、ブレークポイントに達した時にデバッグ停止すると、何故か
コンソールが残ったままになります。Windows終了時も消すことが出来ず、
電源を強制的に切らなければなりません。
どうすれば直せますか?
541デフォルトの名無しさん:2010/03/04(木) 03:38:33
ラベルに一行が長いテキストを入れると右端が振り切れてしまうのですが、自動改行は無いのでしょうか?ググっても見つけられませんでした
542デフォルトの名無しさん:2010/03/04(木) 09:48:47
ラベルって何だ?
もしかして自分用語ならググっても見つけらないだろ
543デフォルトの名無しさん:2010/03/04(木) 10:03:26
>>540
ほっときゃいいじゃん、いつかは電源切るんだし。
つかVS上でシフトF5でデバッグ中止しても残るの?
544デフォルトの名無しさん:2010/03/04(木) 10:08:34
>>541
環境書いた方がいいよ、formのLabelだろ?
もともと自動改行するよ、AutoSize をfalseにしてみては。
まあワードラップの問題も出るだろうけど
545デフォルトの名無しさん:2010/03/04(木) 15:27:55
VC2008を使用している際に、デバッグビルドの標準設定で発生する症状なのですが、
cppファイル上に#include "stdafx.h"が存在しない場合、
warning C4627及びfatal error C1010(プリコンパイルヘッダが見つからない)
が発生し、ビルドに失敗します。

これだけなら各ファイルでstdafx.hをインクルードしてやれば良い話なのですが、
フォルダ分けを行っている場合、例えば#include "../stdafx.h"というような
形でインクルードしている場合にも同様のエラーでビルドに失敗します。
パスが存在しないにも関わらず、#include "stdafx.h"も加えてやると
デバッグ設定ではなんとビルドが通るのですが、
リリース設定にすると当然ながらエラーが出てはねられます。
とりあえずプリプロセッサを使って宣言を切り替えているのですが、気持ち悪いです。
何か適切な対処の方法はあるでしょうか。
546デフォルトの名無しさん:2010/03/04(木) 15:32:15
>>545
プロジェクトで右クリックしてプロパティ出して
左上の構成のとこを「すべての構成」にして← ここ重要(Debug Releaseで2回設定してもいいけど)
構成プロパティのC/C++のプリコンパイル済みヘッダーのとこの
プリコンパイル済みヘッダーの作成/使用 を「使用しない」にする
547デフォルトの名無しさん:2010/03/04(木) 15:33:18
もしくは、空のstdafx.hをそこに置いといて両方インクルードしてしまえばいい
548545:2010/03/04(木) 15:56:16
>>546
プリコンパイル済みヘッダは使ってるんです。規模が大きくなってくると恩恵も大きいですし。
ちゃんと明記するべきでしたね、すみません。

>>547
あー。確かに。ちょっと気持ち悪いですけれど、仕方ないかなぁ。どうもありがとうございます。
549デフォルトの名無しさん:2010/03/04(木) 16:08:18
使ってるなら空じゃまずいのではw
上のstdafx.hの中で、別のstdafx.hをincludeするのがいいのかな
つーか別のやつをstdafx.hという名前以外にしてしまえばいいのでは
550デフォルトの名無しさん:2010/03/04(木) 16:35:38
質問する前にMSDNぐらい読んどけ
551デフォルトの名無しさん:2010/03/04(木) 17:41:49
>>544
ありがとうございましたできました
Visual C++なので環境はみんな一緒かと思ってました
昨日はパネルの上にラベルを乗せてて、Autosizeをfalseにしてもできなかったような気がしてたのですけれども
552デフォルトの名無しさん:2010/03/04(木) 17:51:29
>>551
falseにした上で高さのリサイズした?
553デフォルトの名無しさん:2010/03/04(木) 17:54:16
>>552
あ、そういえば昨日はしてなかったような気がしまつ
554デフォルトの名無しさん:2010/03/04(木) 19:14:04
すいません
#ifdefとか#ifとかの使い方教えてください
使うとどうなるのかも教えてください
555デフォルトの名無しさん:2010/03/04(木) 19:20:04
C言語初心者スレ行き
556デフォルトの名無しさん:2010/03/04(木) 19:23:53
そんなこと言わずに教えてくださいよ
557デフォルトの名無しさん:2010/03/04(木) 19:27:55
IPAの報告によればこの資格の最年少合格者は13歳だってなw
558デフォルトの名無しさん:2010/03/04(木) 19:43:25
559デフォルトの名無しさん:2010/03/05(金) 10:02:15
>>554
コンパイルされるコードを切り替えます。

#ifdef _DEBUG
デバックモードのときだけコンパイルされる
#endif

とか、
#ifdef _DEBUG
デバックモードのときだけコンパイルされる
#else
デバックモード以外のときコンパイルされる
#endif

などなど、何か事情があってコンパイルを切り替えたいときに使います。
また、#ifは

#if 0
ここはコンパイルされません。
#endif

という感じでとりあえずコンパイルしない・・・という感じでよく使います。
560デフォルトの名無しさん:2010/03/05(金) 10:24:05
>>559
デバックモードってどういうメリットがあるんですか?
561デフォルトの名無しさん:2010/03/05(金) 10:39:24
デバックしやすい
562デフォルトの名無しさん:2010/03/05(金) 11:00:01
>>560
デバック時で言うと一般的なのはログとかですかねー
TRACE使ってれてば問題ないですが。MFCが要るんでしたっけ?

#ifdef _DEBUG
OutPutDebugString(msg)
#endif
563デフォルトの名無しさん:2010/03/05(金) 11:33:29
>>562
TRACEの使い方教えてください
564デフォルトの名無しさん:2010/03/05(金) 11:48:58
Yahooでググれ
565デフォルトの名無しさん:2010/03/05(金) 11:49:37
>>562
TRACEは普通にprintfと同じです。

TRACE("デバック - i=%d",i);

で出力ウィンドウに出ます。
また、リリースモードでは出力されません。
わずかとは言え負荷の観点からも
リリースモードではログ出力は避けたほうがいいですね。
566デフォルトの名無しさん:2010/03/05(金) 11:59:34
デバックモードについて全然理解してないことはわかった
567デフォルトの名無しさん:2010/03/05(金) 16:20:16
this->panel1->MouseWheel += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::panel1_MouseWheel);
private: System::Void panel1_MouseWheel(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e)
{label1->Text="lghol";panel1->Invalidate();}
マウスでスクロールできるようにしたいのでまずはホイールイベントを検出したいのですが、これを追加するだけでは何が足りないのでしょうか?
VC++です、それと
case 数字:
{srand((unsigned int)time(0));
int rand = (int)(rand()%2);処理〜}
のrandに0しか入らないのですが何故でしょうか?
568デフォルトの名無しさん:2010/03/05(金) 16:34:21
すませんVC++2008ExpressEditionです
569デフォルトの名無しさん:2010/03/05(金) 17:04:48
>>567
前者:よさそうに見えるなぁ。
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.mousewheel.aspx
1行目は実行されてるよね?

後者:rand()の前に必ずsrand()を呼ぶのは変。
普通はsrand()はアプリ起動時に1回だけ呼ぶもの。
あと、srand()直後のrand()はかなりseedに比例するような値が出る実装がよくあるらしい。
「srand()してrand()を100回やる」をアプリ起動時に1回やる、case 数字:ではrand()だけ呼ぶ
ってやってみて。
570デフォルトの名無しさん:2010/03/05(金) 17:40:22
>>569
ありがとうございます
種のことはよくわかりませんが序盤で1回srand()してrand()して4で割った余りで場合わけしてるのですが、その中でまたrand()を%2したいので
srand()をしないとrand()は同じ数が出ると聞いたので
(今そうなっているわけじゃないですが)4で割って2余る中でまたrand()を呼んで%2しても0に決まってるので、確率2分の1をsrand()せずにrand()%2では不味いので毎回呼ぶのかなあと思ったのですが大丈夫なのでしょうか?

ちなみに一行目はInitializeComponent(void)の中でパネルがいっぱい設定されてるところの最後に入れています
this->panel1->AutoScroll = true;
this->panel1->Controls->Add(this->pictureBox1);
this->panel1->Controls->Add(this->label1);
this->panel1->Font = (gcnew System::Drawing::Font(L"MS UI Gothic", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(128)));
this->panel1->Location = System::Drawing::Point(16, 1);
this->panel1->Name = L"panel1";
this->panel1->Size = System::Drawing::Size(922, 421);
this->panel1->TabIndex = 3;
this->panel1->MouseWheel += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::panel1_MouseWheel);
その後パネルはthis->panel1->Location = System::Drawing::Point(16, 1);
this->panel1->Size = System::Drawing::Size(933, 326);
しかいじってません(`;ω;´)
571デフォルトの名無しさん:2010/03/05(金) 18:37:12
>>570
MouseWheelはコントロールがフォーカスを持ってる時しか来ないのね。
panelは普通フォーカスを持たないのでこない。
panel1->Focus()をすれば来るんだけど、別のコントロールで入力したりするとまた来なくなる。
MouseWheelはForm1でとるようにしてはどうだろう。this->MouseWheel += 〜〜 と。

>srand()をしないとrand()は同じ数が出ると聞いたので
それは、srand()を全くしないと最初にsrand(1)をしたのと同じになる、という意味。
572デフォルトの名無しさん:2010/03/05(金) 18:43:34
なるほど!ありがとうございました!
573デフォルトの名無しさん:2010/03/05(金) 18:44:57
あ、InitializeComponent()の中は基本的には直接いじらない方がいいよ。
フォームのデザイナでいじったことが書かれるところだから、デザイナが解釈できないことを
書いてしまうとデザイナでいじった時に消えてしまう。
FormのコンストラクタでInitializeComponent()を呼んだ下に書きましょう。
574デフォルトの名無しさん:2010/03/05(金) 18:49:33
(`;ω;´)できまてん
TextBoxの|がチカチカしてるのですがそのせいでしょうか?
575デフォルトの名無しさん:2010/03/05(金) 18:50:36
>>573
ありがとうごいます!わかりました!
576デフォルトの名無しさん:2010/03/05(金) 19:21:57
マジキチ
this->MouseWheel += 〜〜 しにても
this->label1->MouseWheel += 〜〜 にしてもうんともすんともしねえ
577デフォルトの名無しさん:2010/03/05(金) 20:14:31
んー、なんだろう。
アプリはアクティブになってる?
578デフォルトの名無しさん:2010/03/05(金) 20:46:57
テキストボックスー>にしたらできましたのでFocusがFormになってなかったぽいです
イニシャライズの後にthis->Focus();してもテキストがチカチカしたままなのですがなぜでしょうか?
579デフォルトの名無しさん:2010/03/05(金) 20:58:56
Form1でActiveControl = nullptr;
みたいなことやってみて
580デフォルトの名無しさん:2010/03/05(金) 21:05:52
フォーム内のテキストボックスにフォーカスがあるならフォームにもMouseWheelはくるはず。
パネル内のテキストボックスにフォーカスがあるならパネルにもMouseWheelはくる。
フォームの上にマウスカーソルがあっても、フォームのウィンドウがアクティブでないとこないよ。
581デフォルトの名無しさん:2010/03/05(金) 21:05:56
イニシャライズの最後でthis->ActiveControl = nullptr;してその後this->Focus();とかやってみましたが何もかわりませんでした、多分
582デフォルトの名無しさん:2010/03/05(金) 21:16:55
え゛ー…
this->textBox1->MouseWheel += gcnew S OK
this->それ以外 ×
みたいな感じです
イニシャライズ→関数→ピクチャーボックス消し、パネル、テキストボックスサイズ書き換え ぐらいしかフォームはいじってないつもりなんですが…
イニシャライズの中はこれです。(順番とか関係あるのか知りません)
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->button1 = (gcnew System::Windows::Forms::Button());
this->panel1 = (gcnew System::Windows::Forms::Panel());
this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->panel1->SuspendLayout();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->BeginInit();
this->SuspendLayout();
//
// textBox1
this->textBox1->Font = (gcnew System::Drawing::Font(L"MS UI Gothic", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(128)));
this->textBox1->Location = System::Drawing::Point(16, 428);
this->textBox1->Multiline = true;
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(922, 109);
this->textBox1->TabIndex = 1;
// button1
this->button1->Location = System::Drawing::Point(786, 543);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(152, 69);
this->button1->TabIndex = 2;
this->button1->Text = L"OK";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click_1);
583デフォルトの名無しさん:2010/03/05(金) 21:18:17
this->panel1->AutoScroll = true;
this->panel1->Controls->Add(this->pictureBox1);
this->panel1->Controls->Add(this->label1);
this->panel1->Font = (gcnew System::Drawing::Font(L"MS UI Gothic", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(128)));
this->panel1->Location = System::Drawing::Point(16, 1);
this->panel1->Name = L"panel1";
this->panel1->Size = System::Drawing::Size(922, 421);
this->panel1->TabIndex = 3;
// pictureBox1
this->pictureBox1->Location = System::Drawing::Point(0, 0);
this->pictureBox1->Name = L"pictureBox1";
this->pictureBox1->Size = System::Drawing::Size(922, 396);
this->pictureBox1->TabIndex = 1;
this->pictureBox1->TabStop = false;
this->pictureBox1->Click += gcnew System::EventHandler(this, &Form1::pictureBox1_Click);
this->label1->Location = System::Drawing::Point(-4, 0);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(882, 560);
this->label1->TabIndex = 0;
this->label1->Text = L"label1";
this->ClientSize = System::Drawing::Size(950, 624);
this->Controls->Add(this->panel1);
this->Controls->Add(this->button1);
this->Controls->Add(this->textBox1);
this->Name = L"Form1";
this->panel1->ResumeLayout(false);
(cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->pictureBox1))->EndInit();
this->ResumeLayout(false);
this->PerformLayout();
584デフォルトの名無しさん:2010/03/06(土) 02:46:26
InitializeComponent()は関係なさそうと思う。
ごく単純なプロジェクトを作ってみた。想定通りにMouseWheelがくる。
よかったらこれやってみて。DLKey, ZIPPassともに「to583」。
http://kissho.xii.jp/1/src/1jyou106974.zip.html
585デフォルトの名無しさん:2010/03/06(土) 02:56:59
ありがとうございました
見比べてみます!
586デフォルトの名無しさん:2010/03/06(土) 04:27:18
もう無理ですほんとうにありがとうございました
後はチャーをストリーム^にしてオールファイル読み込んでるのと
何回もフォーム弄りまくってバグってるくらいしか思いつきません
587デフォルトの名無しさん:2010/03/06(土) 04:31:01
久々にVCで組む事になって昔よく使ってた
VC++超初心者のホームページに行ってみたらなくなってた!

100回くらい質問して200回くらい回答してたのに寂しいぜ・・・
どっかに過去ログないかな?
588デフォルトの名無しさん:2010/03/06(土) 10:49:01
589デフォルトの名無しさん:2010/03/07(日) 10:49:43
VC++2008でプロジェクトなどを作成せずにすでにあるプログラムファイルを開いて
実行することはできませんか?プログラムを開くことはできるんですが、
デバッグなどができません。どうか教えてください。
590デフォルトの名無しさん:2010/03/07(日) 11:01:39
やだ
591デフォルトの名無しさん:2010/03/07(日) 12:30:37
デバッグできるの確実だけど
プロジェクトなどを作成せずにとかいらん条件つけられると答えようがない。
592デフォルトの名無しさん:2010/03/07(日) 12:32:12
>>589
プロジェクト作成したときと同じ方法でデバッグできるだろ。
593デフォルトの名無しさん:2010/03/07(日) 22:54:38
条件演算子についての質問です。
ソース
int a = 10, b =5;
printf("比較の結果、小さい値は %d \n",
a < b ? a : b);

実行例

比較の結果、小さい値は 5

となりました。実行した時、どうして小さい値をちゃんと表わせたんでしょうか?
「比較の結果、小さい値は」というのは人間が見やすいようにするための物なんじゃ
ないんでしたっけ。小さい値を出すためのプログラミング言語はどれなんでしょうか?
意味分からない質問ですいません。お願いします
594デフォルトの名無しさん:2010/03/07(日) 22:58:32
コメントと文字列をごっちゃにしているだけのような気がする。
595デフォルトの名無しさん:2010/03/07(日) 23:20:22
>>593
int a = 10, b =5;
printf("%d\n", a < b ? a : b);
596デフォルトの名無しさん:2010/03/07(日) 23:23:04
>>593
int a = 10, b =5;
printf("比較の結果、小さい値は 5 \n")
597デフォルトの名無しさん:2010/03/07(日) 23:23:55
>>593
int a = 10, b =5;
printf("Hello, World!!! \n")
598デフォルトの名無しさん:2010/03/07(日) 23:38:40
>>593
int a = 10, b =5;
printf("お前は %d だ。 %d になるんだ。\n",
a < b ? a : b);
599デフォルトの名無しさん:2010/03/08(月) 02:09:14
>>593
よくわからんなら?と:を使わずに書け
600defo:2010/03/08(月) 08:23:09
a<b?a:b
これは
aより b が大きいなら(b より a が小さいなら)、a を値として戻せ、そうでないなら b を戻せ。
10より 5 が大きいなら(5 より 10 が小さいなら)、10 を値として戻せ、そうでないなら 5 を戻せ。
601デフォルトの名無しさん:2010/03/08(月) 08:35:06
>>593
入門書に載ってるコードでも丸写ししてるのか?
入門者に対してずいぶん不親切な書き方だな
602デフォルトの名無しさん:2010/03/08(月) 08:42:04
C言語の勉強中だったらC言語のスレに行った方がいい
603defo:2010/03/08(月) 08:46:53
>>589
コマンドプロンプト:\>cl /EHsc hello.cpp
なんたら・・・コンパイル成功。
コマンドプロンプト:\>hello
デバッグしてちょうだいよ。
604デフォルトの名無しさん:2010/03/08(月) 12:21:36
プログラムファイルって普通は実行ファイルのことだから
ソース持ってないexeをデバッグしたいんじゃないのか?
605デフォルトの名無しさん:2010/03/08(月) 17:08:52
リソー^スを編集しようとしたら
リソース編集はSKUではサポートされていません
と出たんだがどうしたらいいの?
606デフォルトの名無しさん:2010/03/08(月) 17:18:39
607デフォルトの名無しさん:2010/03/08(月) 17:29:21
あざす
608デフォルトの名無しさん:2010/03/08(月) 19:38:53
2008をはじめたものです。

#include <windows.h>
#include <mmsystem.h>
#include "resource.h"
#pragma once

namespace hello2 {
   …
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
PlaySound("C:\\***.wav",NULL,SND_FILENAME | SND_ASYNC);
}
};
}

音を出したいのですがでません、リンカでwinmmは追加済みです。
609デフォルトの名無しさん:2010/03/08(月) 21:04:13
PlaySound関数は、アプリケーションがロードされたディレクトリ、カレントディレクトリ、
Windowsのシステムディレクトリ、Windowsディレクトリ、環境変数PATHに記述されている各ディレクトリ、
ネットワークにマップされているディレクトリから、サウンドファイルを検索します。
610デフォルトの名無しさん:2010/03/09(火) 06:20:49
>>609
ありがとうございます。

それプラス、「Unicode文字セットを使用する」から
「マルチバイト文字セットを使用する」に変更で音がでました。
この違いは何なんでしょうか?
611デフォルトの名無しさん:2010/03/09(火) 06:55:06
612デフォルトの名無しさん:2010/03/09(火) 06:57:30
つーかUnicodeの時コンパイル通ったのか?
613デフォルトの名無しさん:2010/03/11(木) 20:11:46
文字列にTEXTマクロ付けないとコンパイル通らないんだがどうにかできない?
614デフォルトの名無しさん:2010/03/11(木) 20:21:39
別にTEXTマクロなくたって通る
615デフォルトの名無しさん:2010/03/11(木) 20:21:42
代わりにL""にする
616デフォルトの名無しさん:2010/03/11(木) 20:59:25
Qt使い始めたらL()とかTEXT()とかwshogehogeとかmbcshogehogeとか訳判らんもんに振り回されずに済むようになっためっちゃはっぴー
617デフォルトの名無しさん:2010/03/11(木) 21:10:40
TEXTマクロ使うのは同じソースをwindows98みたいな
古いOS用にコンパイルし直すのが楽なようにやってるだけで
C言語の入門書にあるようなL()とかTEXT()とか全然使ってないソースも
問題なくコンパイルできるよ
618デフォルトの名無しさん:2010/03/12(金) 15:44:26
だけど MbcstringToWideChar とか使いにくいぜ
619デフォルトの名無しさん:2010/03/12(金) 20:40:19
ちゃんとW書けよ
620デフォルトの名無しさん:2010/03/12(金) 20:40:51
regsvr 32 でDLL登録したいけど「DllRegisterServerエントリポイントが見つかりません」となります。
VC++ 2008Expressです。  
Cppに       extern "C"  HRESULT __stdcall   DllRegisterServer()
.hに         extern"C"   HRESULT __stdcall  DllRegisterServer(void);
と宣言しています。

621デフォルトの名無しさん:2010/03/12(金) 20:53:24
DllRegisterServerエントリポイントが見つかりません の検索結果 約 401 件
622デフォルトの名無しさん:2010/03/12(金) 21:03:26
中身ないじゃん
623620:2010/03/12(金) 21:17:38
中身は
HRESULT __stdcall DllRegisterServer()
{
HKEY hkResult; // キーのハンドル
DWORD dwDisposition; // 処理結果を受け取る
LONG lResult;
lResult = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{99FFFFF-AAA3-1113-ABCD-000000000099}\\ProgID", 0,0 ,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkResult, &dwDisposition);

if( lResult == ERROR_SUCCESS )
{
char strCity[128] = "JISAKUdllver1";
::RegSetValueEx(hkResult, "", 0, REG_SZ, (CONST BYTE*)(LPCTSTR)strCity,strlen(strCity) + 1);
};
::RegCloseKey(hkResult);

HKEY ppResult; // キーのハンドル
DWORD ppk; // 処理結果を受け取る
LONG ssResult;

ssResult = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, "CLSID\\{99FFFFF-AAA3-1113-ABCD-000000000099}\\InprocServer32", 0,0 ,
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &ppResult, &ppk);

if( ssResult == ERROR_SUCCESS )
{
char rCity[128] = "D:\\マイドキュメント\\新しいフォルダ\\a.dll";
::RegSetValueEx(ppResult, "", 0, REG_SZ, (CONST BYTE*)(LPCTSTR)rCity, strlen(rCity) + 1);
};
::RegCloseKey(ppResult);
return S_OK;
}
624デフォルトの名無しさん:2010/03/12(金) 21:23:13
DllRegisterServer エントリポイント の検索結果 約 844 件
625デフォルトの名無しさん:2010/03/12(金) 21:26:48
判っているひとのみ回答してください
626620:2010/03/12(金) 21:43:22
>>622
DllRegisterServerが読み込まれてさえないのではと思いまして
627デフォルトの名無しさん:2010/03/12(金) 21:52:32
あーリンクし忘れてんのか
628デフォルトの名無しさん:2010/03/13(土) 10:13:55
>>627
すみません、調べてみたけど解りません。プロジェクトプロパディのリンクのことでしょうか?
629デフォルトの名無しさん:2010/03/13(土) 18:16:35
DLL作るんならDependency WalkerぐらいDLしておけ
そしてDEFファイル渡せ
630デフォルトの名無しさん:2010/03/13(土) 22:30:34
VC++ 2005, Win32 アプリケーションについて質問です。

タスクマネージャの画面のように、メニューバーの下に一本セパレーターを
表示するにはどうすれば良いでしょうか?

ツールボックスにそれらしいコントロールが見当たらないのですが…。
631デフォルトの名無しさん:2010/03/13(土) 22:42:36
LineTo()を使って自前で描く。
632デフォルトの名無しさん:2010/03/13(土) 23:11:14
コントロールでもできるよ
633630:2010/03/14(日) 11:00:31
>>631
LineTo() を使ったことがないので、調べてみます。

>>632
どのコントロールでしょうか?
634デフォルトの名無しさん:2010/03/14(日) 11:20:35
635デフォルトの名無しさん:2010/03/14(日) 11:29:10
いわゆるstaticコントロールな
636630:2010/03/14(日) 12:09:37
>>634
>>635
Static Text の Height を 1 に、Static Edge を True にすることで実現できました。
ありがとうございました。
637デフォルトの名無しさん:2010/03/14(日) 14:37:26
すみません、新規プロジェクト作って.cppと.defファイルを同じフォルダに入れてビルドしただけでは
関連付けはされないんでしょうか。 VC++側での設定って必要ですか?
638デフォルトの名無しさん:2010/03/14(日) 16:11:17
://www.geocities.jp/ky_webid/win32c/059.html
引用するけど、
 ○DLLを使う側
 .DEFファイルを使う場合であっても、特に呼び出し側に変化はありません。.DEFファイルは、DLLを作るときに 必要なだけであり、呼び出し側には不要です。
639デフォルトの名無しさん:2010/03/14(日) 16:26:06
DLL作る時は、関数は_stdcallでextern "C"して__declspec(dllexport) すれば
func@4とかの関数名になる。
_func という名前にするためにdef使う。
640デフォルトの名無しさん:2010/03/14(日) 16:27:04
あ、前の _ は無いな
641デフォルトの名無しさん:2010/03/14(日) 16:34:20
http://msdn.microsoft.com/ja-jp/library/z4zxe9k8.aspx
Visual C++
DLL からのエクスポート
更新 : 2007 年 11 月

DLL から関数をエクスポートする方法には、次の 2 つがあります。

・モジュール定義 (.def) ファイルを作成し、DLL をビルドするときに .def ファイルを使用します。
名前ではなく序数で DLL から関数をエクスポートする場合は、この方法を使用します。

・関数の定義に __declspec(dllexport) キーワードを使用します。

上のどちらかの方法を使って関数をエクスポートする場合は、必ず __stdcall の呼び出し規約を使います。
642623:2010/03/14(日) 17:32:22
Dependency Walkerで自作のDLLを見てみました。
Add 自作した関数 add は表示され、DllRegisterServer()等のDll系の関数は表示されませんでした。
C:\WINDOWS\system32にあるDLLを適当に見たところDll系の関数が表示されます。
今の表記では駄目なんでしょうか?

Za.cpp
STDAPI DllRegisterServer(void)

Za.def
LIBRARY za
EXPORTS
DllCanUnloadNow PRIVATE

za.h
extern "C"
__declspec(dllexport) int add(int a)

643デフォルトの名無しさん:2010/03/14(日) 18:02:00
>>642
>DllCanUnloadNow PRIVATE
これしかないの?
プロジェクト作成のウィザードでATLプロジェクト選べば、
それとDllGetClassObject, DllRegisterServer, DllUnregisterServerの4つが並ぶはず。
って、ATLじゃなくて素でCOMするの?すごいなぁ。
644デフォルトの名無しさん:2010/03/14(日) 18:13:57
>>643
誤表記+省略してました。defのExport4つです。
DllCanUnloadNow PRIVATE
DllGetClassObject PRIVATE
  DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE

関数の中身の記述もプログラムの構成も合ってるか不明で、良い方法が思いつかないだけです。
ATLも初耳ですので調べてみます。
645デフォルトの名無しさん:2010/03/14(日) 20:23:37
リンカにDEFファイルが渡されてねえって
646デフォルトの名無しさん:2010/03/14(日) 22:09:40
C++/CLIを使用しています。
UCHARの配列に入った文字列をTextbox->Textに表示したいのですが、
一文字ずつ取り出すしか無いのでしょうか?
647デフォルトの名無しさん:2010/03/14(日) 22:44:05
単にTextboxに文字列を表示するだけじゃなくて何か特殊な処理が必要で質問してる?
648デフォルトの名無しさん:2010/03/14(日) 22:58:38
単にテキストボックスに表示するだけです。

UCHAR moji[8];
Textbox->Text = "Moji:" + moji;

では、エラーになってしまいますので・・・。
649デフォルトの名無しさん:2010/03/14(日) 23:03:11
std::string("Moji:") + moji
650デフォルトの名無しさん:2010/03/14(日) 23:20:37
UCHAR moji[8];
TextBox->Text = std::string("Moji:") + moji;

'std::operator +' の宣言を確認してください。
error C2784: 'std::_String_const_iterator<_Elem,_Traits,_Alloc> std::operator +(_String_const_iterator<_Elem,_Traits,_Alloc>::difference_type,std::_String_const_iterator<_Elem,_Traits,_Alloc>)' :
テンプレート 引数を 'std::_String_const_iterator<_Elem,_Traits,_Alloc>' に対して 'UCHAR [8]' から減少できませんでした
'std::operator +' の宣言を確認してください。
error C2784: 'std::reverse_iterator<_RanIt> std::operator +(_Diff,const std::reverse_iterator<_RanIt> &)' :
テンプレート 引数を 'const std::reverse_iterator<_RanIt> &' に対して 'UCHAR [8]' から減少できませんでした
'std::operator +' の宣言を確認してください。
error C2784: 'std::_Revranit<_RanIt,_Base> std::operator +(_Diff,const std::_Revranit<_RanIt,_Base> &)' : テンプレート 引数を 'const std::_Revranit<_RanIt,_Base> &' に対して 'UCHAR [8]' から減少できませんでした
'std::operator +' の宣言を確認してください。
error C2676: 二項演算子 '+' : 'std::basic_string<_Elem,_Traits,_Ax>' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。(新しい動作; ヘルプを参照)

ダメでした・・・。
651デフォルトの名無しさん:2010/03/14(日) 23:30:59
UCHAR moji[8];
Textbox->Text = moji;

しきりなおり、これでエラー貼ってみろ。
652デフォルトの名無しさん:2010/03/14(日) 23:38:22
error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'UCHAR [8]' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照)
理由: 'UCHAR *' から 'System::String ^' へは変換できません。
使用可能なユーザー定義された変換演算子がない、または
アンマネージ型をマネージ型に変換できません。

こうなりました。
653651:2010/03/14(日) 23:42:54
  private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
        unsigned char u_a[] = "わーるど";
      //  TCHAR w_a[] = L"わーるど";
        wchar_t w_a[] = L"わーるど";
        String^ s_a = gcnew String(w_a);

        label1->Text = u_a;
        label1->Text = gcnew String(w_a);
       }

答えになってるかどうか分からないけど、参考まで。
654デフォルトの名無しさん:2010/03/15(月) 00:03:52
Textbox->Text = gcnew System::String(moji);
とか?
655デフォルトの名無しさん:2010/03/15(月) 00:05:30
>>653

private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
unsigned char u_a[] = "わーるど";
label1->Text = u_a;
}

error C2664: 'void System::Windows::Forms::Control::Text::set(System::String ^)' : 1 番目の引数を 'unsigned char [9]' から 'System::String ^' に変換できません。(新しい機能 ; ヘルプを参照)
1> 理由: 'unsigned char *' から 'System::String ^' へは変換できません。
1> 使用可能なユーザー定義された変換演算子がない、または
1> アンマネージ型をマネージ型に変換できません。


こうなってしまいます。
UCHARに入れた文字列を表示したりマネージ型に変換することは出来ないってことでしょうか?
656デフォルトの名無しさん:2010/03/15(月) 00:06:43
>>654
error C2664: 'System::String::String(const wchar_t *)' : 1 番目の引数を 'UCHAR [8]' から 'const wchar_t *' に変換できません。(新しい機能 ; ヘルプを参照)
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

それもダメでした・・・。
657651:2010/03/15(月) 00:07:07
TCHAR にすればできると思う。
658デフォルトの名無しさん:2010/03/15(月) 00:36:05
ドライバが指定してる型がUCHARの場合、C++/CLIじゃどうしようも無いのかな?
659デフォルトの名無しさん:2010/03/15(月) 00:54:00
やっと出来ました。
wchar_tを挟まないといけないのですね。
めんどくさっ。

UCHAR moji[8] = "mmmmm";
wchar_t w_m[8];
for(int i=0;i<8;i++){w_m[i]=(wchar_t)moji[i];}
Textbox->Text = gcnew System::String(w_m);
660デフォルトの名無しさん:2010/03/15(月) 01:04:53
>>659

unsigned char moji[8] = "mmmmm";
Textbox->Text = gcnew System::String((char*)moji);
661デフォルトの名無しさん:2010/03/15(月) 01:12:37
>>660
その書き方があったっ。
文字列型が多くて混乱してました。
ありがとうございます。
662651:2010/03/15(月) 02:40:41
Stringの8bit用コンストラクタString(SByte*)だけだよ。
String(signed char*)はあるのにString(char*)が無いよ。
663デフォルトの名無しさん:2010/03/15(月) 08:23:18
文字列でつまずくレベルで
あえてC++/CLIやる意味ないだろ
664デフォルトの名無しさん:2010/03/15(月) 08:24:30
あっちいけ
665デフォルトの名無しさん:2010/03/15(月) 10:15:52
>>645
ありがとうございます、プロジェクトプロパディ→リンカのモジュール定義ファイルで解決しました。
基本的なこともできてなかった…
666デフォルトの名無しさん:2010/03/15(月) 18:57:15
visual C++ 2008のマウスのメッセージについて質問です。

非クライアント領域でのクリックの座標から色を知りたいのですが、
非クライアント領域のクリックのメッセージを知る方法が分からずに躓いています。
クリックは非クライアント領域で2回連続で押し、それぞれの座標を知りたいです。

WM_NCLButtonDownだとタイトルバーの座標までは分かっても、ウィンドウの外だと
反応してくれませんでした。また、一度ウィンドウが非アクティブになると拾ってくれないようで
他の方法を考えています。

現在は非クライアント領域をクリックしたときに送られる何らかのメッセージを受けたとき、
sendmessageでWM_LBUTTONDOWNを送る方法を考えています。

単純に非クライアント領域を何度かクリックした座標を受け取る方法は
やはりないのでしょうか?
667デフォルトの名無しさん:2010/03/15(月) 21:41:23
コンパイルは通るのに何度やってもクリティカルエラーが出て実行が出来ないと思ったら
オーディオインタフェースの電源入れておかないとダメなのね
668デフォルトの名無しさん:2010/03/15(月) 22:09:32
>>666
あります。
669デフォルトの名無しさん:2010/03/15(月) 22:28:27
>>668
ありがとうございます。お手数おかけして申し訳ありませんが、
できたら使う関数名やメッセージ名など教えていただけると幸いです。
お願いします。
670デフォルトの名無しさん:2010/03/15(月) 23:08:50
非クライアント領域ってどこのこと言ってるの?
どうも質問の内容がおかしい気がする

ウィンドウの外でその用途ならキャプチャするとか
671デフォルトの名無しさん:2010/03/16(火) 03:36:39
>>669
マウスキャプチャかフックかな
キャプチャならSetCapture〜ReleaseCapture
フックならSetWindowsHookExでWH_MOUSE
DLLにしたくないならWH_MOUSE_LLで
672デフォルトの名無しさん:2010/03/16(火) 07:49:52
次の質問は、ActiveXで描画した画像のキャプチャの仕方かなw
673デフォルトの名無しさん:2010/03/16(火) 10:58:41
>>670
すみません、ウィンドウの外のつもりでした。
これは最初に書くべきだったかもしれませんが、キャプチャは
一度他のウィンドウをクリックしたりしてアクティブなウィンドウが移ると
キャプチャが働かなくなると読んだので、それ以外の方法で探していました。

>>671
フックというのを少し調べてみました。まだ把握はできていませんが、
これならなんとかなるかもしれないです。しばらくこれで調べてみます。

ありがとうございました。
674デフォルトの名無しさん:2010/03/16(火) 11:12:54
条件小出し野郎にレスしないで正解だった
675デフォルトの名無しさん:2010/03/16(火) 11:24:24
WINXP EXCEL2003
指定したセルにだけ入力したいのですがどこを直せばいいか分かりません。

Sub Input_Date(ByVal iDay As String)
ActiveCell.Value = CStr(iYear) _
& "/" & CStr(SpinButton1.Value) & "/" + iDay
ActiveCell.NumberFormatLocal = ComboBox1.Value
End Sub

どうすれば良いのでしょうか?
676デフォルトの名無しさん:2010/03/16(火) 11:26:48
>>674
すみません、一応そういうつもりではなかったんです。
気を悪くされたら申し訳ありません。
一応僕としては>>666のほうで4行目や終わりの段落で
連続で何度かクリックして座標を受け取る方法、ということで質問したつもりでいたので
話の流れが悪くなってしまいどのようにレスを書くか迷って
あのような書き方になってしまいました。
どうせ長文になるのなら、質問項目とすでに試したことを箇条書きなどとして
分かりやすく記述するべきであったかと思います。

決して内容を小出しにして居座るつもりではありませんでした。
お気を悪くしてしまい申し訳ありませんでした。
677デフォルトの名無しさん:2010/03/16(火) 11:30:49
>675
EXCELだったらVBAでも勉強すればいいんじゃないか
678GV:2010/03/16(火) 11:39:54
中学卒業してもうすぐ高校のGVです。
VisualBasicをやってます。
でも、そろそろ他も勉強したいです。
C++かC#かJavaにしようとおもいますが、どれがいいですか?
皆様なりの見解を教えていただけますか?
それか、ほかにお勧めの言語があったらおしえてください。
679デフォルトの名無しさん:2010/03/16(火) 11:41:57
全部環境先に作ってみ
680GV:2010/03/16(火) 11:48:55
りょうかいでs
VC++、VC#いれました。あとはJDKでs
681デフォルトの名無しさん:2010/03/16(火) 12:47:20
HelloWorldくらいはそれぞれで書いてみて、
いくつかやってると基本的なとこはあまり変わらないことに気がつくと思うんで
とりあえずやりやすいやつから始めるといいと思うよ。
IDEの使いやすさとかVBやってたとこからいくとC#やってみるのがいいかもね
682デフォルトの名無しさん:2010/03/16(火) 12:54:03
VBやったならrubyがいいにきまってる
683デフォルトの名無しさん:2010/03/16(火) 12:58:48
どう考えてもCでwinapi触って遊ぶ段階だろ。
684デフォルトの名無しさん:2010/03/16(火) 13:00:21
いや、永遠に初心者で居てくれないとこの案件激減の世の中
ライバルが増えるのは良くない
685デフォルトの名無しさん:2010/03/16(火) 13:06:06
>>678
自分が頭良いと思うならC++で、
そうでないと思うなら
C#かJavaが良いと思うよ。
686デフォルトの名無しさん:2010/03/16(火) 13:14:30
理系ならc,asm,c++で
文型ならc#,javaで
687デフォルトの名無しさん:2010/03/16(火) 13:19:57
asmを勧められた人は不幸になるという噂を聞いたよ
688デフォルトの名無しさん:2010/03/17(水) 00:28:42
そもそも、なんの言語がいいかという質問なら、
こんなVC++オンリーのスレで聞かないほうがいいと思うのだけど。
689デフォルトの名無しさん:2010/03/17(水) 11:03:27
unko(){
unko = 0;
}

と書くのと

unko() : unko(0) { }

と書くのにはどういう違いがあるの?
690デフォルトの名無しさん:2010/03/17(水) 11:09:28
もしや
unko::unko() : unko(0) {}
のことを言っておるのか
691デフォルトの名無しさん:2010/03/17(水) 11:10:22
そういうのはC++言語のスレでやって
692デフォルトの名無しさん:2010/03/17(水) 11:15:42
すいません以下に訂正で(・∀・)

unko(){
chinko = 0;
}

と書くのと

unko() : chinko( 0 ) { }

と書くのにはどういう違いがあるの?
693デフォルトの名無しさん:2010/03/17(水) 11:16:15
    そういうのはC++言語のスレでやって

694デフォルトの名無しさん:2010/03/17(水) 11:18:57
それとプロジェクトの中のファイルをまとめて印刷ってできるかな?
できれば1ファイル1枚でなくて、連続して出力したい(紙の無駄無くしたい(エコ)的な意味で)でヤンス
695デフォルトの名無しさん:2010/03/17(水) 11:23:02
そういうのはソフトウエア板で聞いて
696デフォルトの名無しさん:2010/03/17(水) 11:25:44
そして実際他の板に書いたら今度はマルチポスト氏ねって粘着するんですね、わかります
697デフォルトの名無しさん:2010/03/17(水) 11:28:11
自分で印刷プログラムを作るのならここでOK
698GV:2010/03/17(水) 11:29:41
>>685
他の人が言うには頭いいらしいけど、
自分では思ってない。これはどうすればいいですか?
699デフォルトの名無しさん:2010/03/17(水) 11:56:10
>>698
人に聞く時点でC++は後回しがいいと思う
700GV:2010/03/17(水) 13:10:54
>>699
なるほど。
701685:2010/03/17(水) 13:49:39
>>698
じゃあ例えば

俺みたいにゲームはやり込むのが好き とか
微妙な小難しいルールが出て来るとwktkしてくるような
性格しているとかならC++で、

そうでないと思うなら
C#かJavaかなぁ。
702デフォルトの名無しさん:2010/03/17(水) 16:01:26
一般説としてコンテンツ消費者とコンテンツ作成者は別次元の生き物。

先ずは文法作法が最小限で何でも作れるcで簡単なゲーム作れば。
画像の描画、音の再生、ウィンドウの作成などが簡単なライブラリのSDL使ってさ。
ゲーム部分に注力しやすいし。

※勿論vc++エディタでな!
703GV:2010/03/17(水) 17:29:42
>>702入れましたVisualC++2008
704デフォルトの名無しさん:2010/03/17(水) 20:51:49
VisualStadio2010で
RAD開発可能でnativeコードを吐く(.NET Frameworkを要求しない)のってありますか。
言語は問いません。
705デフォルトの名無しさん:2010/03/17(水) 20:53:19
ない
706デフォルトの名無しさん:2010/03/17(水) 23:06:53
>>704
っえ?
VC++MFCはないのかしらん?
707デフォルトの名無しさん:2010/03/17(水) 23:13:28
MFCはRADじゃないということはないか
708デフォルトの名無しさん:2010/03/18(木) 00:44:11
SetMapMode、SetViewportOrg、SetViewportExt、SetWindowExt

でDCの座標を変換してたいのですが、これらのAPIをどこで呼び出すのが正しいのですか?
OnInitialUpdateで行っても無効のようです。

OnDrawで行うと期待している動作をするのですが、再描画の際に毎回これらのAPIを呼ぶのは
パフォーマンス的にどうかな?と思い質問してみました。
709デフォルトの名無しさん:2010/03/18(木) 01:39:59
BMPを読んで、ウインドウに表示する書き方がわかりません。マイクロソフトビジュアルスタジオをつかってます。
あと、5秒ごとに自動的に画像を表示するプログラムって技術的に可能ですか? ボタンをおさなくても自動で動くようにしたいです。
710デフォルトの名無しさん:2010/03/18(木) 01:47:50
MFCはRADとは言えんな
どうしてもC++でRADと言うならC++Builderだし
711デフォルトの名無しさん:2010/03/18(木) 02:03:45
つか、RADである必要があるか?
712デフォルトの名無しさん:2010/03/18(木) 02:34:09
>>709
VSの何を使ってるかくらい書いたほうがいいぞ
ここに来るくらいだからC++だろうけど、CLIかもしれんし

定期的に画像を表示するのは可能
713デフォルトの名無しさん:2010/03/18(木) 09:49:42
BMPを読むのはほんとに低レベルのものから用意してある機能を呼ぶだけのものまで
いろいろあるので、目的も書いた方がいいかも。
714デフォルトの名無しさん:2010/03/18(木) 23:57:57
スレ違いかもしれませんが、よかったら教えてください
ソフトを使うのにVisual C++ 2008 SP1 Redistributable Package (x86)をインストールしろと書いてあるので
検索したらVisual C++ 2008 SP1 Redistributable Package (x86)というのもありました
この場合はSP1だけを入れればいいんでしょうか?それとも両方入れるんでしょうか?
715デフォルトの名無しさん:2010/03/19(金) 02:27:09
ソフトが何なのかわからんし、俺にはその二つが全く同じに見えるんだが
716デフォルトの名無しさん:2010/03/19(金) 08:04:10
おれにも同じに見えるが
2005と、2008か
x64とx86の間違いだろう、たぶんw
717デフォルトの名無しさん:2010/03/19(金) 11:27:52
いや、文脈からすると無印かSP1かの違いだろうw
718デフォルトの名無しさん:2010/03/19(金) 11:46:00
末尾に ^ のついたクラス名ってどんな役割するものでしたっけ
719デフォルトの名無しさん:2010/03/19(金) 12:41:49
でしたっけ
720714:2010/03/19(金) 20:15:18
すいません、間違えました 少し質問を変えます
Win32 OpenSSLを使うのに、Visual C++ 2008 Redistributable Package (x86) を
入れろと書いてあるのですが、より新しいSP1も入れなくてもいいんでしょうか?
721デフォルトの名無しさん:2010/03/19(金) 20:17:53
新しい方 だけ 入れろ
722デフォルトの名無しさん:2010/03/19(金) 23:03:56
>>718
クラス名に"^"は使えません。
723714:2010/03/20(土) 02:01:04
SP1だけ入れればいいんですね
ありがとう
724デフォルトの名無しさん:2010/03/20(土) 04:36:28
VC2003で作成したダイアログリソースをフリーのリソースエディタのResEditに読み込んだところ
フォントサイズを変更してないのにダイアログやボタンの大きさが変わって表示されてしまうんですが
これはVC側の設定に問題があるのでしょうか?

フォントは "MS Shell Dlg"でサイズを8に設定しています。
725デフォルトの名無しさん:2010/03/20(土) 08:06:27
>>724
VC側のフォントの設定が違うんじゃないの?
726724:2010/03/20(土) 08:52:52
>>725
プロジェクト作成しなおし、フォントを設定しなおしたところ両方で同じ表示にすることが出来ました。
やはりVC側の設定がうまく反映されていなかったみたいです。

有難うございました。
727デフォルトの名無しさん:2010/03/20(土) 22:04:36
ボタンとかをビジュアルスタイルにするには?
ビルド時にマニフェストを埋め込んでいますとか出るが普通のデザインのままなんだが
728デフォルトの名無しさん:2010/03/21(日) 01:06:35
>>727
マニフェストがあればなんでもいいというわけではない。
ビジュアルスタイルを有効にするには、comctl32.dllのバージョン6を参照させる指定を行うことが必要。

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
729デフォルトの名無しさん:2010/03/21(日) 01:07:54
>>718
×クラス名 ○型名な。

マネージヒープに存在するオブジェクトを指すハンドルを意味する。
730デフォルトの名無しさん:2010/03/21(日) 02:53:43
インラインアセンブラについて質問です。

typedef struct EXT_VECTOR
{
    float e[3];

    EXT_VECTOR(float x1, float x2, float x3)
    {
        __asm
        {
            mov     ebx,    e
            fld     x1
            fstp    [ebx]

            fld     x2
            fstp    [ebx + TYPE float]

            fld     x3
            fstp    [ebx + TYPE float * 2]
        }
    }
};

このような構造体のコンストラクタでebxにeのアドレスをロードしようとすると、
どういうわけかebxの値が0のまま変動しません。
thisポインタをロードすれば動くのですが、中身を変更したことを考えると得策ではないと思います。
何か回避する方法はあるのでしょうか?
731デフォルトの名無しさん:2010/03/21(日) 09:08:42
ここ初心者スレですよ
732デフォルトの名無しさん:2010/03/21(日) 09:34:21
>>730
this経由じゃないとムリにきまってるだろ。
733デフォルトの名無しさん:2010/03/21(日) 10:33:40
visual c++のコンパイラの設定についてなんですが
最適化(/O2)を設定したときに、決めた行だけはそのままコンパイル(/O2の影響を受けない)とかできますか?


734デフォルトの名無しさん:2010/03/21(日) 10:51:58
>>730
c++のstructはclass
735デフォルトの名無しさん:2010/03/21(日) 10:55:33
736デフォルトの名無しさん:2010/03/21(日) 11:00:06
>>735

ありがとうございます!
737デフォルトの名無しさん:2010/03/21(日) 12:38:36
VC++って、VC#のDataGridViewみたいなグリッドが用意されていないのは
なぜですかね?

簡単に作れるから?
738デフォルトの名無しさん:2010/03/21(日) 13:13:34
OS標準のコントロールにないから
739デフォルトの名無しさん:2010/03/21(日) 13:19:36
740デフォルトの名無しさん:2010/03/21(日) 13:52:40
>>738
OS標準のコントロールにないのに、VC#にある理由は?
741デフォルトの名無しさん:2010/03/21(日) 13:58:22
.netにそういうのがあるんなら当然VCでも使えるだろ
742デフォルトの名無しさん:2010/03/21(日) 14:01:42
うん、.NET なら VC++ でも DataGridView つかえるよ。
743デフォルトの名無しさん:2010/03/21(日) 14:39:38
>>741
>>738のいうところの”OS標準”にないのに、.netにある理由は?
744デフォルトの名無しさん:2010/03/21(日) 14:57:34
.NETはVBユーザーが多いからだろうな
VB.NET以前からあったしな
745デフォルトの名無しさん:2010/03/21(日) 15:32:40
C++の入門書にはnewしたら必ずdeleteしろとありますけど
int main()
{
 int* p = int new;
 return 0;
}
とすると、プログラムが終了した後もnewで確保された4バイト分のメモリ領域は
OSからみると、使っちゃいけない領域と思っているのですか?

プログラムが終了したら、そのプログラム内で確保された領域は
OSが自由に使えるとしたら、ギガバイト単位でメモリを搭載している最近のPCなら
特にこだわる必要がないように思えます。(まぁ、4バイトなら・・・)
746デフォルトの名無しさん:2010/03/21(日) 15:33:34

int *p = new int;
の間違いです

初心者スレだから勘弁してください
747デフォルトの名無しさん:2010/03/21(日) 15:35:40
>>745
プロセス終了時には、そのプロセスが使用したメモリはOSが解放します。

大きなプログラムを書くようになると、いつのまにかメモリ足りなくなったりして
どこでdeleteし忘れてるのか探すのにすごい労力かけたりするからね。
サービスとかデーモンみたいに終了しないプログラムもあるしな
748デフォルトの名無しさん:2010/03/21(日) 15:59:28
>>731
すみません。
他にどこで聞けばいいのかわからなかったです。

>>732
配列eにもアドレスがあるのにthisじゃないと通らないということは、
配列eにはアドレスがなくて、コンパイル時にアドレスを計算してるってことですか?
わかりません><

>>734
CとC++の仕様の問題ということですか?
749デフォルトの名無しさん:2010/03/21(日) 17:10:42
>>747
レスありがとうございます。

ってことは、deleteしなくても、そうそう問題はなさそうですよね
逆にdeleteしてはいけないところで、deleteしてしまっていて
そのポインタに値を書き込むほうが危険ですよね
750デフォルトの名無しさん:2010/03/21(日) 17:13:32
>>749
そんな心配をしなくちゃならないようなプログラムがdelete以外は完ぺき
とは思えないな。素直にちゃんとやるべきだし、スマートポインタというのもある。
751デフォルトの名無しさん:2010/03/21(日) 17:27:54
4バイトぐらいなら何か特別な理由でもないとnew使わないし
752デフォルトの名無しさん:2010/03/21(日) 17:44:18
>>749
不安になるくらいなら、newは使うな。せめて、スマートポイントにしておけ。
できる限りSTLコンテナかローカルインスタンスで済ませ。
753デフォルトの名無しさん:2010/03/21(日) 18:51:07
>deleteしなくても、そうそう問題はなさそうですよね

こんなコはプログラミングしちゃダメ。
754デフォルトの名無しさん:2010/03/21(日) 18:56:17
>>749
> 逆にdeleteしてはいけないところで、deleteしてしまっていて
> そのポインタに値を書き込むほうが危険ですよね
ちょっと待てwwwww
そんな発想は勘弁
755デフォルトの名無しさん:2010/03/21(日) 19:06:21
動的なメモリ管理なのに
4バイト固定なんて状況しか頭に浮かばないんじゃ使い道ないだろ
756デフォルトの名無しさん:2010/03/21(日) 19:08:49
なんだかプログラムがバグる。

どうやら二重deleteしてるっぽい

でも、どうしてもデバッグできねえ

逆に考えるんだ! delete しなければいい。


みたいな過程をたどって>>745みたいな考えになったとか。
757デフォルトの名無しさん:2010/03/21(日) 22:23:42
それ、逆の発想やない、過ちや
758デフォルトの名無しさん:2010/03/21(日) 22:25:55
CDCのLineToでLineTo(100,100)で線を描くと左隅から右下がりの直線になります。

画面の中心から右上がりに描くためにはどうすればいいのですか?
759デフォルトの名無しさん:2010/03/21(日) 22:35:49
>>758
MoveToで中心を指定してから、LineToで良いんでないかい。
760デフォルトの名無しさん:2010/03/21(日) 22:45:48
>>758
SetMapMode()とか、SetWindowOrg()あたりをいじればいいんじゃね?
761デフォルトの名無しさん:2010/03/21(日) 22:45:55
初心者スレって回答する側が初心者ってことかw
762デフォルトの名無しさん:2010/03/21(日) 23:07:32
>>761
回答できない初心者は黙ってろよ。
763デフォルトの名無しさん:2010/03/21(日) 23:11:18
>>762
回答できない初心者は黙ってろよ。
764デフォルトの名無しさん:2010/03/21(日) 23:12:40
アナログ時計のサンプルみりゃいいい
765デフォルトの名無しさん:2010/03/21(日) 23:17:28
「このスレバカばっかり」系のカキコしたやつが、
ビシっと回答して、初心者どもを黙らせた例って見たこと
ないんで、ほとんど脳内上級者なんだろう。
766デフォルトの名無しさん:2010/03/21(日) 23:18:34
>>763
>>760で回答した。
767デフォルトの名無しさん:2010/03/21(日) 23:25:47
あたりをいじればいいんじゃね?


www
768デフォルトの名無しさん:2010/03/21(日) 23:33:55
>>767
方向性があってれば、こと細かく教える必要はないな。
ヒントだけで調べ切れなかったら、質問者がさらに質問すればいい。
769デフォルトの名無しさん:2010/03/21(日) 23:41:46
つーか人に聞くことかこれ?
770デフォルトの名無しさん:2010/03/21(日) 23:43:39
>>760
べつにこれでいいのか。
なんかぜんぜん違ってるのかと思ったよ。
771デフォルトの名無しさん:2010/03/22(月) 01:02:38
WMPコントロールがダブルクリックされた時に、全画面再生されないように、
ダブルクリックをキャンセルするにはどうしたら良いのでしょうか?

System::Void axWindowsMediaPlayer1_DoubleClickEvent(System::Object^  sender, AxWMPLib::_WMPOCXEvents_DoubleClickEvent^  e) {
//全画面再生をキャンセル
}

VC++2008EEでWMPはVer.10等です。
772デフォルトの名無しさん:2010/03/22(月) 01:48:53
こんどはヒントも出せませんかw
773デフォルトの名無しさん:2010/03/23(火) 17:03:21
キャストがうまくできず実行するとエラーが起きるんだけどどうしたら?

LPWSTR s;
wsprintf(s, L"n = %d", n);
SetWindowText(hwnd, (LPCTSTR)s);

bccだとchar *だけで済んだのに型にうるせーな
774デフォルトの名無しさん:2010/03/23(火) 17:15:53
>>773
sの領域は何処にあるの?
775デフォルトの名無しさん:2010/03/23(火) 17:28:41
776デフォルトの名無しさん:2010/03/23(火) 17:34:34
LPWSTRをLPCTSTRに「キャスト」するなよ。。。
LPCTSTRが「const char*」だった場合どーするんだ。
777デフォルトの名無しさん:2010/03/23(火) 21:09:27
キャスト以前の問題だがな
778デフォルトの名無しさん:2010/03/23(火) 21:12:05
今はUNICODEビルドみたいだが、マルチバイトにするとbccと同じになるぞ
まずはキャストで解決しようとするな、コンパイル通ればいいってもんじゃない。

とりあえずは、 TCHAR s[20]; にかえてみて
779デフォルトの名無しさん:2010/03/24(水) 01:06:52
TCHAR s[20];
wsprintf(s, TEXT("n = %d"), n); // または<stdio.h>と<tchar.h>をインクルードした上で_stprintf
SetWindowText(hwnd, s);
780デフォルトの名無しさん:2010/03/24(水) 01:12:47
WCHAR s[20];
wsprintfW(s, L"n = %d", n);
SetWindowTextW(hwnd, s);

で、いいだろ。
ジェネリックテキストとか、めんどうなだけでいいことなんにもないよ。
781デフォルトの名無しさん:2010/03/24(水) 11:09:28
何でそうなるのかがわかってるならそれでいいけど、
言われたとおりにしかできないならまたはまるぜ
782デフォルトの名無しさん:2010/03/24(水) 15:15:30
Visual Studio 2008です
ネコでもわかる〜Windows SDK編 を見つつプログラミングしています

日本語文字列を縦書きで描画する方法をご教示お願いします
DrawTextExのオプションにそれらしきものは見つかりませんでした
一文字ごと座標をY軸方向にずらしながら逐一描画するしかないのでしょうか
783デフォルトの名無しさん:2010/03/24(水) 16:53:45
縦書きフォントで縦方向に書くだけ
784デフォルトの名無しさん:2010/03/24(水) 17:26:55
CreateFontのほうにベースラインの角度の指定があるでしょ、
それで>>783
785デフォルトの名無しさん:2010/03/24(水) 22:56:54
TEXT()とL""
って同じもの?
786デフォルトの名無しさん:2010/03/24(水) 23:00:18
それを区別出来ないのはやばい
787デフォルトの名無しさん:2010/03/25(木) 02:08:51
>>785
TEXT()はVisualがC++の時はKがついてそれ以外は付かない。
LはVisualだから
788デフォルトの名無しさん:2010/03/25(木) 02:14:00
ttp://rina.jpn.ph/~rance/directx7/directx7study/ddraw/p021.htm
このサイトのスケルトンプログラムでエラーを3つ吐きます
参考書を開いても一つとして解決出来ません・・・
Visual C++ 2008 Express Edition を使用しています
1>c:\documents and settings\ms\デスクトップ\test\test\test\winmain.cpp(50) : error C2143: 構文エラー : ';' が 'case' の前にありません。
1>c:\documents and settings\ms\デスクトップ\test\test\test\winmain.cpp(72) : error C2440: '=' : 'char [9]' から 'LPCWSTR' に変換できません。
1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
1>c:\documents and settings\ms\デスクトップ\test\test\test\winmain.cpp(102) : error C2664: 'CreateWindowExW' : 1 番目の引数を 'const char [14]' から 'DWORD' に変換できません。(新しい機能 ; ヘルプを参照)
1> この変換が可能なコンテキストはありません。
789デフォルトの名無しさん:2010/03/25(木) 02:26:49
ゲーム製作板でも相談しているのですが。
VIsual C++初心者なもので……

FreeTrain EX Av Projectのriorioです。

このたび正式版1.0をリリースし、それとともに次期版のベータ2.0.1.0も配布開始しました。
http://sourceforge.jp/projects/freetrain-exav/

1.0は問題ではなく、2.0.1.0のほうでご協力をお願いします。
ver2から、新たにC++/CLIで記述されたDirectXラッパーを作成して使用するようにしたの
ですが、どうもビルドに問題があるのかソースに問題があるのか、原因いまだ不明なのです
が、本来
・DirectX9.0c
・.NET 2.0
の2つさえ入っていれば動作するはずのFreeTrainEX Av本体が、単独動作せず起動すぐ
クラッシュということになっています。

いろいろ試してみて、Visual C++ 2008がExpress Editionでいいのでインストールされて
いたら動作する、というところまでは突き止めました。
私自身もExpress Editonで開発しているのでC++部分とC#部分の一発ソリューションという
のはできず、まずC++のDirectXWrapper.dllのみをC++でビルドし、そのあとでC#でDLLを
参照してビルドして完成という手順を踏んでいます。
この手順の中になにか不備があるのではと考えられるのですが、わかりません。

SourceForge.jpのほうには2.0.1.0のソースをSVNでコミットしてあります。
ソースから読んでわかる方、ぜひ解明・解決していただけないでしょうか。
790デフォルトの名無しさん:2010/03/25(木) 04:28:16
>>788
自己解決しました
SJISとUNICODEの問題でした
これは古いサイトを参考にするのは大変そうだ・・・
791デフォルトの名無しさん:2010/03/25(木) 06:34:47
>> 783 >> 784
ありがとうございます
縦書き文字を出力することができました

幾つかの試行錯誤とMSDNライブラリから
DrawTextは縦書き文字に未対応(改行後の文字送り方向が下方向固定)らしいですね
別の方法を探すことにします
ありがとうございました
792デフォルトの名無しさん:2010/03/25(木) 07:09:16
>>789
ライブラリと静的にリンクしてないとか
793789:2010/03/25(木) 09:26:23
>>792
このC++部分はほかの人に作ってもらって、うpろだ経由で受け渡ししたものなのですが。
その最初の作者のかたは最近来てくれなくて連絡とれないんです。

自分がC++初心者でビルドのオプションとかもよく分かってなくて。

可能ならSourceForgeで公開してるソースを手元のC++でビルドしてもらって
アドバイスいただけたらありがたいです。
794デフォルトの名無しさん:2010/03/25(木) 10:18:38
>>793
DirectXWrapper.dllがDebugビルドされてるので
Releaseでビルドし直すといいよ。
795デフォルトの名無しさん:2010/03/25(木) 11:29:28
>>794
うほ
そんなことで解決するとは。
ありがとうございますありがとうございます。
796デフォルトの名無しさん:2010/03/26(金) 21:34:17
OPENFILENAME構造体やGetOpenFileName()が未定義とでるんだがどうしたらいいの?
797デフォルトの名無しさん:2010/03/26(金) 21:52:13
ヘッダファイルをインクルードすればいいだけじゃん
798デフォルトの名無しさん:2010/03/26(金) 22:24:56
当然してるが
799デフォルトの名無しさん:2010/03/26(金) 23:18:39
Comdlg32.lib
800デフォルトの名無しさん:2010/03/27(土) 17:09:18
メモリデバイスコンテキストの座標系をY軸を上に取りたいのですが
~~~~~

どうしたらいいですか?
801デフォルトの名無しさん:2010/03/27(土) 17:16:22
日本語でおk
802デフォルトの名無しさん:2010/03/27(土) 19:17:32
また同じ質問を別人のふりでしてるのかと思った
803デフォルトの名無しさん:2010/03/28(日) 00:12:32
aruaru
804デフォルトの名無しさん:2010/03/28(日) 13:22:18
2008 express editon使用

taskschd.hをインクルードすると、

windef.h(154) : warning C4114: 同じ型の修飾子が 2 度以上使われています。
windef.h(154) : error C2632: 'char' と 'char' の 2 つの型指定子のあいだにコードがありません。
windef.h(154) : warning C4091: 'typedef ' : 変数が何も宣言されていないときは、'unsigned char' の左辺を無視します。

となります。

また、put_WakeToRunを使いたいのですが、具体的にはどう指定するのでしょうか?
put_WakeToRun( (タスク名) VARIANT_BOOL true); であってます?
805デフォルトの名無しさん:2010/03/28(日) 13:32:09
COMはデータ型ややこしいから初心者向きではないな
806デフォルトの名無しさん:2010/03/28(日) 19:24:34
Visual C++ 2008 ProfessionalでCLRのWindowsフォームアプリケーションでソフトを作っています
labelがたくさんあってfor文でlabel1→label2→label3→…と処理したいのですがどうすればいいですか?
for(i=0;i<…){
labeli->…;
}
では勿論だめですのでいい方法を教えてください
807デフォルトの名無しさん:2010/03/28(日) 19:29:47
>>806
Label[] labels = new Label[] {label1, label2, label2, …};
foreach (Label label in labels) {
label->…;
}
808デフォルトの名無しさん:2010/03/29(月) 16:34:09
((*(CABC*)(&(*(CABCD*)(&*this))))).m_hoge

って何?
809デフォルトの名無しさん:2010/03/29(月) 16:39:05
キャスト
810デフォルトの名無しさん:2010/03/29(月) 16:55:20
健康のため使いすぎに注意しましょう。
811デフォルトの名無しさん:2010/03/29(月) 16:59:27
キモすぎだろ
812デフォルトの名無しさん:2010/03/29(月) 17:56:44
>>808
吐き気がする
813デフォルトの名無しさん:2010/03/29(月) 18:10:56
>>807
ここはc++の板だったな。
おもいっきりc#のコード書いてた。
スマソ。
814デフォルトの名無しさん:2010/03/29(月) 21:54:32
>>804
先にwindows.hをインクルードしていないと駄目とかでは?
815デフォルトの名無しさん:2010/03/30(火) 09:15:19
>>808
強烈ですね

面白そうなんで考えてみた。30分もかかったが
いわゆるC++屋って人なら1、2分程度でわかるのですか?
816デフォルトの名無しさん:2010/03/30(火) 18:26:37
なんか最近プログラム実行後にもコンソールが残ったままになるんだけどこれ何なん?
実行するたびに残っちゃうからやるたびにタスクバーにたまってく
しかもこの状態だと正常にシャットダウンされないから強制終了させるしかないし

誰か同じようになってない?
817デフォルトの名無しさん:2010/03/30(火) 20:32:51
そういうときはWindowsを再インストールするのが常識
818デフォルトの名無しさん:2010/03/30(火) 21:09:11
ウイルスだな
819デフォルトの名無しさん:2010/03/30(火) 21:42:27
周りだと4人ほど同じ症状が出てるんだよなー
ウィンドウズアップデートとかの影響かとおもったけど他にいないなら
ウイルスもありえちゃうかな
820デフォルトの名無しさん:2010/03/30(火) 22:30:33
>>819
むしろウイルスなどのマルウェア説が自然だろそれは
821デフォルトの名無しさん:2010/03/30(火) 22:35:31
LANで感染しちゃったんだな
822デフォルトの名無しさん:2010/03/30(火) 23:18:12
【依頼に関してのコメントなど】よろしくおねがいします! 本文が長いといわれたので2分割します
【板名】 プログラム技術
【スレ名】 ★初心者にVisual C++を教えるスレ★ Part35
【スレのURL】 http://pc12.2ch.net/test/read.cgi/tech/1256645713/
【名前欄】
【メール欄】
【本文】↓

ゲーム制作の途中です。ファイルの分割で困っています
ファイルが多くなり、includeが多くなってきたのでmain.hというヘッダファイルにまとめました
他にはcppファイルがいくつかあり、kozo.h(クラスファイルや構造体をまとめるヘッダファイル)があります
そしてそのmain.hを全ファイルでincludeすれば管理が楽かと思ったのですが
"public: __thiscall chara::chara(void)" (??0chara@@QAE@XZ) は既に main.obj で定義されています。
とエラーが出てしまいます
charaのコンストラクタが二重定義されてしまってエラーが出ていると思うのですが、なにか解決方法はありますか?
includeを細かく設定していくしかないのでしょうか
あともしよろしければファイル分割の王道みたいなページがあれば教えてください。よろしくお願いします。
823デフォルトの名無しさん:2010/03/30(火) 23:18:55
main.hの内容
#include "kozo.h"
#include <string>
#include <windows.h>
extern int shujinkoX ;

kozo.hの内容
class chara{
private:
int str;
public:
chara();
};
chara::chara(){
str=0;
}
824822:2010/03/30(火) 23:25:40
すいません>>822の上6行は無視して下さい・・
825デフォルトの名無しさん:2010/03/30(火) 23:26:11
インクルードガードでぐぐる
826デフォルトの名無しさん:2010/03/30(火) 23:28:55
>>825
おおおありがとうございますーーー!!!
827デフォルトの名無しさん:2010/03/30(火) 23:41:00
コンストラクタの定義をどこかcppファイルに移すというのはだめ?
828デフォルトの名無しさん:2010/03/30(火) 23:44:12
>>827
できれば避けたいです・・
今なら修正もできるといえばできるんですが、
これから先も増えていくと思うので、ヘッダファイルなどで一元処理したかったのです
コンパイルにかかる時間は諦めます
829デフォルトの名無しさん:2010/03/30(火) 23:46:43
全部中に入れろ
830デフォルトの名無しさん:2010/03/30(火) 23:47:22
すごく・・・見にくいです・・・
831デフォルトの名無しさん:2010/03/31(水) 00:47:12
ならコンストラクタの定義にinline付けておけばいい。
832816:2010/03/31(水) 16:33:25
http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/e6d4a4f5-7002-401a-90e1-6174d7f9e3ca/
Microsoftのフォーラムで見つけたけどいまいちわからない
833デフォルトの名無しさん:2010/03/31(水) 16:49:45
・WM_DESTROYでPostQuitMessage()を呼び出していないだけ
・書いたコードが間違っていてプロセスが残ってるだけ
・VSの再インスコ
・SP当ててみる
・OS再インスコ
834デフォルトの名無しさん:2010/03/31(水) 17:17:30
Microsoftに直接聞けばいい。
835デフォルトの名無しさん:2010/04/01(木) 14:58:34
VC++2008EEって名前付き返り値の最適化ってしてくれますか?
836デフォルトの名無しさん:2010/04/01(木) 15:15:23
入力時最初の文字が小文字になってしまいます。
通常の入力にするには設定のどこを見れば良いでしょうか。
VisualC++2005
837デフォルトの名無しさん:2010/04/01(木) 15:29:24
>>836
なにを入力するときの話?
838デフォルトの名無しさん:2010/04/01(木) 15:48:22
簡単なソースをvc++6.0とvc++9.0(2008)でReleaseビルドしたのですが、ファイルサイズが6KBほど異なりました。
静的リンクしてるCRTのバージョンの違いにより内部的に生成されたコードサイズが異なってしまったという認識でおkでしょうか?

コンパイラの最適化の違いもあるかと思いますが、基本的にCRTを動的リンクに変更すれば
exeサイズに大きな違いは出ないと考えてもよろしいでしょうか?
839デフォルトの名無しさん:2010/04/01(木) 15:53:42
こまけぇこたぁいいんだよ
840デフォルトの名無しさん:2010/04/01(木) 17:43:58
広い意味での変数名
841デフォルトの名無しさん:2010/04/01(木) 17:46:29
追加
メンバ関数内でCEditと入力すると最初のアルファベットがcとなってしまう。
842デフォルトの名無しさん:2010/04/01(木) 18:02:15
みすません。
PC側の問題でした。
843デフォルトの名無しさん:2010/04/01(木) 19:00:31
>>842
お前は誰だ
844デフォルトの名無しさん:2010/04/01(木) 19:09:44
解決しました
845デフォルトの名無しさん:2010/04/01(木) 22:46:55
Microsoft Visual C++2008の実行ボタンってどこにあるんでしょうか 2005では ! の形してたそうですが・・・
ビルド>>実行でいいですよね?
ファイル 編集 表示 プロジェクト ビルド デバック ツール ウィンドウ ヘルプって並んでて、
その下にファイルを開くとか保存のアイコンがありますが、実行がどれかわかりません
846デフォルトの名無しさん:2010/04/01(木) 23:38:38
ツールバーの編集できないのか?
847デフォルトの名無しさん:2010/04/01(木) 23:48:33
>>845
たいていのIDEはメディアプレーヤーの再生ボタンと同じ三角じゃないかな
848デフォルトの名無しさん:2010/04/01(木) 23:54:51
>>845
実行はビルドのメニューやコマンドの分類の中にはない。デバッグの中にある。

デフォではツールバーは「標準」しか出てないんじゃないかな。
出し入れはメニュー・ツールバー上の右クリックでポップアップするメニューで。

「デバッグなしで開始」のアイコンは右向き三角形の左に三本横線がついたものになった。
デフォではデバッグのツールバーにのらなくなった。
追加は、上記右クリックメニュー→ユーザー設定(C)...→コマンド(C)から探し当てて
ツールバーにDrag&Dropで。
849デフォルトの名無しさん:2010/04/02(金) 01:24:16
>>814
そうしてみましたが、ダメでした。(状況不変)
850デフォルトの名無しさん:2010/04/02(金) 08:11:14
DLLフック作成してるんですが
フックを呼び出したときDLLのエントリポイントに行ってくれず、インスタンスハンドルを取得できません。
呼び出し元のEXEからフックのハンドル取得して引数で渡したりすれば意図したことはできますが
どうみても何かおかしいと思うんですが、どうすればいいですか
851デフォルトの名無しさん:2010/04/02(金) 09:08:32
>>850
DllMainが呼ばれるのはLoadLibraryでdllを呼び出したときだろ?
dllのインスタンスハンドルが欲しいならDllMainの第一引数をグローバル変数で取っておけばいい
852デフォルトの名無しさん:2010/04/02(金) 11:53:45
具体的にどういうAPI、手順で「DLLフック」とやらをやっているのかの
情報を書き込まないと、的を射た答えは返ってこないと思われ。
853デフォルトの名無しさん:2010/04/02(金) 12:46:11
VC++6.0版のfmcieサンプルを探しているのですが
見つかりません。
どこに行けばダウンロードできますか?

msdnで2005版は見つかったのですが
854デフォルトの名無しさん:2010/04/02(金) 15:46:53
VisualC++ ExpressEditionの質問です。
たとえば浮動小数点の四則演算を数百万回繰り返すだけのアプリの場合、マネージドでもネイティブでも
実行速度はそれほど変わらない?
855デフォルトの名無しさん:2010/04/02(金) 17:58:54
VC2008では異ディレクトリでも同一ファイル名が使えなくなったと聞きましたが
それって改悪じゃないの?
856デフォルトの名無しさん:2010/04/03(土) 12:33:32
ヴィジュアルCつかえば、ウィンドウの大きさとかボタンとかをいちいちプログラムでつくらなくていいのか?
友達がデーターベースとリンクさせるプログラムでも作って面接する会社に見せろっていってたんだが
それってアクセスとかオラクルっていうのつかうの?
857デフォルトの名無しさん:2010/04/03(土) 13:44:12
過疎ってるようなので他で聞きます
858デフォルトの名無しさん:2010/04/04(日) 02:19:43
過疎ってても>>856の答え松よ
859デフォルトの名無しさん:2010/04/04(日) 03:03:36
大規模アク禁らしいからなぁ
どこいってもだめだろうなぁ
860デフォルトの名無しさん:2010/04/04(日) 03:34:19
そうか・・・orz
861デフォルトの名無しさん:2010/04/05(月) 23:07:52
>>856
ボタンを貼り付けて、後はそのボタンを押した時の処理を
書けば、簡単なことならできる。

Visual C++ 2008 Express Edition インストール時に
SQL Server 2008 Express Edition をインストールするか
どうか選択できるから、データベースはとりあえず
SQL Server を使えばいいと思う。

でも、そんなことを聞いてるレベルで、自分が得意でないことを
「できます」と言って入社するのも、どうかと思う。そんなに
その会社で働きたいの?
862デフォルトの名無しさん:2010/04/06(火) 05:24:19
嘘ついて入社する気はさらさらないが、CとJavaの基礎がわかるレベルで
実務経験0だと30社は雇ってくれないみたいだから、新しい技術か資格を
取るべきかな・・・と思いまして。
863デフォルトの名無しさん:2010/04/06(火) 20:23:48
>>862
その求人ってハローワークの求人かな? ハローワークの
求人って、(地域差はあるかもだけど)「経験あり」の求人って
多いですよねぇ。

仕事に必要なのは知識ではなくて、自分で考えて何かを
作り上げる力だと思う。

知らないことは必要になったらそのときに調べながら作る。

とりあえず、その友人の言うように、実際に何かを作ってみる
のがいいと思う。>>861 のは無料で利用できるから、いろいろ
やってみたらいいと思う。
864デフォルトの名無しさん:2010/04/06(火) 20:46:34
多いと言うかそれしか無いな@地方Y県
865デフォルトの名無しさん:2010/04/06(火) 22:55:00
>>862
とりあえず自分で作ってみろ
ウダウダ言ってる暇あったら少しでも経験を積め
仮に入ったとしても自分で覚える癖つけておかないと続かないぞ
866デフォルトの名無しさん:2010/04/09(金) 08:08:21
char配列でも何でも良いけど、文字列変数に格納された関数名の
関数を実行する方法は無いでしょうか?

char name[] = "func";
void func(){ printf("Hello"); }

//これでhelloが標準出力されるような方法
hoge(name);

よろしくお願いします。
867デフォルトの名無しさん:2010/04/09(金) 09:17:16
Ruby のソースコード読むとやり方が書いてあるよ ^ ^
868866:2010/04/09(金) 09:24:21
>>867
866に対するレスでしょうか?
Rubyのどのソースを読むと書いてありますか?
869デフォルトの名無しさん:2010/04/09(金) 10:05:00
870866:2010/04/09(金) 10:21:43
>>869
ざっと目を通してみましたが、対応テーブルを作って
それで相互変換して解決するって事ですか
もうちょっと読み込んでみます
871デフォルトの名無しさん:2010/04/09(金) 11:15:33
一般的なC言語の質問なら人が多そうなスレで質問した方が早く回答がもらえる気がするけど
わざわざ人が少ないVC初心者スレで質問してるわけだから何か特別な事情でもあるんだろ
872デフォルトの名無しさん:2010/04/12(月) 16:26:41
すみません、お知恵お貸しください。
VC2008(元のプロジェクトは それ以前のVer.で作成)を使ってます。
新たに スタティックな

std::list<int> foo;

を追加したところ WinMainCRTStartup() 内で
ハンドルされてない例外
が発生するようになってしまいました。
list でなく vector なら 発生しないのですが、
どの辺から探っていけばよいのか ご教授願えませんか
よろしくお願いします。
873デフォルトの名無しさん:2010/04/12(月) 16:31:52
参照してるライブラリが旧開発環境のもの使ってるとか?
いわゆるヘッダやらlibやらのinclude先フォルダがそうなってるって感じ?
874872:2010/04/12(月) 20:32:40
>>873 ご返答ありがとうございます。

開発機には VS2008 しかインストールしてなく、
includeパス、追加lib も 一通り調べてみたつもりなのですが…

プロジェクトの フレームワークが、 2.0 と 3.5 混在してるんですが
これって 大丈夫なんでしょうか??? (変更させかた判らないんだけど orz)
875デフォルトの名無しさん:2010/04/14(水) 21:08:25
vc++(2008) Express Editionでdatファイルを作りたいのですが、どうすればよいでしょう?
876デフォルトの名無しさん:2010/04/14(水) 21:40:55
#include <stdio.h>
int main(){
return fopen('hoge.dat', 'wb');
}
877デフォルトの名無しさん:2010/04/14(水) 22:36:45
>>876
シングルクォーテーションでいいのか?
878デフォルトの名無しさん:2010/04/14(水) 22:57:46
ネタだろうからどうでもいいだろ
気になるんなら自分で試すか、続きはCスレででもやってくれ
879デフォルトの名無しさん:2010/04/14(水) 23:00:30
突っ込みどころ満載だからな
一目でネタだと判るかどうかが
初心者かどうかの分かれ目
と無理やりスレタイに沿ってみる
880デフォルトの名無しさん:2010/04/14(水) 23:13:57
c言語かじった程度の俺にはまともにしか見えない
881デフォルトの名無しさん:2010/04/15(木) 08:57:58
fopenの戻り値はintじゃないよ。
882デフォルトの名無しさん:2010/04/15(木) 09:19:38
fopenでぐぐればええがな
883デフォルトの名無しさん:2010/04/15(木) 11:18:04
なんでこんなにいっぱい釣られてるんだ?
世代交代始まったのか?
884デフォルトの名無しさん:2010/04/15(木) 11:22:51
>>881
#include <stdio.h> の行を取ってしまって

下だけにしたら動いた

int main(){
  return fopen("gomi.dat", "wb");
}
885デフォルトの名無しさん:2010/04/15(木) 12:14:42
>>884
宣言されていない関数の戻り値の型はintとみなされる。
886デフォルトの名無しさん:2010/04/15(木) 13:52:48
これは良い教材w
887デフォルトの名無しさん:2010/04/15(木) 19:53:36
すばらしいw
888デフォルトの名無しさん:2010/04/15(木) 20:05:47
888
889デフォルトの名無しさん:2010/04/15(木) 20:08:22
Cの本質を上手く突いているね
890デフォルトの名無しさん:2010/04/18(日) 09:17:04
MS932の文字列をUTF-16に変換する関数を教えてください
891デフォルトの名無しさん:2010/04/18(日) 13:27:50
>>890
MultiByteToWideChar()で。
892デフォルトの名無しさん:2010/04/18(日) 20:03:12

ダイアログボックスにチェックボックス付のCTreeCtrl を配置しています。

クリックした際に、適当な処理test()をしたいんですが、
OnNMClickTree1を抜けきらないと、チェック状態が変化しないようです。

よって、OnNMClickTree1の中で、SetCheckでクリック時の状態の反転を
セットしました。

すると、チェック状態にならないようです。

void CXXXXDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{

 test();
 *pResult = 0;
}

test内でツリーアイテムの状態をみてるので、test前までにツリーの状態を更新
したいのですが、なにかいいアイデアありませんか?
893デフォルトの名無しさん:2010/04/18(日) 21:10:01
抜けてからtestでいいんだろ
894デフォルトの名無しさん:2010/04/18(日) 21:22:15
>>893
抜けてから、testでいいですけど、それだとtestを呼ぶためにもう1アクション
必要になりますよね
895デフォルトの名無しさん:2010/04/18(日) 21:24:37
>>894の続きです。

例えば、エクスプローラだと、左側のツリー内のフォルダをクリックすると、
右側のリストが更新されますよね

896デフォルトの名無しさん:2010/04/18(日) 21:35:08
>右側のリストが更新されますよね

TVN_SELCHANGED時にリストを更新してるからね
897デフォルトの名無しさん:2010/04/18(日) 21:41:30
そうですか・・・
898デフォルトの名無しさん:2010/04/26(月) 19:46:41
VC++を初めて触った為、本気で初心者な質問で恐縮なんですが・・・。

コントロールを配列で指定してText等のプロパティを改変するにはどの様にしたらいいのでしょうか?

例としてVBで話させて頂きますが、Label1〜Label10をデザイナで配置して、

For i = 1 To 10
ControlName = "Label" & i //Dim ControlName As String
Controls(ControlName).Text = "aaa"
Next i

という感じの処理をVC++でも行いたいのですが・・・。

イメージとしては
System::String^ ControlName;
for(i=1;i<=10;i++){
ControlName = "Label" +i
Controls(ControlName)->Text="aaa";
}
という感じかと思ったんですが、どうも上手く行かず・・・。
どなたかご教示頂けないでしょうか?

環境は、VC++2008ExpressでCLRのWindowsフォームアプリケーションとして作っています。
よろしくお願いします。
899デフォルトの名無しさん:2010/04/26(月) 19:50:17
Controls[ControlName]
あとC系言語ではカウンタ回すときはfor(i=1;i<=10;i++)ではなくfor(i=0;i<10;i++)が普通
900デフォルトの名無しさん:2010/04/26(月) 20:13:19
つーか、普通の配列では連想配列にならないよ。
つまり、std::mapを使わないとダメ。
901デフォルトの名無しさん:2010/04/26(月) 20:26:17
いやForm.Controlsはコントロール名をインデックスにして検索できる
902デフォルトの名無しさん:2010/04/26(月) 20:56:47
フォームならVB使ってればいい
903デフォルトの名無しさん:2010/04/26(月) 21:11:31
遅れてすみません、>>899さんの助言で無事動きました!
しかし、今後を考えるとstd::mapも覚えておいた方がよさそうですね。
皆さんありがとうございました!
904デフォルトの名無しさん:2010/04/26(月) 21:16:18
ちゃんとC++やるんだったらまずCLRを捨てなさい
905デフォルトの名無しさん:2010/04/26(月) 21:22:53
>>904
Win32よりCLRの方が共通動作環境ということでいいのかと思ったのですが・・・。
.Net Frameworkって実はそんなに普及してないんですかね?
906デフォルトの名無しさん:2010/04/26(月) 21:25:06
なんだ、.Netか。失敬。
907デフォルトの名無しさん:2010/04/26(月) 21:26:17
.NETがどうっていうんじゃなくてC++/CLIはC++じゃなくて全く別の言語
そして.NETプログラミングを行ううえでは最悪の言語
908デフォルトの名無しさん:2010/04/26(月) 21:38:51
.netでやるならC#でやればいいのに
なぜC++
909デフォルトの名無しさん:2010/04/26(月) 21:40:50
なるほど。
ちょっと調べてみたら『「.netで使えるC++」ではありません。』との文章がすぐ見つかりましたが、まさにこの勘違いをしていました。
基本的にUNIX環境で開発しているので、この勘違いしたままUNIX環境でC++開発始めたら大変なことになってましたね・・・。
早めに気付かせていただいて助かりました・・・。
910デフォルトの名無しさん:2010/04/26(月) 21:46:04
えー
911デフォルトの名無しさん:2010/04/26(月) 21:46:50
>>906>>908
申し訳ない、言い方が悪かったです。
開発は.Netじゃないんですが、『CLRで開発するのは実行環境も.Netインストールしてないと駄目だからやめた方がいい。』っていう話かと思って.Netの名前を挙げました。
というか、なんだか基本的な部分で勘違いしてる気もしてきましたが・・・
912デフォルトの名無しさん:2010/04/26(月) 21:53:44
そもそもC++/CLIはWindows + .NET環境でないと動かないよ
913デフォルトの名無しさん:2010/04/26(月) 21:56:30
UNIXならJavaで作ったほうがいいのに
914デフォルトの名無しさん:2010/04/26(月) 22:15:25
>>913
個人的にはJavaやりたいんですが、Visual C++って部分は仕様として決定事項でして・・・。
915デフォルトの名無しさん:2010/04/26(月) 22:20:28
「Visual C++で」って部分が変えられなくてVBに(というか.Net Frameworkに)そこそこ通じているなら
C++/CLIはまぁありかなーと思わんこともないが

そこそこレベルすら解ってないならC++を1からやって
Win32API方面に走るほうが結果的に早いかもしれぬ
916デフォルトの名無しさん:2010/04/26(月) 22:42:42
未経験でC++かよ
死ぬしかないな
まだC++/CLIならなんとかなるかもしれないがUNIXじゃどうしようもない
917デフォルトの名無しさん:2010/04/26(月) 22:44:11
UNIXのVBであるJavaでやるべき
918デフォルトの名無しさん:2010/04/26(月) 22:46:46
C++は地獄の言語。
熱狂的な支持もあるが。
919デフォルトの名無しさん:2010/04/26(月) 23:02:47
C++が地獄ならC++/CLIは一体
920デフォルトの名無しさん:2010/04/26(月) 23:07:02
C++/CLIはアンマネージ地獄に踏み込まなければゲロまみれのC#として使えます
921デフォルトの名無しさん:2010/04/27(火) 00:30:38
C++/CLIはもうプログラミング言語じゃねぇんじゃね。
922デフォルトの名無しさん:2010/04/27(火) 17:52:09
MSも葬りたがってるからな
923デフォルトの名無しさん:2010/04/27(火) 19:59:59
>>922
ウンコはウンコを生み出したヤツが片付けるべき。
さっさとMSもC++/CLIは無かった事にすべき。

ISOだったかその辺のところに仕様を一蹴されたんでしょ?
924デフォルトの名無しさん:2010/04/29(木) 00:44:42
C++と.NETの良いとこ取りが出来れば良かったのに・・・
925デフォルトの名無しさん:2010/04/29(木) 01:21:47
ネイティブ吐けない時点でC++を使うメリットってまったく無いな
926デフォルトの名無しさん:2010/04/29(木) 12:48:00
VC++2010なのですが、デバッグなしで開始はどこでやればいいのでしょうか?
調べてみたんですが、いまいち場所がわからなくて、
927デフォルトの名無しさん:2010/04/29(木) 13:47:32
メニューからでもツールバーからでもキーボードからでも実行できるはずだけど、
どこにもみつからなかったら普通のexeと同じように実行するだけ
928デフォルトの名無しさん:2010/04/29(木) 14:27:52
>>925
> ネイティブ吐けない時点でC++を使うメリットってまったく無いな
??バカ??
929デフォルトの名無しさん:2010/04/29(木) 20:29:17
>>926
「ツール>設定>上級者設定」を選択すると「デバッグ>デバッグなしで開始」が表示されるようになる。
それかCtrl+F5。
930デフォルトの名無しさん:2010/05/02(日) 13:15:12
VC++9でMFCダイアログベースでちょっとしたツールを作っています。
大枠できたのですが、起動しただけでメモリを8MBも消費しています。

メモリの消費量を抑えたいんですが、どのようなことから改造していけば
いいでしょうか?
指標をお願いします。

931デフォルトの名無しさん:2010/05/02(日) 13:17:05
ウィンドウを最小化する
932デフォルトの名無しさん:2010/05/02(日) 13:36:47
ウィザードで作った最小限のプログラムから
順番に中身付け足していけばどこが原因かぐらいわかるだろ
933デフォルトの名無しさん:2010/05/02(日) 13:47:38
>>932
やってみないと分からない程度の浅はかな知識しかない人は
レス不要です
934デフォルトの名無しさん:2010/05/02(日) 13:59:27
ちょっとしたツールですから
935デフォルトの名無しさん:2010/05/02(日) 14:01:20
>>930
GUI のアプリは、各ウィンドウにビットマップを持っているから、
ダイアログのサイズが、800x600 で、ダイアログのほぼ全面に
ボタンとかラベルとかを貼り付けていると仮定すると、さらに
800x600 くらいの大きさののビットマップを持っている状態
であるといえる。これらのビットマップを保持するためにメモリ
はどれくらい必要かというと、1ピクセルあたり24ビットとして、
大雑把に計算すると、

2 * 800 * 600 * 4 / 1024 / 1024 = 3.66MB

ほど必要になる。
936デフォルトの名無しさん:2010/05/02(日) 14:09:37
試しに今起動してるプログラムでやってみた
ウインドウサイズを変えてみてもメモリ使用量は変化なし
最小化したらメモリ使用量は激減
最小化から元に戻したら最小化する前の半分ぐらいになった。
937デフォルトの名無しさん:2010/05/02(日) 14:12:52
>>935
そうすると残りの4MB強程度のメモリはダイアログクラスにメンバ変数として追加した
からですかね?

938デフォルトの名無しさん:2010/05/02(日) 14:15:32
>>937
そうすると、>>935さんの理屈と矛盾するように思えますけど?
ダイアログはビットマップを持っていて、最低でもその分は消費する
と解釈できるのですが。
939デフォルトの名無しさん:2010/05/02(日) 14:23:09
ビットマップ+プログラムのコードと変数をメモリ上に展開したもの+DLL+スタック等
だと思うんだけど、DDL とスタックはプロセスごとにメモリを消費するの?それとも
他のプロセスと同じメモリ領域を共有している?
940デフォルトの名無しさん:2010/05/02(日) 14:23:29
メモ帳(notepad)で ヘルプ > バージョン情報 でダイアログ出しても
メモリ使用量は300KBぐらいしか増えないね
941デフォルトの名無しさん:2010/05/02(日) 18:08:49
>>935
> GUI のアプリは、各ウィンドウにビットマップを持っている

そもそもこれ本当なの?
942デフォルトの名無しさん:2010/05/02(日) 18:32:17
偉そうに回答してる奴も初心者だったかw
次スレからスレタイ変更願う

★初心者がVisual C++を教えるスレ★ Part〜
      ~~~ 
943デフォルトの名無しさん:2010/05/02(日) 18:38:51
高々、8MB程度でウダウダ言うほうがおかしい
今日のパソコンはたいてい1GB以上は積んでんだろ?
944デフォルトの名無しさん:2010/05/02(日) 18:40:29
VS2008で、実行ファイルを、$(SolutionDir)Debug とかではなく別のディレクトリ(仮にD:\TEST)に吐き、
なおかつその状態でVSから実行したいと考えています。

$(SolutionDir)Debug
$(SolutionDir)Release
$(SolutionDir)Project ←以前はここにDLLなんかを置いていた

普通に$(SolutionDir)Debug に実行ファイルを出している場合は、
プロジェクトが依存してるDLLや読み込むINIファイルを $(SolutionDir)Project に置くと
VSから実行したとききちんと読み込めているようです。

VSのプロジェクト設定を弄って 構成>全般>出力ディレクトリ を変更すると
D;\TESTに実行ファイルを出すことはできるのですが、この場合、
実行ファイルが置かれているはずのパスがおかしくなるようで、
LoadLibraryで明示的にDLLを読み込む所でプログラムが落ちます。

プロジェクト設定の 構成プロパティ>デバッグ>作業ディレクトリ あたりが怪しいかな?
と思って試しに書き換えたのですが、やっぱりDLLが見つからないようでLoadLibraryする所で落ちてしまいます。

できない事はないんじゃないかなと思いながらも自力ではさっぱりだったので、
どなたか思い当たることがあればお願いします。
945デフォルトの名無しさん:2010/05/02(日) 18:55:03
DLLをexeの出力先とおなじ場所においちゃだめなの?
946デフォルトの名無しさん:2010/05/02(日) 19:37:34
>>944
ttp://www.ne.jp/asahi/hishidama/home/tech/vcpp/setting.html
ここの一番下を参考にどうぞ
947デフォルトの名無しさん:2010/05/03(月) 12:56:42
c:\autoexec.bat

set lib=d:\test
を書いて再起動
948デフォルトの名無しさん:2010/05/03(月) 13:59:15
hoge.exe の 0x77d0f48f で初回の例外が発生しました: 0xC0000005: 場所 0x27044854
を読み込み中にアクセス違反が発生しました。

と出力ウィンドウに出力されます。
なにをヒントに探せばいいのでしょうか?

949デフォルトの名無しさん:2010/05/03(月) 14:19:48
デバッガ使える状況なのか、ユーザーからそういう報告を受けただけなのかでかわってくるが、、
それはおそらく未初期化のポインタ使ってアクセスしてるんじゃないかな
mapファイルでも出して0x77d0f48f がどの関数なのか見てみたら
950デフォルトの名無しさん:2010/05/03(月) 14:22:12
って出力ウインドウか
そこで止まらない?
再試行ボタン押せば該当個所表示されないか?
951デフォルトの名無しさん:2010/05/03(月) 14:50:01
レスありがとうございます。
環境を書いていませんでした。 VC++2008MFCです。

>>949
mapファイルというのをはじめて聞きました。
ぐぐってみて、挑戦してみます。

確かにどのメソッド内から発生しているのかさえわかれば、追いやすいんですが・・・

>>950
止まりません。
952デフォルトの名無しさん:2010/05/03(月) 15:01:08
MFCってことはEEじゃないのか
なら、デバッグ-例外-Win32 Exceptions でC0000005にチェック入れてみるとか。

強引にステップ実行しながら特定する手もある
953デフォルトの名無しさん:2010/05/03(月) 15:42:27
>>952
レスありがとうございます。
デバッガが停止しました。これで追っかけれそうです。

マップファイルを見ても、0x77d0f48f 0xC0000005 0x27044854
が見つからず、ググってました
954デフォルトの名無しさん:2010/05/03(月) 17:08:17
そりゃそのものずばりのアドレスがあることはほぼ無いだろw
それが含まれるものを探すんだよ
でもデバッガあるならそれでいいじゃない
955デフォルトの名無しさん:2010/05/03(月) 17:46:23
>>954
ほぼ無いのでれば、ある事もあるんでしょう
その違いは?
956デフォルトの名無しさん:2010/05/03(月) 18:18:31
そりゃ変数のアドレスならそのままだろう
プログラムのある地点のアドレスだと関数の戦闘のアドレスしか書いてないんだから
途中のアドレスは書いてないよ
957デフォルトの名無しさん:2010/05/03(月) 20:34:28
シンボル使ったデバッグのやり方を覚えなって
どうせASLRでアドレスなんて変わりまくるようになる
958デフォルトの名無しさん:2010/05/03(月) 23:03:43
オーナードローについて教えてください。

ダイアログにCListCtrlに貼り付けて、CListCtrlをオーナードローする場合

・ダイアログがWM_DRAWITEMを捕まえる
・CListCtrlを派生させて、DrawItemをオーバーライドする。

どちらが、正解ですか?
オーナードローとは所有者が描画するってことですよね
そうすると、上が正解だと思うんですが・・・
959デフォルトの名無しさん:2010/05/04(火) 07:26:36
>>958
下のリンク先のはちょっと古いMFCのドキュメントだが、内容的には今でも通用する。
これ読めば理解できるだろう。
特に最初の「メッセージ リフレクション (メッセージ返送) とは」の項な。

テクニカル ノート 62: Windows コントロールのメッセージ返送
http://msdn.microsoft.com/ja-jp/library/eeah46xd.aspx
960デフォルトの名無しさん:2010/05/07(金) 13:09:50
Visual C++2008で全く同じソースコードだけど
デバッグ時に出力ウィンドウに文字が出力されるプロジェクトとされないプロジェクトがある
違いはどこにあるんですか?
961デフォルトの名無しさん:2010/05/07(金) 14:00:23
プロジェクトが違う
962デフォルトの名無しさん:2010/05/07(金) 16:37:25
VisualC++で
#include "../include/GV.h"
これの..っていうのはなんですか?
どういう意味があるのでしょうか?
963デフォルトの名無しさん:2010/05/07(金) 16:39:58
>>962
一つ上階層のディレクトリの意味。
964962:2010/05/07(金) 16:49:23
こういう解釈でよろしいでしょうか?
sourceフォルダとincludeフォルダは同一フォルダ内(同一階層ですか?)
sourceフォルダ内にはmain.cppというソースファイルがある
main.cppに
#include "../include/GV.h"
と記述がある
includeフォルダ内にGV.hというヘッダファイルがある
main.cppの階層(sourceフォルダ内)からGV.hにアクセスするには
main.cppの階層から見て一つ上の階層である階層(sourceとincludeが存在する階層)
のincludeフォルダ内のGV.hファイルなので
"../include/GV.h"
となる。
965デフォルトの名無しさん:2010/05/07(金) 21:37:38
>>960
・ロケールを設定していない
・リリースビルド
966デフォルトの名無しさん:2010/05/07(金) 21:58:46
>>958
鋭いところに気づいてるな・・・

確かに、その辺をごっちゃにして、HPでえらそうに講釈垂れてる
恥ずかしい奴いるけどなw

オーナードローっていうのは上記が正解だよ
967デフォルトの名無しさん:2010/05/07(金) 22:33:29
http://msdn.microsoft.com/en-us/library/kfd1y2sd.aspx
CListCtrl::DrawItem

Called by the framework when a visual aspect of an owner-draw list view control changes.

厳密に言ったら絵の所有者は画家ではないのでは?
968デフォルトの名無しさん:2010/05/07(金) 22:42:57
鋭いところに気づいてるにしては、ダイアログという言葉には疑問を感じないのだろうか?
969デフォルトの名無しさん:2010/05/07(金) 23:21:59
このスレはダイアログばかりでつまらん
970デフォルトの名無しさん:2010/05/07(金) 23:56:12
>>958
派生クラス自身で描くのは、MFCでは自己描画と言ってる。
http://msdn.microsoft.com/ja-jp/library/bk2h3c6w(VS.80).aspx
971デフォルトの名無しさん:2010/05/08(土) 18:15:16
VC++2010のプロジェクトプロパティ・構成プロパティ・C++コード生成で
Debug、/MTbと/MDbはどう違うのですか?
Release、/MTと/MDはどう違うのですか?
972デフォルトの名無しさん:2010/05/08(土) 18:44:43
2010にはMSDNついてないんだ
973デフォルトの名無しさん:2010/05/08(土) 23:16:07
VC++ってVC#に比べるとコントロールの数がめちゃくちゃ少ないんですけど・・・
もう、MSはVC++を見捨ててるの?
974デフォルトの名無しさん:2010/05/08(土) 23:21:04
MFCだったらそもそも期待するのが間違ってるし
C++/CLIなら実際にはC#と同じだろ
まあC++/CLIは見捨てられましたが
975デフォルトの名無しさん:2010/05/09(日) 09:14:48
>>971
vcランタイムと静的にリンクするかどうかの違い
976デフォルトの名無しさん:2010/05/09(日) 12:40:42
>>973
2010ではリソースエディタでリボンなどを置けるらしいよ。
977デフォルトの名無しさん:2010/05/10(月) 17:17:04
おすすめの入門書はなんでしょうか?
978デフォルトの名無しさん:2010/05/11(火) 00:13:43
VC++2010で英数字をひらがなに変換したいのですが
半角/全角キーを押しても反応がありません
どうすればいいのでしょうか?
979デフォルトの名無しさん:2010/05/11(火) 00:17:00
>>978
>1
--
この板はプログラムを作る人のための板です。
プログラム・ソフトの使い方は PC 初心者板やソフトウェア板へ。
980デフォルトの名無しさん:2010/05/11(火) 00:18:38
>>977
新版 明解C言語 入門編
981デフォルトの名無しさん:2010/05/11(火) 11:27:57
ここのみんなCでやってるの?
982デフォルトの名無しさん:2010/05/11(火) 11:30:47
>>973
だってVC++っ
は全然ビジュアルじゃないから
983デフォルトの名無しさん:2010/05/11(火) 11:56:45
15年前はこれでもVisualだったんだからねっ
984デフォルトの名無しさん:2010/05/11(火) 12:58:19
visual basicに真似てネーミングしたんだろ。
visual と付いているから貼り付けできるとは限らない。
985デフォルトの名無しさん:2010/05/11(火) 13:02:37
2年先行していたbasicに合わせただけ。中身は違っていたが。


Visual Basic 1.0  1991年
オブジェクト指向の基本的な部分を実装。

Visual C++ 1.0  1993年
986デフォルトの名無しさん:2010/05/11(火) 13:02:55
コーディングC++
てのはどう?
987デフォルトの名無しさん:2010/05/11(火) 13:05:17
VCとやるから勘違いしてる人が大勢になる
だから
コーディングC++
988デフォルトの名無しさん:2010/05/11(火) 13:06:01
>>985
詳しいですね
989デフォルトの名無しさん
じじいばっかりか