★初心者にVisual C++ ..
[2ch|▼Menu]
152:デフォルトの名無しさん
08/05/20 23:36:21
すみません。今日も質問させてください。
visual c++ 2008 Expressでwindowsフォームアプリケーションを作成しています。

ビルドしたexeを他の人のマシンで起動しようとすると、
>このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。
と出て起動できませんでした。

色々調べた結果、以下のとおり解釈しました。
@visual studioがインストールされていない環境で動かすには
 静的リンクでコンパイルする必要がある。
Awindowsフォームアプリケーション(でデザイナからレイアウトしているような場合)
 では静的リンクは不可能
Bwindowsフォームアプリケーションでしかデザイナは使えない
Cデザイナが使えない場合、手打ちで「上からxピクセル。。。」と
 コーディングしていくしかない

質問ですが、上記解釈は正しいでしょうか。
ほんのちょっと上のレスでそれらしいやりとりが見受けられましたが、
自分の思っているソレの話のことなのか、いまいち自信がないので、
ご回答のほどよろしくお願いします。

153:デフォルトの名無しさん
08/05/20 23:44:15
>>151
そのサイトは残念ながら参考にならない。
そのソースは古くて、現代C++では通用しない。

#include <iostream>

int main()
{
char ss[80];

std::cout << "何か入力してください";
std::cin >> ss;
std::cout << "入力は[" << ss << "]です" << std::endl;
}


154:デフォルトの名無しさん
08/05/20 23:48:36
>>152
フォームアプリケーションなら相手のPCに.NET Frameworkを入れればいけるはず。
VS 2008だから.NET Framework 3.5だ。

たとえデザイナを使わなかったとしても、
.NET Frameworkを使うC++/CLIアプリケーションである限り
静的リンクはできない。
それにVSが無い環境で使えないなんて使い物にならない機能が
わざわざ用意されているはずがない。正規の手順でランタイムを用意すれば、
VSがない環境でもVC++プログラムは実行できる。


155:デフォルトの名無しさん
08/05/20 23:52:26
VC++初心者です。
GUIの部分は、.NET Framework を使って書いて、
内部的な(例えば)通信の部分は、Win32API で書くってできます?
できたとしたら、それは邪道ですか?

156:デフォルトの名無しさん
08/05/20 23:57:42
全然問題ない。
むしろそういうことができるのがVC++の強み。

157:デフォルトの名無しさん
08/05/21 00:06:11
>>156
ありがとうございます。
そうですか、楽できるとこは楽したかったんです。
MFCも少し勉強し始めてたんですが、中断して C++/CLI の方をやります。

158:デフォルトの名無しさん
08/05/21 00:08:45
>>154

レスありがとうございます。

>フォームアプリケーションなら相手のPCに.NET Frameworkを入れればいけるはず。
>VS 2008だから.NET Framework 3.5だ。
>>133-138の流れを見るに、
相手のPCに.NET Frameworkが入っていることを期待するのを
期待してはいけない、という流れに繋がるという、と理解して正しいでしょうか。。。

>正規の手順でランタイムを用意すれば、
URLリンク(www.microsoft.com)
こちらですね。ご親切にありがとうございます。
まだ詳しく見ていませんが、
これを私がインストールするわけではなく、
相手のPCにインストールしてもらう、という認識でよろしいでしょうか
(煩わしい質問であれば、明日にでも詳しく調べますので返信は不要です)
だとすると、.NET Frameworkの軽いVer、というイメージですかね。。。
数年前に「使用するにはVBxxランタイムが必要です」といった
アプリを見た記憶があります。
それくらいなら、普通に導入してもらえそうですね。
本当に、ありがとうございました。


159:デフォルトの名無しさん
08/05/21 00:21:51
>>153 ありがとうございます!コンパイルできました!
本が古すぎたんですね・・・たしかに今見たら98年出版の本でした
後せっかくなので参考にお聞きしたいんですが、追加記述された std:: と std::endl;っていうのは
なんなのでしょうか?最初は変数の前に付けるものといった、約束事みたいな感じで覚えておけばいいのでしょうか?
    
     

160:デフォルトの名無しさん
08/05/21 00:34:40
98年と言えばISOでC++標準が最初に出た年。

endlは結構古くからあったと思うけど、
'\n'の出力に加えバッファのフラッシュを行うもの。
だから時と場合によって\nを直接使うこともある。
どっちにするかはケースバイケース。

std::は名前空間という機能によるもの。
詳しく知りたければ、ググってもいいし、最近の本なら書いているだろうし。

161:デフォルトの名無しさん
08/05/21 00:40:01
なるほど、とりあえず最近の本買ってみます
親切にありがとうございました!


162:デフォルトの名無しさん
08/05/21 00:46:13
>>161
その程度ならググれ。
良い本を探すのは難しい。

163:デフォルトの名無しさん
08/05/21 12:01:42
visual studio 2005のWindowsフォームアプリケーションで作成中です。
文字列の分割がうまくいきません。

String^ data0 = "a/b/c";
wchar_t separator = '/';
array<String^>^ data1 = data0->Split(separator, StringSplitOptions::None);

結果的には配列data1にdata0の要素を格納したいのですが、このやり方ではうまくいきません。
どなたかご教示願いませんでしょうか?

164:デフォルトの名無しさん
08/05/21 12:55:49
>>163
URLリンク(msdn.microsoft.com)
最初の引数は文字じゃなくて、文字の配列だぜ。

165:デフォルトの名無しさん
08/05/21 13:12:24
>>164
ご指摘ありがとうございます。
無事解決しました。

166:デフォルトの名無しさん
08/05/21 21:18:51
>158
それをC++のランタイムなので、それで解決できるなら、静的リンクもできるという話。

C++/CLI、Form使ってるというなら、
URLリンク(www.microsoft.com)
こっちを再配布しないとイケナイ。

167:デフォルトの名無しさん
08/05/21 22:07:04
VC2003 を使っています。
STLのvectorを参考に、自前のクラスにイテレーターっぽい機能を付けてみようとして、
行き詰まっています。

以下のようなコードを書いているのですが、begin() がインライン展開されません。
vectorのbegin() はインライン展開されているみたいで、何が違うのか分からないです。

class B
{
public:
A* aa;
class iterator : public std::iterator<std::random_access_iterator_tag, double, ptrdiff_t, double*, double>
{
A* a;

public:
iterator( A* _a ) : a( _a )
{
};

~iterator( void )
{
};
};

B( void ) : aa( NULL ) {};
~B( void ){};
iterator begin()
{
return( iterator( aa ) );
};
};

168:デフォルトの名無しさん
08/05/21 23:35:23
【初心者歓迎】C/C++室 Ver.54【環境依存OK】
スレリンク(tech板)


169:デフォルトの名無しさん
08/05/21 23:40:38
>>167
まさか何の最適化オプションも指定していないなんてことはないよな。

170:デフォルトの名無しさん
08/05/22 10:59:46
VC++2008EEでツールチップを表示するにはどうしたら良いのでしょうか。
ググってもMFCのCToolTipCtrlしかヒットしません。

例えばステータスバーに収まり切らない文字列を表示したいのです。
.NETで例えるなら statusStrip1.ShowItemToolTips = true; に相当する処理です。

171:デフォルトの名無しさん
08/05/22 11:09:18
>>170
URLリンク(msdn.microsoft.com)

172:デフォルトの名無しさん
08/05/22 15:30:07
>>171
ありがとうございます、取敢えずツールチップを表示する事は出来ました。
MFCの解説もエミュレートしているものは参考になりました。
まだステータスバーの位置のみで表示出来ませんが、もう少し頑張ってみます。

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static HWND hTooltip;
static TOOLINFO ti;
switch (msg)
{
case WM_CREATE:
InitCommonControls();
hTooltip = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, g_hInst, NULL);
GetClientRect(hWnd, &ti.rect);
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = TTF_SUBCLASS;
ti.hwnd = hWnd;
ti.lpszText = L"ツールチップのテスト";
SendMessage(hTooltip, TTM_ADDTOOL, 0, (LPARAM)&ti);
SendMessage(hTooltip, TTM_SETTITLE, TTI_INFO, (LPARAM)L"タイトル");
SendMessage(hTooltip, TTM_SETTIPBKCOLOR, (WPARAM)RGB(221, 238, 255), 0);
(後略)

173:デフォルトの名無しさん
08/05/22 17:05:34
visual studio 2005のWindowsフォームアプリケーションで作成中です。

textBoxに入力制限をさせたいのですが、やり方がわかりません。
パスワードを入力するときみたいに、入力された文字が強制的に半角英数字になるように
設定させるにはどうしたら良いのでしょうか?

どなたかお願いします。

174:デフォルトの名無しさん
08/05/22 17:35:48
変化があったタイミングで読んで変換する

175:デフォルトの名無しさん
08/05/22 17:47:34
>>173
プロパティのPasswordCharの項目に*

176:175
08/05/22 17:48:21
ああ、半角英数字か・・・
ゴメンゴメン。忘れて

177:デフォルトの名無しさん
08/05/22 18:46:22
IMEをOFFにするか自分でキー入力読む

178:デフォルトの名無しさん
08/05/22 19:46:30
作りたいプログラムがあり、何か言語を習得しようかと考えています
過去にまともなものをプログラムした経験はほとんどなく
HSPでぷよぷよの模写を遊びで作ったことがある程度です
言語としてはCOBOLやC++をかじった程度ポインタなどは概念を踏まえて
あるていど辞書を引きながら書くことはできます。
プログラムに関する技量などは自分で調べたりしながら向上させていこうと思っているのですが

何を本格的に勉強しようか悩みTurbo DelphiかVC++で行こうと考えて
とりあえずVC++2008無償を入れてみたのですが
初めて扱う上に初めての開発環境でソフトの機能や基本的な使い方を習得するだけで挫けそうです
VC++の勉強サイトなどをみても2008の環境で説明されている所が見つけられず
新規ファイルを作る段階でさえCLTとWin32の詳細な意味を調べてテンプレート形式もそれぞれ調べて…
書こうと思ってもサイトで提示されている項目が無いたびに色々調べたり
プログラムを書く時間よりもやりたいことをする手順なんかで悩んでる時間のほうが長いです

開発環境2008で勉強できるところは無いでしょうか_| ̄|○ il||li



179:デフォルトの名無しさん
08/05/22 20:29:33
何を作りたいの?
HSPでぷよぷよ作れたなら結構スキルはあるんじゃない?

180:デフォルトの名無しさん
08/05/22 20:54:02
おとなしくVC++2005とかBC++にしておけば?
今なら腐るほど解説ページあるぞ

181:デフォルトの名無しさん
08/05/22 21:00:43
対象ウィンドウ内の詳細なデータを調べて
仮想でウィンドウの模写的なもの(できるだけの機能を残して)を作ることは出来ないかなと
ただ深く追求していくとプロセスメモリへのアクセスなどクラックの分野になってくるのかな?と思って…

CでもC++でもDelphiでもjavaなんでも他に使いやすい初心者向きのテキストエディタあるやろって話なんですが
覚えたころにはもう使われてませんでしたでは話にならないのでVc++にしようかなぁ…と…
ごめんなさい取り説よめでFAでしたね_| ̄|○ il||li


182:178
08/05/22 21:12:22
↑178です

>>180
レス感謝 win32API使うならCやC++がよさそうなので他のバージョンなりなんなり探してきます
そしておとなしくします!

さようなら2008 ( ´・ω・`)ノ~

183:デフォルトの名無しさん
08/05/22 21:34:20
物凄く不適切な回答を見た。

184:デフォルトの名無しさん
08/05/22 23:17:07
VC++2008EEとVC++2005EEってそんなに違うものなの?

185:デフォルトの名無しさん
08/05/22 23:35:40
両方使ったけど、ほとんど何も変わってない。

186:デフォルトの名無しさん
08/05/22 23:40:54
すみません。今Win32API勉強してるんですが、
WM_INITMENUが呼ばれるタイミングっていうのはどういうタイミングで呼ばれるのですか?

たとえばWM_PAINTは、Windowが隠れたりして再描画が必要なときに呼ばれるみたいですが
WM_INITMENUの呼ばれるタイミングがわかりません。

よろしくお願いします。

187:デフォルトの名無しさん
08/05/22 23:50:39
いえいえこちらこそよろしくお願いします。

188:デフォルトの名無しさん
08/05/22 23:52:24
>>169

Releaseビルドでやってるっす。最適化オプションはO2ですね。
vectorのヘッダーを丸ごとコピーして適当に名前を変えてクラスにしたら、
ちゃんとインライン展開されてるようで。どこがキーなのか分かりません。

189:186
08/05/23 00:07:38
すません。ぐぐったら出てきました。

自己解決です。スレ汚しすません。

190:173
08/05/23 00:35:01
>>177
IMEをDisableにしたら狙った通りに動いてくれました。
ご指摘ありがとうございました。

191:デフォルトの名無しさん
08/05/23 02:29:00
>>186
トレースでもしりゃわかるよ

192:デフォルトの名無しさん
08/05/23 02:41:05
>>188
templateでかけば普通インライン展開されるんじゃなかったけ

193:デフォルトの名無しさん
08/05/23 08:24:12
VC++2003EEとVC++2005EE は結構違うよね

194:デフォルトの名無しさん
08/05/23 09:04:21
エンタープライズだろ

195:デフォルトの名無しさん
08/05/23 09:10:18
なんだ2005よりインストール楽になってるじゃないか
これで挫折するんじゃ救いようがないな

Wikipedia項目リンク
Visual C++ 2008 Express Edition
Visual C++ 2005 Express Editionに続き2007年12月18日から公開されている。
ATLやMFCが付属しない点はVisual C++ 2005 Express Editionと同じであるが、
Windows Platform SDKが標準で同梱されるようになり、
Win32アプリケーションの開発に必要なWindows SDKを別途用意する必要がなくなった。

196:デフォルトの名無しさん
08/05/23 09:14:23
・言語の仕様
・Windowsの仕様
・IDEの使い方
結局これらがわからないとダメなんじゃない?

197:デフォルトの名無しさん
08/05/23 09:17:37
2005と2008だと、細かなところで2008の方が使いやすいな。
俺はInteliSenceで隠れたところがCtrlキーを押すと半透明になるのが一番
便利だな。


198:デフォルトの名無しさん
08/05/23 10:58:15
>>197
知らんかった

199:デフォルトの名無しさん
08/05/23 13:18:18
VC++2005AE購入・インストール済みで、2008EEを入れたんですが、
VC++2008版のATL・MFCは、2005の時のものと大きな差がありますか?
2008EEから2005のMFC・ATL使うと何か弊害が考えられるでしょうか?

200:デフォルトの名無しさん
08/05/23 14:59:45
ライセンス的にどうなのよ

201:デフォルトの名無しさん
08/05/23 16:25:09
VC++2008EEでウィンドウを作成した際にタイトルバーのアイコンが正常に表示されず困っています。

例えばIDI_ICON1と言うアイコンをWNDCLASSEX構造体で

WNDCLASSEX wc;
(中略)
wc.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));

などと指定しても、実際に表示されるのは吹き出しの中に"?"が書かれたアイコン(TTI_INFOと同じ)になってしまいます。
色深度に制限があるのかと思い24bitカラーのアイコンを使ったり実行ファイル用のアイコンをそのまま指定したりもしましたが症状は改善されません。
何が原因でしょうか。

202:デフォルトの名無しさん
08/05/23 16:38:42
>>201
LoadIcon の仕様を確認するんだ。
1つめの引数NULLはWindows標準のアイコンだぞ。

203:デフォルトの名無しさん
08/05/23 17:13:43
>>202
確かめてみたら追加のアイコンはインスタンスハンドルを指定するんですね…見落としていました。

4bit透過色使用アイコンは作成するソフトによっては色抜けしなくなるようです。
GIMP2で漸く色抜けするアイコンが作成出来ました。
本当にありがとうございました。

204:デフォルトの名無しさん
08/05/23 18:02:03
Windows XP、 visual studio .NET(ver2003)でCを勉強し始めたものですが
コマンドライン引数を指定するようなプログラムのソースを書いて実行しても

ファイル名の指定がありません
Press any ker to continue

と出て、うまく行きません。
どうしたらいいですか?

205:デフォルトの名無しさん
08/05/23 18:08:27
プロジェクトのプロパティのデバッグにコマンドライン引数の指定できるとこないか?

206:デフォルトの名無しさん
08/05/23 18:09:13
>>204
デバッガの使い方の話だよね?
プロジェクトのプロパティの「デバッグ」→「動作」→「コマンド引数」が、
デバッガが動かすプログラムに与えられるコマンドライン引数。

デバッガで動かしてるんじゃないなら、コマンドライン引数を与えてあげてください。

207:デフォルトの名無しさん
08/05/23 18:11:07
>>204
それはなあ、おまえのパソコンがハング恩してるんだよ

208:デフォルトの名無しさん
08/05/23 18:28:18
>>205
>>206
コマンドライン引数を指定する場所は見つかりました。
当のプログラムが、コマンドライン引数で指定したテキストファイルの内容を表示するプログラム
何ですが、引数はテキストファイルの絶対パスでいいんですか?

209:デフォルトの名無しさん
08/05/23 18:29:57
いや、、、それを決めるのは君のプログラムでしょ

210:204
08/05/23 18:36:28
こういうプログラムです。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *fp;
char ch;
if(argc!=2) {
printf("ファイル名の指定がありません\n");
exit(1);
}
if((fp = fopen(argv[1], "r"))==NULL) {
printf("ファイルを開くことができません\n");
exit(1);
}
if((fp = fopen(argv[1], "r"))==NULL) {
printf("ファイルを開くことが出来ません\n");
exit(1);
}
while((ch==fgetc(fp)) != EOF) putchar(ch);
fclose(fp);
return 0;
}

211:デフォルトの名無しさん
08/05/23 18:41:11
絶対パスでも相対パスでもいいよ。
カレントディレクトリがどこかわからないなら、とりあえず絶対パス入れとけば。

212:204
08/05/23 19:09:13
>>211
絶対パスでやっても

ファイル名の指定がありません

となるんですが

213:デフォルトの名無しさん
08/05/23 19:20:55
>>212
ひょっとして hoge c:\(途中略)Program Files\xxx の様になってないか?
上記例だと、"Program" と "Files\xxx" の間の空白がパラメータ区切りとみなされて
argc=3になってしまう。


214:デフォルトの名無しさん
08/05/23 19:21:58
まず argc の値を出してみろよ。
っつーか、VC++使ってんならそのままブレークポイント置いてargvの中身見てみろよ。

215:デフォルトの名無しさん
08/05/23 19:23:28
うまくいかない→質問
じゃあ進歩しないぜ

216:デフォルトの名無しさん
08/05/23 22:29:09
>>204
あれだ!そのプロジェクトと同じフォルダにテキストファイル置いてるか?なら、相対パスでOkだ。

それか、C:\に適当にテキストファイル作ってたとえば、C:\test.txtだったとすると
それで、hoge C:\text.txtってやってみな。それで表示がおかしかったら、if(argc!=2) ←これがおかしい。
argc!=1じゃないのか?なんでargc!=2にしてあるのかよく知らんけど。そこは、コマンドライン引数の個数をかくんだから
1個しか実行プログラムに引数を与えないなら、argc!=1ってしなきゃならん。

まあ、初心者のうちはそうやって七転八倒しながら覚えるって紋だ!!!!!!!!!

がんばりな。俺も、最初はコピー&ペーストすらしらないような人間がプログラムをやろうとしてたんだ。

いまじゃ、7年目で色々できるようになった。まあ、あれだ。がんがれ。

217:デフォルトの名無しさん
08/05/24 01:21:53
>argc!=1じゃないのか?なんでargc!=2にしてあるのかよく知らんけど。そこは、コマンドライン引数の個数をかくんだから
>1個しか実行プログラムに引数を与えないなら、argc!=1ってしなきゃならん。

いやいやいやいやいやいやいや

218:デフォルトの名無しさん
08/05/24 01:31:40
Express Edition には、リソースエディタがないようですが、
これってなくて大丈夫なんでしょうか?

219:デフォルトの名無しさん
08/05/24 02:01:49
リソースファイルを全部手書きしないといけないってだけで、プログラム事態には支障はない。
可能か不可能かってのなら可能。リソースコンパイラはWindowsSDKにも入ってるから。

220:218
08/05/24 02:54:55
>>219
なるほど、そういうことですか。
じゃあ、書き方さえ分かってればいいわけですね。
ありがとうございました。

221:デフォルトの名無しさん
08/05/24 10:13:58
Windowsアプリ作るにはWTLがないと氏ねるそうですが、VC++2008EEでWTL8.0を使おうにもアプリウィザードに組み込めません。
アプリウィザードを使わなくてもWTLは使えますか?
またWikipediaの解説を見るとATLがないとWTLは使えないようですが、これはWindows SDK for Windows Server 2008 and .NET Framework 3.5に含まれていますか?
選択画面を見る限りなさそうですが…。
因みに当然今は全てWin32APIでゴリゴリ書いています。

>>220
ResEditおすすめ。
IDEに関連付ければソリューションエクスプローラからダブクリで呼び出せるよ。
Unicode版もあるし。
URLリンク(www.resedit.net)

222:デフォルトの名無しさん
08/05/24 10:37:36
>>221
そんなオサレ気なものなくたって、Win32APIがあればまだ5年は戦えるね。

223:デフォルトの名無しさん
08/05/24 13:27:50
ATL7.1がWDKの方に入ってるよ。

224:デフォルトの名無しさん
08/05/24 13:41:13
ちなみに、setup80x.js内の8.0を全部9.0に置き換えて実行すれば、
2008EEでも、WTLのウィザード使えるよ。

225:デフォルトの名無しさん
08/05/24 14:06:23
URLリンク(support.microsoft.com)

226:221
08/05/24 16:50:33
>>222-225
ありがとうございます。
取敢えずヘッダーとx86ライブラリをインスコしてからJScriptのファイルを書き換えて実行し、ウィザードが正常に動作する事を確認しました。
しかしその生成されたコードをそのまま実行してみたら、

fatal error C1083: include ファイルを開けません。'atlbase.h': No such file or directory

となってしまいました。
WTLとWindows SDKのインスコ先を見てもatlbase.hはありません。
WinSDKでまだ何か足りないものがあるのでしょうか。

227:デフォルトの名無しさん
08/05/24 17:06:31
だからWDKに入ってるつーの。

228:デフォルトの名無しさん
08/05/24 18:31:23
すみません。Win32APIっていうのを勉強してるんですが、文字列変数というか
char型の配列名にszなんたらかんたらっていう変数名が多いです。たとえば
szClassName[] とかszText[]とか。。szってなんですかね??

あと、int型の整数を宣言するだけで、初期値を代入せずにいきなり使ってるんですが、
こういうのってありなんですか?なんか、大昔C言語を勉強したときはint i=0;と初期化してからじゃないと
コンパイルエラーが出た覚えがあるんですが。。

すみませんが、おしえてちょんまげ。

229:デフォルトの名無しさん
08/05/24 18:34:13
>>226
Windows Driver Kit
URLリンク(www.microsoft.com)
サインインはいるが、Microsoft Connect Web サイトから無料で、isoイメージをダウンロードできる。

インクルードファイルパスに、"(DDKフォルダ)\inc\crt\atl71"
ライブラリファイルパスに、"(DDKフォルダ)\lib\atl\i386"を追加。

ExpressでのWTLウィザードは、そのままだとATL3.0用になるので、
stdafx.hの中の
#define _WTL_SUPPORT_SDK_ATL3
をコメントアウト。
なぜかATL7.1は、atlthunk.libがライブラリ指定されてないので、
リンクでエラーが出るなら、
リンカの追加の依存ファイルに、atlthunk.libを付ける。

いちいち、書き換えるのが面倒だったら、
WTLテンプレートファイルの方のstdafx.hを書き換えるか、
default.jsの
// Use ATL3 from SDK for VS2005 Express
の項をコメントアウトするといい。

// Linker settingsのところに、
LinkTool.AdditionalDependencies="atlthunk.lib";
で、atlthunk.libをリンク指定できる。




中途半端でほったらかしなWTLなんか使うより、
ATLだけでゴリゴリやった方がいいと思うけどね・・

230:デフォルトの名無しさん
08/05/24 18:41:28
>>228
szはsが文字列、zがナル文字終端を表す。
いわゆるシステムハンガリアンというやつ。詳しくはググれ。

初期値を書かない変数は、あとで使うときに代入しているはず。
うっかりその代入を忘れたときには、
下手に0などで初期化しておくよりも、未初期化のままのほうが検出しやすいとされる。
そのため、(Win32プログラムに限らず)Cでは、
むやみに0初期化するべきでないというのが最近の傾向のはず。

もちろん、適切な値で初期化できるときはするべき。
未初期化変数はバグの温床だから、できればないほうがいい。

231:228
08/05/24 18:44:44
>>230
どうもありがとうございます。よくわかりました。sが文字列でzがナル文字なるほろ。。

初期化についてもよくわかりました。

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

232:デフォルトの名無しさん
08/05/24 19:23:22
> 個人用に設定されたコンテンツやベータ プログラムへの参加の機会をご提供するために、Microsoft Connect 上での皆様の活動がモニターされ、個人情報にアクセスされる場合があることについても同意するものとします。

この文章の示す個人情報とは何なのでしょうか。
URLリンク(privacy.microsoft.com)
を読んでも特定出来ず、不安で登録出来ません。

233:デフォルトの名無しさん
08/05/24 20:02:29
こんなところで聞かなくても
電話かメールで問い合わせできるはず

234:デフォルトの名無しさん
08/05/24 21:35:42
すみません質問なんですが、VC++で、

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){
double A,B,C;
A = double::Parse(textBox1->Text);
B = double::Parse(textBox2->Text);
C = A + B;
textBox3->Text = "答えは" + Convert::ToString(C) + "です";


こんなプログラムを作ったのですが、textbox1と2に何も入れないでボタンをクリックすると
エラーが出てしまいます。textbox1と2に0をあらかじめ代入する方法も試したのですが、見栄えが悪いので、
何も数字が入力されていないとき、「入力してください」などのダイアログを表示する方法を教えてください。

235:デフォルトの名無しさん
08/05/24 22:27:35
>>234
textBox1->Textが""ならdouble::Parseしないで、
入力を求めるMessageBoxでも表示すればいい。

236:デフォルトの名無しさん
08/05/24 22:28:43
>>232
実際に何かやろうとすれば、
メールアドレスとか住所氏名を入力する欄が現れる。

237:234
08/05/24 23:21:55
>>235
素早い回答ありがとうございます。

if(textBox1->Text == ""){MessageBox::Show("数字を入力してください");}
else{A = double::Parse(textBox1->Text);}

if(textBox2->Text == ""){MessageBox::Show("数字を入力してください");}
else{B = double::Parse(textBox2->Text);}

こんな感じで出来ましたが、結局Cを計算しようとしてしまいます。
Aが入力されていない時点で、プログラムを停止させることは出来るのでしょうか?

238:デフォルトの名無しさん
08/05/24 23:38:55
>>237
全然内容読んでないけどAが入力されていなければexitすれば良いんじゃないかな?

239:デフォルトの名無しさん
08/05/24 23:56:19
>>237
return


240:デフォルトの名無しさん
08/05/24 23:59:21
>>239
return 0; でやってましたw
大変参考になりました。また機会があればご指導お願いします。

241:デフォルトの名無しさん
08/05/25 04:19:54
すみません、とあるライブラリを使用してプログラムを組んでいるのですが、
_ASSERTを使おうと思ったら
LNK2019: 未解決の外部シンボル _CrtDbgReport が関数 "void __cdecl ほにゃらら"(ちょめちょめ)で参照されました。
というようなリンクエラーが出てしまいました。

crtdbg.hはインクルードしてます。
ためしに新規で作成してみたプロジェクトでは_ASSERTが使えました。

何が原因なのでしょう?
エラーの詳細内容を読んでも理解できませんでした。

ライブラリを使用する際にリンクの追加など、
プロパティを何箇所か変更しています。
環境は Microsoft Visual Stdio. NET 2003 です。

242:デフォルトの名無しさん
08/05/25 08:25:43
原因は分からないけど、リンクの問題っぽいから
リンクの設定をうまくいったのと同じにしたら?

243:デフォルトの名無しさん
08/05/25 08:28:18
>>241
ランタイムライブラリがデバッグ版になってないんじゃないの?

C/C++→コード生成

244:241
08/05/25 14:57:31
>>242-243
レスサンクスです。

>243
>ランタイムライブラリがデバッグ版になってないんじゃないの?

まさしくこれでした。
プロパティをいじっている時に構成を「すべての構成」にしていたので、
ランタイムライブラリをマルチスレッドに変えた時にも
リリース版のマルチスレッド設定にしてしまってました。

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

245:デフォルトの名無しさん
08/05/25 16:54:36
eMbedded Windows CE Visual C++を入れたら
「Virtual PC/Windows CE エミュレータ」で、 Windows が不安定になるのが発生します。
ってメッセージが起動のたびに出るようになって、修復する方法を書いてあるページを見つけたんですが、
URLリンク(support.microsoft.com)
日本語の意味が分かりません。ここの解決方法をどなたか翻訳してください。

246:デフォルトの名無しさん
08/05/25 19:31:08
boot.iniに/executeオプション足せ、って書いてある。

247:デフォルトの名無しさん
08/05/25 19:52:03
C++を最近始めたんですが、何度プログラムを組んでも言葉の意味がなかなか分からなくてこのままで大丈夫かなぁと思っています。
最終的にはゲームを作ることを目標にしてるんですが、このままで大丈夫でしょうか…不安で仕方がないです。



248:デフォルトの名無しさん
08/05/25 22:43:50
>>247
振り向いたら負け

249:デフォルトの名無しさん
08/05/26 00:36:56
ある画像A.bmpと、その背景にあたるB.bmpが別々にあって、
A.bmpを上に、B.bmpを下にして1枚の絵に表示させる

といった内容のモノを作りたいのですが(画像処理?)何か参考になるソース、もしくはHPがあったら教えていただけませんか?

250:デフォルトの名無しさん
08/05/26 03:52:45
単純にB,Aの順番で描画すればいいんじゃない?

251:デフォルトの名無しさん
08/05/26 07:40:58
すみません、質問は「リストのインデックスが範囲を超えています(0)」というエラー
が出るのですが。この(*)の*の数字の詳細が知りたいのですが。(-1とか6とかいろいろある)
よろしくお願いします。

252:デフォルトの名無しさん
08/05/26 07:52:02
だから板違いだっつーの。

253:デフォルトの名無しさん
08/05/26 08:17:17
なんだ 同じかww

254:デフォルトの名無しさん
08/05/28 16:01:46
引数のところで書かれてる__outの目的がよくわかりません。
OUTというマクロはプリプロセッサで無かったことにされてるみたいですが・・・
検索してみても、日本語で解説してあるページを見つけられませんでした。
どなたかお願いします。

255:デフォルトの名無しさん
08/05/28 17:02:58
日本語で質問お願いします。

256:デフォルトの名無しさん
08/05/28 18:08:23
エスパーすると、その引数のところに結果を返しますよ
ということをプログラマに知らせるだけの記号。

257:デフォルトの名無しさん
08/05/28 18:24:22
>>254
__outは/analyzeオプション用

258:デフォルトの名無しさん
08/05/29 00:35:26
すみません、教えてください。

win32環境で作ったVC++プロジェクトをマネージ環境に移行するためにはどうすればいいのでしょうか。

.NET用プロジェクトを作ってソースを1つずつ移していくしかないのでしょうか?

259:デフォルトの名無しさん
08/05/29 08:43:43
ctrl+a

260:デフォルトの名無しさん
08/05/29 23:15:29
質問です
2008VC++で、GetWindowTextWで取得したCStringをdoubleに変換したいのですが、うまくいきません
コードの書き方を教えてください

261:デフォルトの名無しさん
08/05/29 23:41:08
どう書いて、どううまくいかなかったのか書け。

262:デフォルトの名無しさん
08/05/29 23:46:42
GetWindowTextW→CString→doubleのどの段階でうまくいかないのだ?

CStringよりもstd::stringにしとけ


263:デフォルトの名無しさん
08/05/29 23:50:39
double AA,BB,CC;
CString str,AAA,BBB,CCC;

GetDlgItemText(IDC_EDIT1,AAA);
GetDlgItemText(IDC_EDIT2,BBB);

AA = atof( (const char*)AAA.GetBuffer(0));
BB = atof( (const char*)BBB.GetBuffer(0));
CC = AA + BB;
CCC.Format(_T("%f"),CC);
str = CCC +_T("が表示されます。");
SetDlgItemText(IDC_EDIT3, str);

こんな風にしたんですが、EDIT1に11.11、EDIT2に22.22を入力すると
"3.000000が表示されます。"と表示されてしまいます

264:デフォルトの名無しさん
08/05/29 23:56:48
うにコードで(const char*)がマズイ


265:デフォルトの名無しさん
08/05/30 00:07:49
すみません。何度も申し訳ありません。質問させてください。

自作のdllを遅延読み込みしたいのですが、
「LNK2001: 外部シンボル xxxx は未解決です。」となってしまいます。
具体的な手順が理解できなくて、
以下の手順でやってるんですが、何か勘違い、抜けなどありますでしょうか。

@dllはexeが作成されるディレクトリに先に作成されます。
Adllの関数のプロトタイプを列挙しているヘッダファイルを、
 exe側でプロパティでパスを追加した上でincludeする。
Bリンカの「遅延読み込み」に自作のdll名を入れる
Cexe側で「LoadLibrary(dll名)」を行う
Dexe側でdll内の関数を呼び出す。

よろしくお願いします。

266:デフォルトの名無しさん
08/05/30 00:13:57
遅延読み込みはスタティックリンク
LoadLibraryはダイナミックリンク


267:デフォルトの名無しさん
08/05/30 00:35:27
>>264
ありがとうございます。解決しました

268:デフォルトの名無しさん
08/05/30 00:53:42
>>266
ありがとうございます。
ヒントを頂き、ちょっと調べてみました。
@LoadLibraryを消す
A「追加の依存ファイル」に xxx.lib を追加
  B呼び出し側「#pragma comment」とかする必要がありそう
    ⇒"遅延読み込み"モードだからいらない???
C肝心の.libが見つからない
  ⇒それくらいはどうにか自分で解決します。。。

早めに間違い・勘違い指摘いただけましたら
すごく助かります。。。


269:デフォルトの名無しさん
08/05/30 01:26:44
6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
URLリンク(system-trading.jp)
5月22日より登録受付開始、6月2日よりグランプリ開始の予定。


URLリンク(www.fx-gp.com)
●社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
URLリンク(www.click-sec.com)

270:デフォルトの名無しさん
08/05/30 10:47:51
VC++ 2005 を利用しています。OS は XP Pro SP2 です。
次のコードを書くと、Debug ビルドでは問題なく動きますが Release ビルドでは
アプリケーションが強制終了することがあります。なぜでしょうか?

// ゼロでクリアされた構造体を用意する関数
template < typename T >
T zeroStruct() { T t; memset( & t, 0, sizeof( T ) ); return t; }

void main() {
 A a = zeroStruct< A >(); // A は構造体の型
}


271:デフォルトの名無しさん
08/05/30 12:17:48
>>268
dllをスタティックにリンクするにはdllimportを使う。externだけじゃ呼べないよ。といってみる。
自作dllを作ったならdllexportを使ってると思うからその逆の使い方だ。

272:デフォルトの名無しさん
08/05/30 12:18:40
またmemset()厨か。

273:デフォルトの名無しさん
08/05/30 13:20:30
>>270
それだけの用途なら、そんな滓みたいなテンプレート関数作る必要なんてさらさらないじゃん。
A a = {0}で充分。

274:270
08/05/30 13:52:27
>>273
 A a = {0} なんて書き方があったんですか。ありがとうございます。
 わざわざ関数呼ばずとも、こちらを使った方が断然良いですね。


275:デフォルトの名無しさん
08/05/30 14:09:04
CHAR chStr[128];

wsprintf(chStr , "インスタンスハンドル : %d" , hInstance);
MessageBox(NULL , chStr , TEXT("Kitty on your lap") , MB_OK);

URLリンク(wisdom.sakura.ne.jp)
これやると

'MessageBoxW' : 2 番目の引数を 'CHAR [128]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

っていわれるんだけど・・。なんか昔やってたソースを2008でやろうとしても同様にエラーがでる・・。
関数にcharのlong pointerの引数があったらそこに単純に"abc"ってやってもpointerわたしてるんだよね?

276:デフォルトの名無しさん
08/05/30 14:27:35
作者じゃないから TCHAR じゃなくて CHAR を使う意図がわからない
下の方ではTCHAR 使ってるし

277:デフォルトの名無しさん
08/05/30 14:31:29
だからそんな間違いや過去の遺物だらけのサイトで勉強しちゃダメだって。

278:デフォルトの名無しさん
08/05/30 15:57:13
初心者には良いか悪いか分からないし(´・ω・)

279:デフォルトの名無しさん
08/05/30 17:43:44
VC++ 2008で、windowsフォームアプリケーションのスケルトンを作成したところ、

LRESULT CALLBACK WndProc(HWND, UINT , WPARAM, LPARAM){

みたいなメインループ部分が見当たりません。
メインループさせたい場合、どのように書けばよいですか?

280:デフォルトの名無しさん
08/05/30 17:46:47
とりあえず、.NET Frameworkについて勉強しようか。

281:デフォルトの名無しさん
08/05/30 17:59:23
>>279
Win32アプリケーションのプロジェクトを作ればいいと思うよ。

282:デフォルトの名無しさん
08/05/30 19:07:50
charとかLPSTRとかstrcmpとかstrcatとか_atoi_sとか
C#から入ってきたので文字列周りの処理が死ぬほどムズイ
文字列処理に特化して説明してるHPとかありませんか

283:デフォルトの名無しさん
08/05/30 19:12:31
ソース読んでデバッガでトレースすれば理解できるよ

284:デフォルトの名無しさん
08/05/30 22:41:49
lexical_castで。

285:デフォルトの名無しさん
08/05/31 00:34:25
VBAの処理時間短縮のためVC++でDLLを作って処理させようと思ってます。
VC++はいじったことないのでお勧めの書籍あるいはURL等ありましたら
教えて貰えませんか。

286:デフォルトの名無しさん
08/05/31 00:42:18
>>285
とりあえず本屋で適当に選んできなよ

287:デフォルトの名無しさん
08/05/31 07:57:34
>>282
std::stringを使えばいい

288:デフォルトの名無しさん
08/05/31 11:49:37
>>279
CLR使わなきゃいい

289:デフォルトの名無しさん
08/05/31 12:33:09
リソースキットツールってのは必要なの?

290:デフォルトの名無しさん
08/06/01 01:31:59
gccの拡張機能のweakシンボルと同等のことを
VCでするにはどうすればよいでしょうか?

291:デフォルトの名無しさん
08/06/01 19:13:16
2008なんですがコマンドラインからの引数を受け取って
動作をデバッグするにはどうしたらいいんでしょう?
具体的には

int main( int argc, char** argv ){

の引数をいろいろ変えながらデバッグしたいんですが・・・。

292:デフォルトの名無しさん
08/06/01 19:16:26
と、思ったんですが、すごい勢いで解決しました。
すごいよMSDNむすどんむすどん。

293:デフォルトの名無しさん
08/06/01 20:01:16
Thumb.dbのフォーマットを解説してるサイトとかって存在しますか?

294:デフォルトの名無しさん
08/06/01 23:59:57
VC++ 2005 でsprintfを使うと警告が出るのですが。
sprintf(msg1,"%d:%s",no,str);
警告 1 warning C4996: 'sprintf' が古い形式として宣言されました。 c:\_将棋\fj-sai\fai001\fai001\メッセージ送信1.cpp 33
この警告を出さなくする方法ありませんか?

295:デフォルトの名無しさん
08/06/02 00:07:29
日本語ファイル名かよw

296:デフォルトの名無しさん
08/06/02 00:14:43
>>294
#pragmaで抑制できたはず。
詳しくはググれ。

297:デフォルトの名無しさん
08/06/02 00:15:09
>>294
sprintfを使わずに、boost::formatを使う。

298:デフォルトの名無しさん
08/06/02 00:21:24
>>296
出来ました.ありがとうございます。
>>297
調べてみます。ありがとうございました。

299:デフォルトの名無しさん
08/06/02 00:42:52
>>291

300:デフォルトの名無しさん
08/06/02 00:47:04
>>291

メニュー[プロジェクト] -> プロパティ -> デバッグ -> コマンド引数

を変更すればおkなはず。

面倒なときはイリーガルだけど、

#ifdef DEBUG
char* argv_[2] = { "application", "" };

argc = 2;
argv = argv_;
#endif

みたいにでばっぐしてみればどう?



301:デフォルトの名無しさん
08/06/02 06:42:55
>>292

302:デフォルトの名無しさん
08/06/02 07:12:08
>>299
できるよ。
以上。
はい、次。

303:MFC始めて2日目
08/06/02 10:42:54
ファイルの読み込みをやろうとして
void CDeepPurpleDoc::Serialize(CArchive& ar)
{
CString ss;
// CEditView は、すべてのシリアル化を処理するエディット コントロールを含んでいます。
reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);

if(ar.IsStoring())
{
ar << ss;
}
else
{
ar >> ss;
}
}
既存のテキストファイルを開こうとしたら
予期しないファイル形式
というエラーが出た。
シリアライズってなんだ?

304:デフォルトの名無しさん
08/06/02 11:12:43
URLリンク(www.vipper.org)
VC++2008で、BとCの下のスピンボタンの値を足し算して、Aの下の部分に表示したいんですが
どのように記述すれば値を取得して計算・表示できるのでしょうか?

305:デフォルトの名無しさん
08/06/02 12:21:03
スピンボタンの値を取得するサンプルならそこらじゅうにあるだろ

306:デフォルトの名無しさん
08/06/02 15:37:34
>>304
Bの下、Cの下、それぞれのスピンボタンの値を取得し、それらを加算してから文字列に変換し、
Aの下に直接書き込むか或いはAの下に配置したスタティックテキストを書き換えれば宜しい。

307:デフォルトの名無しさん
08/06/02 20:37:05
シリアライズってのは、「専用形式」で「なるべく簡単に」
オブジェクトを保存・読み込みする、みたいなコンセプト。
そこいらにあるファイルをデシリアライズするのは大変。

308:デフォルトの名無しさん
08/06/02 23:28:04
>>271
遅くなりましたが、今、無事できました!
コンパイルもリンクもうまくいき、
ちゃんとdll内の関数も呼び出せました!
本当に、ありがとうございました。

309:デフォルトの名無しさん
08/06/03 21:41:31
CStringってすごいな。これを使えば2バイト文字の扱いが楽だな。
これはMFCなのか、ATLなのか。

310:デフォルトの名無しさん
08/06/04 00:57:20
今は共用になってる

311:MFC始めて3日目
08/06/04 14:32:28
void CDeepPurpleDoc::Serialize(CArchive& ar)
{
reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar);

BYTE* pByteBuff;
CEditView* pEditView = ((CEditView*)m_viewList.GetHead());

if(ar.IsStoring())
{
CFile* pFile = ar.GetFile();
UINT size = (pEditView->GetEditCtrl()).GetWindowTextLengthA();
pByteBuff = new BYTE[size + 1];
UINT len = (pEditView->GetEditCtrl()).GetWindowTextA((LPTSTR)pByteBuff,size + 1);
pByteBuff[len] = 0;
pFile->Write(pByteBuff,len);
}
else
{

}
delete pByteBuff;
}
とやってファイルに書き込むと2回書き込まれる。
MFCがなにかやってるのか。


312:デフォルトの名無しさん
08/06/04 14:42:10
SerializeRaw したあと同じものを自分でも書いてんの?

313:MFC始めて3日目
08/06/04 15:07:56
SerializeRawの1行を削除したらエラーになった。
(ソースコードの else の行に矢印がついてプログラムがストップ)

314:MFC始めて3日目
08/06/04 15:16:44
うまくいった。
(313 はデバッグの機能が働いただけだった)

>>307
>>312
ありがとう。

315:デフォルトの名無しさん
08/06/04 19:30:51
VC++使い始めて間もないのですが、質問させてください

現在MSVC++2005ProのMFCを用いてソフトを作ろうと考えております
一次元での温度分布をグラフィック表示するものを作ろうと考えていて
物体の二点の温度を入力した際に、その間を一次関数的に温度が増減すると仮定した上で
その温度分布をモノクロの色の濃さで表現するようなものを作りたいと思っています

このようなグラデーション表示を描画するためにはどのようにすればよいのでしょうか?
よろしくお願いいたします。

316:デフォルトの名無しさん
08/06/04 19:58:18
static void CALLBACK TimerProc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2){}
の中で、同クラス内のフィールドを参照したい場合どうすればいいの?
ふつーに参照しようとすると、
関数呼び出しには引数リストがありません。
って言われるんだけど・・・

317:デフォルトの名無しさん
08/06/04 20:57:54
非staticメンバにアクセスしたいなら、クラスのインスタンスをどうにかして得る。

318:デフォルトの名無しさん
08/06/04 21:17:41
そのためのDWORD dw1とDWORD dw2

319:デフォルトの名無しさん
08/06/04 22:01:21
使用環境VC++2008 Expressで、win32コンソールアプリケーションのプロジェクトです
下記のコードをビルドして実行すると点数の表示が-184563みたいに変な数字になってしまいます
どうすればちゃんとしたのを作れるでしょうか?
Visual Studio 2008 コマンドプロンプトからコンパイルすれば思ったとおりの結果になります
#include<stdio.h>

int main(void)
{
int score;
printf("点数を入力してください:");
scanf_s("%d",&score);
if (score > 100) score = 100;
printf("あなたの点数は %d 点です。");
return 0;
}

320:デフォルトの名無しさん
08/06/04 22:18:11
printf("あなたの点数は %d 点です。",score);


321:デフォルトの名無しさん
08/06/04 22:58:10
>>320
できました
ありがとうございます

322:デフォルトの名無しさん
08/06/04 23:10:32
C言語なら俺に聞け(入門篇) Part 29
スレリンク(tech板)

323:デフォルトの名無しさん
08/06/05 11:29:24
>>317 どうやるの?

324:デフォルトの名無しさん
08/06/05 20:28:29
CStringってATLでも使えるようになったんだ
MFCじゃなくてもOkになってたとは

325:デフォルトの名無しさん
08/06/05 21:41:55
>>323
CALLBACK関数には、クッキーと呼ばれる自由に使っていいパラメータが用意されている場合が多い。そこにインスタンスのポインタを乗せて渡したりする。



326:デフォルトの名無しさん
08/06/05 22:13:37
textBoxに内部処理で得たchar型の2次元配列を表示させるにはどうしたらよいのでしょうか?

textbox->text = 配列変数名

だと型がcharをstringにできないとコンパイルエラーが出てしまいます。
環境は.Net2008です。
よろしくお願いします。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4854日前に更新/178 KB
担当:undef