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

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

■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう。
・できるだけ具体的に。

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

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

過去スレ、関連スレなどは>>2-5
2デフォルトの名無しさん:2007/04/12(木) 23:28:11
3デフォルトの名無しさん:2007/04/12(木) 23:29:27
【関連スレ】
■MFC相談室 mfc17d.dll■
http://pc10.2ch.net/test/read.cgi/tech/1164073111/l50
Win32API質問箱 Build48
http://pc10.2ch.net/test/read.cgi/tech/1166172047/l50
鬱だ氏のう DirectX (Part 16)
http://pc8.2ch.net/test/read.cgi/tech/1133007002/l50
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc10.2ch.net/test/read.cgi/tech/1159613789/l50
C++相談室 part55
http://pc10.2ch.net/test/read.cgi/tech/1164951094/l50
C/C++の宿題を片付けます 80代目
http://pc10.2ch.net/test/read.cgi/tech/1166969820/l50
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1164376287/l50

【関連サイト】
猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
MSDN ライブラリ ※変更された
http://msdn.microsoft.com/library/ja/
http://msdn2.microsoft.com/ja-jp/library/ (2005のことはこっち)
Platform SDK Update ※変更された
http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
Google
http://www.google.co.jp/
4デフォルトの名無しさん:2007/04/12(木) 23:30:00
5デフォルトの名無しさん:2007/04/12(木) 23:31:17
以上、前スレ997でした。

>>前スレ998-1000
ありがとうございました。
6デフォルトの名無しさん:2007/04/13(金) 00:03:01
1乙
7前987:2007/04/13(金) 01:54:08
関係ありそうなとこにはvolatileつけましたが一緒でした
変数の初期化はしてあると思うのですが
もう一度確かめてみることにします
CEventと変数では同期をとるのになにか違いがあるのですか?
大分前に同じと言われたような
8デフォルトの名無しさん:2007/04/13(金) 08:41:59
>>7

変数だと
たとえばaが0以外になると次の処理に進む。
while(true) {
if( a != 0 ) break;
Sleep(100);
}
最適化されて
if( a == 0 ) {
while(true) {
Sleep(100);
}
}
になってしまうことないようにvolatile使うんじゃないの。
でも俺は最適化とvolatileが上手く機能するか調べたことない。

同期イベントなら関数コールして調べるので前期のような最適化はかからない。

また、上記だと1秒間に10回aを調べる。
aの値が変化しても反応が最大で100ミリ秒遅れる。
かといってSleepを減らすとこの空回りするループにCPU処理を使ってしまい無駄。
9デフォルトの名無しさん:2007/04/13(金) 08:47:34
>>8

以下のようにすれば最適化はされないはず。
これでも駄目なら別の原因?

//宣言のみ
bool check();

void thread()
{
while(true) {
if( check() ) break;
Sleep(100);
}
......
}

//threadの後または別のファイルに
//checkがあれば最適化不可能だろう
bool check()
{
return a != 0;
}

同期イベントならループにしたりSleepつけなくていい。
10デフォルトの名無しさん:2007/04/13(金) 09:58:53
>>7
> CEventと変数では同期をとるのになにか違いがあるのですか?
・同時に複数のスレッドから変数を変更する可能性
・リードする側がチェック直前/直後で変数が書き換わる可能性(それで動作が異なってしまう場合)
等、気をつける必要があると思。
11デフォルトの名無しさん:2007/04/13(金) 12:07:46
VisualC++ 2005 Expressを使用しています。使用歴は1週間だけです。
UNIXのプログラムにWindowsのガワをつけたプログラムの作成をして配布しようと思っている
のですが、配布の段階でつまずいてしまいました。

プログラムはWindowsフォームアプリケーションでCLIに依存しています。
OSはWindows Vista x64です。
インストーラの作成を行いたいのですが、その方法が分かりません。
私が検索してたどりついたのは以下のところまででした。
お力をお借りできないでしょうか。

1.MSDNで
ttp://msdn2.microsoft.com/ja-jp/library/ms235317(VS.80).aspx
にあるように「その他のプロジェクトの種類」を行おうと思ったのですが、見当たりませんでした。
「Visual Studioにインストールされたテンプレート」と「マイテンプレート」だけでした。
2.ヘルプを参照するとプロジェクトのプロパティで「ビルド」を選択すると必須コンポーネントが
選択できるということでしたが、そのような項目はみあたりませんでした。
(Visual C#には「発行」にありましたが、VisualC++ではこれも見つかりませんでした)
3.Windows Installerをインストールしようと思ったが、「このコマンドを実行するのに十分な
記憶領域がありません。」というエラーでインストールできなかった。

経験が全くないため見当違いな部分が多く、検索も下手で要領を得ませんが、解決法をご存知の
方がいらっしゃったらお力を貸していただけないでしょうか。
12デフォルトの名無しさん:2007/04/13(金) 12:20:26
Visual C++ 6.0を再インストールしようと思って、
一旦削除してもう一回インストールし直したら、
「プライマリ プラットフォームがありません。
ビルドシステムは使えません。セットアップがインストールしたアドオン プラットフォーム(.pkg)のロードに失敗した可能性があります。」
といわれ、エラーで落ちる。
何回インストールし直してもだめ。

教えてエロい人><
13デフォルトの名無しさん:2007/04/13(金) 12:49:00
Visual Sutdio 2005を初めて使うのですが、Eclipseのインポートの再編成のような機能はないのでしょうか。
言語はJAVAからの応用がききますが、クラスや関数はまだ覚えられていないため、
#includeやusingを設定するのに苦闘しています。

※例外処理でfinallyが無いのが納得できない……
14デフォルトの名無しさん:2007/04/13(金) 16:35:17
>>11
たぶんそれはExpress Editionにない機能と思う
15デフォルトの名無しさん:2007/04/13(金) 18:08:20
>>14
お返事ありがとうございます。
今日ずっと調べた所、VisualC++ではインストーラーは作成できないようですね。
VisualC#であればClickOnceを使ってインストーラーの作成ができたので、つらいですが
VisualC#でプログラムを書き直そうと思います。
予算があればStandard Editionを買いたい所ですが・・・
16デフォルトの名無しさん:2007/04/13(金) 22:02:57
VisualStudio2005のスタンダード版ってMFCと静的リンクできますか?出来るなら買いたい。
17デフォルトの名無しさん:2007/04/13(金) 22:19:35
>>16
OK
18デフォルトの名無しさん:2007/04/13(金) 22:28:10
階層構造でtodoを記述できるような補助機能ってあります?
19デフォルトの名無しさん:2007/04/13(金) 22:33:53
性的リンク
20デフォルトの名無しさん:2007/04/13(金) 22:34:47
WindowsXP環境でVisualStudio2005・C++で単純なWin32アプリケーションを作成したのですが、
これをWindowsVistaで実行しようとすると、
「このアプリケーションのサイドバイサイド構成が正しくないため、アプリケーションを開始できませんでした」
というエラーが出て起動できません。
Vistaで動かすにはどうしたらいいでしょうか?
21デフォルトの名無しさん:2007/04/15(日) 00:08:40
WindowsXPでVisual C++ 2005 Express Editionを使っています。
「Windowsゲームプログラミング」という本のプログラムを実行してみたところ、
アクセス違反と表示されてしまいました。
デバッガでステップ実行してみるとWM_DESTROYのreturn 0;からDispatchMessageを出るまでの間に
表示されるのですが、どこが悪いのか分かりません。
どうしたらアクセス違反を無くせるでしょうか。
以下、出力抜粋とコードです。

test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。
test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。
プログラム '[3220] test_window2.exe: ネイティブ' はコード 0 (0x0) で終了しました。

#include <windows.h>
#define APP_NAME TEXT("Sample_MainWindow")
#define DRAW_STRING TEXT("Kitty on your lap")
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) {
WNDCLASS wc;
MSG msg;
HWND hWnd;
HDC hdc;
2221:2007/04/15(日) 00:10:29
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;
wc.lpszMenuName = NULL;
wc.lpszClassName = APP_NAME;
if (!RegisterClass(&wc)) return 0;
hWnd = CreateWindow(APP_NAME, TEXT("Window Title"),WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL);
if (hWnd == NULL) return 0;

/* デバイスコンテキストのハンドルを取得 */
hdc = GetDC(hWnd);
/* デバイスに文字列を描画 */
TextOut(hdc, 10, 10, DRAW_STRING, lstrlen(DRAW_STRING));
/* デバイスコンテキストのハンドルを解放 */
ReleaseDC(hWnd, hdc);
while(GetMessage(&msg, NULL, 0, 0) > 0) {
DispatchMessage(&msg);
}
return msg.wParam;
}
よろしくお願いします。
23デフォルトの名無しさん:2007/04/15(日) 00:30:22
>>21
実行してみたが、ウチの環境では問題なし。
2421:2007/04/15(日) 02:38:05
わざわざ実行までして頂いてありがとうございます!!
問題なしですか、どうしよう…
そうするとコードではなくてうちの環境が悪い可能性がありそうですね。
………
ということで環境を疑う前提で再度ググりまくってみたところ、おかげさまで解決策が見つかりました!
ImeWatcherというソフトを起動していたのですが、そちらを終了させるとアクセス違反が発生しなくなりました。

その結論に至った流れとしては、こちらのページ ttp://forums.belution.com/ja/vc/000/335/02s.shtml
を参考に出力に知らないソフトが混じっていないか見てみたところ、
なぜか起動中のソフトのdllがいくつか混じっていたため試しに一つ一つ終了させて確認していたら
それを終了させておけばアクセス違反が発生しないということが判明したという次第です。
これが相性とかいうやつなのか、単にImeWatcherのバグなのか分かりませんが、
原因(と一応の対策)がわかってすっきりしました。ありがとうございました。

下記はアクセス違反発生時の出力の抜粋です。
'test_window2.exe': 'C:\src\test_window2\debug\test_window2.exe' を読み込みました。シンボルが読み込まれました。
'test_window2.exe': 'C:\WINDOWS\system32\ntdll.dll' を読み込みました。シンボルが読み込まれていません。
'test_window2.exe': 'C:\WINDOWS\system32\kernel32.dll' を読み込みました。シンボルが読み込まれていません。

ここ→'test_window2.exe': 'C:\Program Files\Takubon\ImeWatcher\ImeWatch.hook' を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。

'test_window2.exe': 'C:\WINDOWS\system32\oleaut32.dll' を読み込みました。シンボルが読み込まれていません。
test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。
test_window2.exe の 0x77d0f450 で初回の例外が発生しました: 0xC0000005: 場所 0x25a2c7fc を読み込み中にアクセス違反が発生しました。
プログラム '[2644] test_window2.exe: ネイティブ' はコード 0 (0x0) で終了しました。
25デフォルトの名無しさん:2007/04/15(日) 09:31:03
MS VC++ VS2005なんですが
#include <stdio.h>
int main(void)
{
FILE *fp1;
 if( (fp1 = fopen( "d:\\tmp\\aaa.txt", "r" )) == NULL ){
}else{
}
}
だと、警告がでるんですが
でない書き方(fopenを使わない)を教えて下さい
26デフォルトの名無しさん:2007/04/15(日) 09:55:25
どんな警告が出るんだ?
27デフォルトの名無しさん:2007/04/15(日) 10:01:50
>>26
レスどうもです
warning C4996: 'fopen': This function or variable may be unsafe. Consider
using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNING
S. See online help for details.C:\Program Files (x86)\Microsoft Visual
Studio 8\VC\include\stdio.h(234) : 'fopen' の宣言を確認してください。

ググったらfopenは古いから使うなってことらしいです
28デフォルトの名無しさん:2007/04/15(日) 10:09:51
>>27
移植性を考慮するなら、言語規約にあるfopen()を使うのが妥当。
MSの甘言に載せられて移植性を度外視するのなら、fopen()の派生版でもAPIでも使えば宜しい。
29デフォルトの名無しさん:2007/04/15(日) 10:27:18
C/C++言語の初心者が使うには余計な機能
30デフォルトの名無しさん:2007/04/15(日) 12:08:54
>Consider using fopen_s instead
31デフォルトの名無しさん:2007/04/15(日) 12:21:21
>>21
GetMessage(&msg, NULL, 0, 0)
で&msgで参照する時、ImeWatcheあたりがmsg使ってて、
それでプロテクトメモリ競合が発生して、AccessViolation出してるっぽいなあ
while(GetMessage(&msg, NULL, 0, 0) > 0) {
DispatchMessage(&msg);
}
return msg.wParam;
}

REGETMESSAGE:
if(&msg){
while(GetMessage(&msg, NULL, 0, 0) > 0) {
DispatchMessage(&msg);
}
}
else{goto REGETMESSAGE;}
return msg.wParam;
}
なんてするとどうなるんだろか?
32デフォルトの名無しさん:2007/04/15(日) 12:31:43
MSG msg;
で、このmsgがぶつかる場合というのは
ウィンドウメッセージキュー
なのか
PostThreadMessageキュー
どっちかで、他がつかんでて、ぶつかってるんだろう。
33デフォルトの名無しさん:2007/04/15(日) 15:33:16
Web API(Yahoo! API)をVisual C++で使いたいのですが、
Web APIを利用するためのクラスなどはありませんか?
34デフォルトの名無しさん:2007/04/15(日) 16:04:41
>>30
レスサンキューです
35デフォルトの名無しさん:2007/04/15(日) 16:23:54
>>33
スレ違い。

そして無視される>28、>29
36デフォルトの名無しさん:2007/04/15(日) 16:39:48
>>25
C++のstd::ifstreamを使えばOk

>>28
ところがどっこい、あのセキュリティ強化のライブラリ関数はTR 24731として公開されており、
下手すると将来の標準Cに取り込まれる可能性すらある。現時点ではまだどうなるかわからないけどな。
ちなみにOpen Watcomのも実装しているようだ。
37デフォルトの名無しさん:2007/04/15(日) 18:07:53
>>36
M$のはSafer Cと相違点が多すぎる。
警告通りに直したら後でひどい目にあうのは確実。
38デフォルトの名無しさん:2007/04/15(日) 18:18:01
fopen_s なんか使ってるやついるんか?
winアプリならapi使うだろうし
学習用途なら標準Cライブラリだろうし
39デフォルトの名無しさん:2007/04/15(日) 19:32:11
XP VS2002 MFC。
大文字と小文字を区別せずに文字列(char)を検索したいのですが、
速くて簡単な方法ありましたら教えて下さい。
40デフォルトの名無しさん:2007/04/15(日) 19:44:58
元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて
結局派遣やってるバカがいるんだけどw
なんか派遣先といい関係、とか言ってたから思わず吹き出しちゃったよw
最近はマネージャーもやってるとか寝言言ってるし、派遣がまねぇじゃぁ?はあ!?w

そもそも信頼されてるなら直接契約するか正社員にするはずだが、
いつでも切れる派遣会社経由って舐められてんだよ

派遣期間が長くならないうちに早く就職しろ、と忠告したら、ウッキー!って逆ギレw
バカで頑固だから何度言っても理解できない
騙されたとはいえ結局は自分で決めて派遣やってる癖に逆ギレしちゃってまぁ
人間として本当に恥ずかしい
41デフォルトの名無しさん:2007/04/15(日) 20:23:48
>>39
stricmp()
4239:2007/04/15(日) 21:36:55
>>41
レスありがとうございます。
先頭からstricmpで比較していって検索するモノが出来ました。
43デフォルトの名無しさん:2007/04/16(月) 22:19:58
SDKで作ったサンプルプログラムですがアプリの動作で
ちょっとおかしなところがありまして質問します。

ファイルから読み込んでビットマップを表示させます。
画像がクライアント領域よりも大きければ、表示と同時にウィンドウ標準の
スクロールバーを各種設定をして表示させます。
スクロールバーはきちんと機能して画像がスクロールされます。

ところがウィンドウのサイズを小さくして水平スクロールバーが
クライアント領域が消えるくらいまで小さくすると水平スクロールバーが
消えたと思ったら下側のフレームに水平スクロールバーが薄く表示されています。
そこからもっとウィンドウのサイズを小さくするとタイトルバーの×ボタンに重なって
スクロールバーのサイズグリップが重なって見えます。
これでは見栄えが悪いと思い解決方法はないかと思い質問しました。
よろしくお願いします。

開発環境はVisual C++ 6.0 Pro
OSはXP Pro SP2
44デフォルトの名無しさん:2007/04/16(月) 23:08:24
なんか難解な日本語だなw

下側のフレームに薄く表示されるって状態がいまいちわからんのだけど
言ってる各状態のスクリーンショットとか撮れん?
4543:2007/04/17(火) 00:06:02
>>44
説明が下手で済みません。画面のスクリーンショットは自分のホームページに載せて
リンクしました。
以下がリンクです。

水平スクロールバーが下側のフレームに薄く表示されている画像。
ttp://www3.zero.ad.jp/m-takahashi19741025/20070417BMPViewSample01.png

スクロールバーのサイズグリップがタイトルバーの×ボタンに重なっている画像。
ttp://www3.zero.ad.jp/m-takahashi19741025/20070417BMPViewSample02.png

よろしくお願いします。
46デフォルトの名無しさん:2007/04/17(火) 05:44:09
最小のサイズを決めておけば?
47デフォルトの名無しさん:2007/04/17(火) 07:16:21
>>45
CreateWindowでウィンドウスタイルにWS_HSCROLLとWS_VSCROLLを指定してスクロールバーを出して
その時に一緒に表示されるサイズグリップの挙動ってことでいいんだよな?
VCが作る雛型にスタイル追加してやってみたけど、サイズ小さくしたら普通に消えていったけどなぁ
2000とXPの違いなんだろうか・・・
48デフォルトの名無しさん:2007/04/17(火) 07:32:24
3つほど質問があります。

@C++はクラス外に関数を記述できますが、main()やWinMain()以外を
 クラス外に記述する意味はあるのでしょうか?
 単にCからの引き継ぎ、慣習ということであれば
 なるべく全ての処理をクラス内に記述したいのですが。
AVisual C++には、JavaのLoggerクラスの様な標準ログ出力クラスは用意されていないのでしょうか。
 見あたりませんでした。clogをリダイレクトする処理を実装するしかないでしょうか。
BGUIアプリを、コンソール出力無しに作成する場合は、
 WinMain()関数を使用するしかないのでしょうか?(Google検索だとそのように記述するサイトがヒット)
 機種依存するコードはなるべく外出し、極小化したいのですが、
 WinMain()からmain()を呼ぶように記述するしかないでしょうか。
49デフォルトの名無しさん:2007/04/17(火) 08:16:53
1. まあみんながみんなOOPというわけではないからね。
Cみたいな手続き型プログラミングだけでなく、
STLアルゴリズムみたいにジェネリックプログラミングでは非メンバ関数も必要に応じて使う。
何にせよ、OOPのときでも静的メンバだけのクラスなんて作るなんて馬鹿げていると俺は思うけどね。

2. Logger(というよりJava自体)を俺は知らないが、clogをリダイレクトするくらいなら、
適当なファイルをofstreamで開けば十分だと思う。ちなみにVC++のclogは、バッファリング付の標準エラー出力。

3. プロジェクトのプロパティ→リンカで
•システム→サブシステムにWINDOWS(コンソールを使わない指定)、
•詳細→エントリポイントにmainCRTStartup(main用のスタートアップルーチン)
を指定すると、mainから始まる非コンソールアプリケーションが作れるはず。
あまり一般的な手法ではないかもしれないが。
50デフォルトの名無しさん:2007/04/17(火) 08:59:53
>>48
GUIアプリって時点で十分環境依存だからWinMainを排除したところで意味はないぞ。
51デフォルトの名無しさん:2007/04/17(火) 09:07:46
>適当なファイルをofstreamで開けば十分だと思う。ちなみにVC++のclogは、バッファリング付の標準エラー出力。
(cin, )cout, cerrの他に用意されてるの?
#尤も、cerrはバッファリングしないが。
52デフォルトの名無しさん:2007/04/17(火) 12:34:20
質問があります。

開発環境、実行環境ともにWindowsXP(SP2)
仕様環境はVC++6.0です

レジストリの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR
のStartを3から4に書き換えた(USB大容量記憶デバイス禁止)状態で
USBポートに挿入されているリムーバブルディスクの確認(空き容量と場所(E:などの割り当てられる文字))を行う方法が
存在するのなら、ご教示ください。
53デフォルトの名無しさん:2007/04/17(火) 20:27:35
>>48
1:C++は不完全OOPです。

2:所詮テキストをフォーマットしてファイルに出力するだけなのでそもそも特別に必要でない

3:Windowsの標準的なGUIアプリにおいてはそもそもコンソールなんて使ってません
  ていうか規定のエントリポイントを排除しないでください
54デフォルトの名無しさん:2007/04/17(火) 20:32:30
>>51
そうだよ
無論標準C++に含まれている
5548:2007/04/17(火) 20:34:52
>>49
ご丁寧にありがとうございます。
1につていは、Javaの癖なんですよね。C++では非メンバ関数が当たり前ということであれば
郷に従う必要がありそうです。
2については、ログレベル(外部ファイルで、出力する下限レベルを設定)を
実現したいので、やはり個別実装しないと駄目なんでしょうね。
3については、なるべく一般的なコーディングを心がけて移植性を高めたいと思うので、
一般的でないなら止めた方が良さそうですね。

>>50
そのまま他でコンパイルできることまでは望みませんが、
このクラスは機種依存、と明確にして移植性を高めるのが目的です。
確かに、WinMainでそれを考える意味はあまりないのかもしれませんね。
イベントドリブンでなければともかく。
5648:2007/04/17(火) 20:39:34
あ、返事中に新たな回答が。

>>53
1、そう意識していくしかないのでしょうね。
もっとも、自分で制約をかければほぼ完全にOOP的に
実装できそうだと思ってはいますが(それが良いかはともかく)
2、>>55で書いてしまったのですが、ログレベルを実現したいのです。
個別実装したいと思います。
3、わかりました。WinMainを使って素直に実装しようと思います。
57デフォルトの名無しさん:2007/04/17(火) 21:00:15
Windows用のプログラムを作れる環境では、
どんなコンパイラでもWinMainが使えると思って平気。
その程度の移植性ならある。
58デフォルトの名無しさん:2007/04/17(火) 22:16:19
ていうかWinMainが使えなきゃWindows用のGUIプログラムなんて作れなくね?
59デフォルトの名無しさん:2007/04/17(火) 22:54:30
>>58
>>49
インスタンスハンドルはGetModuleHandle(0)で、
WinMainの最後の引数の代わりはSW_SHOWDEFAULTで代用すればいい。
(どうしても拘るのならGetStartupInfoと言う手もあるが)
60デフォルトの名無しさん:2007/04/18(水) 07:37:19
そこまでする意味が理解できない件
61デフォルトの名無しさん:2007/04/18(水) 07:58:28
環境依存コードはどうやったって出てくるだろうしね。
自分は環境依存コードにWinMain書いておいて、そこからmainを呼ぶようにしているが、
それは48氏が初めに書いているね。(それでいいと思うけど)
62デフォルトの名無しさん:2007/04/18(水) 16:23:15
http://freepg.fc2web.com/cpp/topic_vce_001.html
以前のパソコンで上のサイトよりVisual C++ 2005 Express Editionを
インストールできたのですが新しいパソコンでインストールできません(VISTA)

CDイメージ(.iso)インストール(AIR-EDGEだと途中でダウンロードが止まる)
Webからインストール(これで試しています)

Microsoft Platform SDK を一緒に使うで
[PSDK-x86.exe]を実行すると

下のメッセージがでます
「インストールパッケージを開くことができませんでした。
アプリケーションベンダに問い合わせ、このパッケージが有効な
Windowsインストーラパッケージであることを確認してください」

3日間悩んでいます>_<;よい意見などあれば宜しくお願い致します。<(_ _)>
63デフォルトの名無しさん:2007/04/19(木) 00:34:31
Vistaを捨てるのはどうだろう。
64デフォルトの名無しさん:2007/04/19(木) 10:52:50
MSに訊いてみるのはどうだろう。
65デフォルトの名無しさん:2007/04/23(月) 22:44:35
Visual C++ 6.0で質問です。

サービスプログラムから複数のスレッドを起動し、中でDLL関数を明示的に
呼び出しているのですが、この関数に不具合があるらしく、アクセス違反が
発生するうえ、呼出元のスレッドごと堕ちてしまいます。

DLLを直せば済むんでしょうが、とある事情によりDLL自体に手を入れ難い状況です。
そこで質問なのですが、DLLのエクスポート関数内で発生した保護エラー等を
呼出元でトラップし、処理続行するようなことはできるものでしょうか?

よろしくお願いします。
66デフォルトの名無しさん:2007/04/23(月) 23:01:36
自分がやってることは疑わずに悪いのはこの関数と決めつけてるし
ほっといてあげよう
67デフォルトの名無しさん:2007/04/23(月) 23:20:49
適当に言うけど

catch(...)

で捕らえられんの?
68デフォルトの名無しさん:2007/04/24(火) 01:08:41
>>66
仰るとおりです。以後気をつけます。

DLLのソースは入手しまして、fopen()が失敗した際にNULLが返っているにも
関わらずfclose()を実行してそこでコケているので、>>65 のような書き方を
してしまいました。

>>67
レスありがとうございます。
catch(...)で試してみたのですが、拾ってくれない(そこまで到達してない)
ようです。
一度通常のコンソールアプリに組み込んでトラップできるか試してみます。
何かお気付きの点ありましたら、お願いします。
69デフォルトの名無しさん:2007/04/24(火) 08:20:39
プログラムの1機能的な例外ではなくOSが発する例外なのにcatchできるわけないべw
70デフォルトの名無しさん:2007/04/24(火) 08:25:44
>fopen()が失敗した際に

失敗の原因が
>サービスプログラムから複数のスレッドを起動
だったりしないよな
71デフォルトの名無しさん:2007/04/24(火) 17:02:09
>>68
/EHaを付けて、SEH (__tryと__expect)の方を使えば受けられるかもしれない。
SEHで受けられるなら、_set_se_translatorでC++例外へ変換する道が開ける。
72デフォルトの名無しさん:2007/04/26(木) 07:55:05
>68
そのDLLの内部でfopen()お呼びfclose()が行われてるってことかな。
ソースあるなら呼ばないで自分で似たようなの作り直すってのはダメなのか?
あるいは、そのDLLの問題部分を完全に突き止めて、ここをこう直せと指摘するとか。
73デフォルトの名無しさん:2007/04/26(木) 08:28:27
お前らの話しを全部理解できてないので間違えてるかもしれんが
俺も例外をcatch(...)で取れないことが最近あった。
で、調べた。

記憶が確かなら
VC6のころはメモリアクセス違反をcatch(...)で取れた。

VC2005はコンパイルオプションを変えないと
その手のCPUがだす例外をcatch(...)で取れない。
あるいは例外ハンドラを自分で書くのかな。
コンパイラオプションは覚えとらんので書けない。

とりあえずメモリアクセス違反を握りつぶすのも問題だから
VC2005でデフォルトが例外をcatch(...)で取れないようになったのは
妥当なことなのかな。
74デフォルトの名無しさん:2007/04/26(木) 08:33:44
>>72
それが一番だよな。
エラー処理が不十分てことだからDLLを直させるべき。

でも自分の担当じゃないDLLの細部まで調べないと云々は納得いかんな。

社外の作成したDLLだからソースなしで
責任転嫁だとか本当にお前の担当部分にバグがないのかとか・・・
愚痴になってしまったのでおしまい。
75デフォルトの名無しさん:2007/04/26(木) 09:30:00
>>73
C++例外でないアクセス違反を、C++の構文で捕捉できた事が異常。
76デフォルトの名無しさん:2007/04/26(木) 17:52:57
>74
>でも自分の担当じゃないDLLの細部まで調べないと云々は納得いかんな。
他人に直させるにしても、問題が本当に相手のソースにあるのかまではつきとめないと
やっぱり自分のミスでしたって事になった場合、人間関係に亀裂が入り易いからなぁ。
(はっきり指摘してやって逆ギレするのもいるが、そういうのは置いといて^^;)

少ない修正で済むような問題なら、教えてやった方が結果的にロスタイムも少ないしな。
77デフォルトの名無しさん:2007/04/26(木) 18:43:19
なぜfopen()が失敗するのか
78デフォルトの名無しさん:2007/04/26(木) 19:02:47
>>76
別に細部まで調べなくても
渡すデータがDLLの仕様どおりで、呼び出し部以外でコケてなけりゃどう考えてもDLLの問題だし
79デフォルトの名無しさん:2007/04/26(木) 19:10:47
下手に全部調べてからDLL担当者に「バグってますよ」というより、
「巧くいかなくて困っているんで、DLL側で助けてもらえませんか」と下手に出たほうが
協力を得やすく労力も減るかもしれない。
80デフォルトの名無しさん:2007/04/26(木) 19:27:43
もしそのDLLが普通に使われてるんなら
仮にバグがあったとしても今まで問題にならなかったということだ。
81デフォルトの名無しさん:2007/04/26(木) 19:47:25
とある事情によりDLL自体に手を入れ難い状況ということは今まで何事もなく使われてたんだろ
82デフォルトの名無しさん:2007/04/26(木) 21:40:04
まあ、ファイル名を引数等で指定して処理させるような形だったら
一度呼び出し側でfopen()して開けなきゃDLLの関数は呼ばなきゃいいんじゃね?
2度手間になるから、もちろんいじれるならDLLいじった方がいいが。
83デフォルトの名無しさん:2007/04/27(金) 08:03:55
VC++ .NET 2003のオプションで指定するインクルードファイルとかのパスって
どこに保存されてるの?
84デフォルトの名無しさん:2007/04/27(金) 11:32:52
デフォルトの設定 レジストリ
プロジェクトの設定 プロジェクトの定義ファイル
85デフォルトの名無しさん:2007/04/27(金) 19:15:31
レジストリ内の場所ってわかる?
レジストリエディタで目的のパスで検索かけてもHitしないんだけどさ・・・

ちなみにオプションのVC++ディレクトで設定する、インクルードファイルとか実行可能ファイルとか指定するとこなんですが
86デフォルトの名無しさん:2007/05/06(日) 14:30:15
VC++2005なんですが
自作のクラスにメンバを追加したり、STLなどの既存のクラスを読み込んだりしたときに
かなりの頻度で、プロジェクトを閉じて開いたり、VSを再起動したりしないと
:: や . や -> などを入力した後の一覧に追加したメンバが表示されないのですが
再起動などせずに解決する方法は無いのでしょうか
87デフォルトの名無しさん:2007/05/06(日) 20:29:25
MSに要望出せ
88デフォルトの名無しさん:2007/05/08(火) 20:40:19
なぜかある場所でメンバ関数呼び出すと
thisポインタを使わないとメンバ変数が使えなくて
thisで指定しないでその変数に行くとランタイムエラーだされるんですが

これはメモリの領域破壊のバグのひとつでしょうか?
89デフォルトの名無しさん:2007/05/08(火) 21:05:01
ある場所をはっきりさせてから質問してください
90デフォルトの名無しさん:2007/05/08(火) 21:09:54
ランタイムエラーが出るんならランタイムに行ってんだろ
91デフォルトの名無しさん:2007/05/08(火) 21:14:06
ランタイムの使い方がおかしいんだろうね。
その辺りのコード晒してみ?
92デフォルトの名無しさん:2007/05/09(水) 15:54:38
スレ違いでしたらすみません。
質問があります。
ホームページビルダーを久しぶりに起動したら、
次のようなエラーメッセージが出て、起動できなくなりました。
何か解決方法はありますでしょうか?よろしくお願いします。
環境はOSがXP、HBはV9です。

-----------------------------------------------------
Microsoft Visual C++ Runtime Library

Assertion failed!

Program: ... Files\IBM Homepage Builder V9\bin\hpbpage.exe
File: .\RegistryBase.cpp
Line: 81

Expression: code == ERROR_SUCCESS
-----------------------------------------------------
93デフォルトの名無しさん:2007/05/09(水) 16:19:41
ホームページビルダー作った会社に訊け
94デフォルトの名無しさん:2007/05/09(水) 18:57:27
>>92
ここは「Microsoft Visual C++を使う人」のためのスレです
Microsoft Visual C++を「使って作られたソフトを使う人」はお帰りください
95デフォルトの名無しさん:2007/05/09(水) 21:27:25
ウェブ上に公開されているサンプル プロジェクトをビルドすると、次のエラーが出て失敗します。
環境はWinXP、VC++2005です。

> error C2678: 二項演算子 '<' : 型 'const ErrorEntry' の左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
> c:\program files\microsoft visual studio 8\vc\include\xutility 267


試したサンプルはWinsock Programmer's FAQのAsynchronous I/O Clientです
ttp://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/AsyncClient/index.html
(ページの下のほうの「project package (33 KB)」からダウンロード)

ファイルはVC++5のプロジェクトが丸ごと圧縮されており必要なものは全てそろっているそうです。
VC++2005でプロジェクトを変換して開いたのですが、上記のようになりました。
エラーの場所が場所なのでコンパイラに渡すオプションあたりをいじる必要があるのでしょうか?

ご教示お願いします。
96デフォルトの名無しさん:2007/05/09(水) 21:40:31
全然関係ないけど
P.J. Plaugerが自ら語るVS2005搭載C++テンプレートライブラリ
STL.NET
97デフォルトの名無しさん:2007/05/09(水) 23:36:26
従来のSTLの機能の大半は.NET Frameworkクラスで事足りるのにSTL.NETとはこれいかに
98デフォルトの名無しさん:2007/05/09(水) 23:39:31
99デフォルトの名無しさん:2007/05/10(木) 20:00:32
なんでこう、バージョンアップするごとにIntelliSenseがバカになってくいんだ・・・
100デフォルトの名無しさん:2007/05/10(木) 20:03:28
新しいものに慣れるのがつらい年頃なのかね。
101デフォルトの名無しさん:2007/05/10(木) 20:19:52
そうか、いくらファイルを保存してもインテリの情報が更新されないのが新しいものなのかw
102デフォルトの名無しさん:2007/05/11(金) 00:49:58
>>99
IMEも98ぐらいの時が一番賢かった気がする。
103デフォルトの名無しさん:2007/05/11(金) 00:55:58
それはない
104デフォルトの名無しさん:2007/05/11(金) 08:08:03
ATOK使おうぜ
105デフォルトの名無しさん:2007/05/11(金) 17:06:10
いやVCのインテリは付いたときから馬鹿だろ
それだけがVBの取り柄
106デフォルトの名無しさん:2007/05/11(金) 19:29:34
>>104
そのあたりは無理に標準でついてるもの以外を使う必要が無いからなぁ
107デフォルトの名無しさん:2007/05/11(金) 23:10:48
Japanist2003
108デフォルトの名無しさん:2007/05/14(月) 17:47:08
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPTSTR lpCmdLine,int nCmdShow){
MessageBox(NULL,lpCmdLine,"1",MB_OK);
if (lpCmdLine=="/abc"){
MessageBox(NULL,lpCmdLine,"2",MB_OK);}
return 0;}

これで実行ファイルを1.exeとしますと、1 /abcとコマンドラインから実行しても
2つ目のメッセージボックスが出ないんですが何故でしょうか?VS2005,WinXPです。
109デフォルトの名無しさん:2007/05/14(月) 18:22:15
何それ?
110デフォルトの名無しさん:2007/05/14(月) 19:04:09
>>108
文字列の比較方法を調べなさい
111デフォルトの名無しさん:2007/05/14(月) 19:15:58
できました、ありがとうございました。
112デフォルトの名無しさん:2007/05/14(月) 20:03:30
_tWinMain
113デフォルトの名無しさん:2007/05/18(金) 22:31:06
他のC++用IDEにある、IntelliSense同等の機能の方が、圧倒的に性能いいの?
114デフォルトの名無しさん:2007/05/19(土) 02:34:02
他は知らんが
個人的には VS2003 のインテリセンスの具合が好き
2005 はインテリセンスに限らず全体的使えないと思う
115デフォルトの名無しさん:2007/05/19(土) 09:18:05
あー俺も。2003から離れられない。
116デフォルトの名無しさん:2007/05/19(土) 09:57:05
pimplイディオムを使うとインテリセンスも利かなくなるんだけど
これって意図された動作なのかただの偶然なのか?
117デフォルトの名無しさん:2007/05/19(土) 12:09:55
昔VC6.0で作ったプログラムをVC2005に移植したいんですが、
そのままだとビルド出来ませんでした。

プロジェクト自体は変換とか出来たんですが、StdAfx.hでインクルードされてた
Windows ヘッダー ファイル群(windows.hとか)が、No such file or directoryでエラーになります。
かといってこれを外したらコンパイル通らないし・・。

1から組むのは大変なんで、何とか使い回せないかと思うのですが、
何かいい方法ありますでしょうか。
118デフォルトの名無しさん:2007/05/19(土) 12:12:36
Express EditionでPlatform SDKをインストールしてないとか、
パス通してないとかってオチはないよな?
119デフォルトの名無しさん:2007/05/19(土) 12:16:38
No such file or directoryぐらいの簡単な英語なら理解できるだろ
120デフォルトの名無しさん:2007/05/19(土) 12:23:22
>>117
おいおい初心者の俺でも分かるぜ。
121117:2007/05/19(土) 14:01:08
117です。
すみません、仰るとおり、SDKをインストールしていませんでした。。。
インストールしたらインクルードは解決しました。

今度はコンパイルエラーとwarningがいっぱい出てきましたが
ワーニングは無視してコンパイルエラーを修正。
(コンパイルエラーは for(int i=0) の i を for以降で使ってました)

次に「ファイル 'LIBC.lib' を開くことができません」が出ましたが、これはググッて解決。
(プロジェクトのプロパティで特定ライブラリの無視にLIBC.lib追加。)


現在、このエラーと格闘中です。
「zlib.lib(gzio.obj) : error LNK2019: 未解決の外部シンボル _errno が関数 _gz_open で参照されました。」
122デフォルトの名無しさん:2007/05/19(土) 14:21:28
VCのインテリセンスは昔からウンコ
123デフォルトの名無しさん:2007/05/19(土) 14:27:05
errno は VC2005 だとマクロになってた気がするよ。
余計な warning が鬱陶しければ #pragma warning(disable:警告番号) で消した方が。
124デフォルトの名無しさん:2007/05/19(土) 14:27:29
こんどはzlibの追加だネ!
125デフォルトの名無しさん:2007/05/19(土) 15:24:53
VC2005についてるSTLとSTLportでは何が違うの?
126117:2007/05/19(土) 15:37:14
117です。

zlib.libを作り直そうと思って調べてるんですが、
VC2005でStatic Libraryは作れないんでしょうか?


2005、全部1から作るには楽なんだろうけど、ちょっと違うコトしようとしようとすると途端に・・
127デフォルトの名無しさん:2007/05/19(土) 15:43:35
初心者の俺でも作れるし
128デフォルトの名無しさん:2007/05/19(土) 17:31:04
VC6使ってたんなら初心者というわけじゃないだろうし
自分で調べてみるぐらいしようよ
ちょっとでも調べてたらそういう質問はないと思う
129デフォルトの名無しさん:2007/05/19(土) 20:10:17
ダイアログの大きさがフォントの大きさによって変わってしまうのですが、
常に設計時の大きさになるようにする設定ってありますか?
130デフォルトの名無しさん:2007/05/19(土) 20:12:03
あ、実行時にフォント変えてもダイアログの大きさは変わらないのかな?
↑は無視してください。
131デフォルトの名無しさん:2007/05/19(土) 20:28:46
VC++.NETとVC++とは違うものなのでしょうか?
132デフォルトの名無しさん:2007/05/19(土) 20:34:45
.NET使わないなら単なるVC7、VC8
133デフォルトの名無しさん:2007/05/19(土) 20:55:23
>VC2005についてるSTL

そもそもそんなものは無い
134デフォルトの名無しさん:2007/05/19(土) 20:55:34
クグって見たんですが.NET Framework?MFC見たいな物?

VC++ .NET?って?
.NET Framework?って?

VC++6.0で知識が止まってますorz
135デフォルトの名無しさん:2007/05/19(土) 21:10:09
VistaマシンでVC6.0は使用できないのでしょうか。
(「VMWare等で旧OS(XPや2k)入れて使え」と言うのは取り合えず置いておいて)

インストール試してみようと思いsetup.exe実行
→「このプログラムには基地の互換性の問題があります。」

と表示されたところでいったん止めてWeb漁ってるのですが、なかなか有効な解放が得られず。。。
136デフォルトの名無しさん:2007/05/19(土) 21:33:02
>>134
JavaのVMに相当
137デフォルトの名無しさん:2007/05/19(土) 21:40:23
VC++.NETという表現は使われなくなりました。
138デフォルトの名無しさん:2007/05/19(土) 21:52:02
>>135
MS的にはサポート外です。
139117:2007/05/19(土) 22:08:00
117です。

何とか解決しました。

ググってはいたんですが、VS2005の用語が全然分からなくて、とっかかりがなかったです。
ソリューションて何?とかいう浦島太郎状態で。

5年前に自作したツールの、数字を決め打ちしてた部分を1カ所直したいだけだったんですが
結局ビルド通すのに丸一日かかりました。


で、通ったら今度はデータが読めない・・・。

fwrite(this,sizeof(Cdata),1,fp);
ってやってクラス丸ごとバイナリで保存しておいたデータを
fread(this,sizeof(Cdata),1,fp);
で読み込んでるんですが、読み込んだデータが化けてるっぽい。

この辺の仕様も変わっちゃってるのかなぁ・・・
140デフォルトの名無しさん:2007/05/19(土) 22:16:11
ひとりごと
141117:2007/05/19(土) 22:25:25
昔に保存したデータをあきらめて、データ作り直したら行けるっぽいです。めんどいけど。
長々チラ裏に付き合ってもらってありがとうございました。
142デフォルトの名無しさん:2007/05/19(土) 22:45:48
考えられる原因はこんなとこか?
バイナリモード指定していない
アラインメントの指定がおかしい
データ型の大きさが変わった (ex time_t)
143デフォルトの名無しさん:2007/05/19(土) 22:46:43
インスタンスのメモリイメージをそのままをバイナリ保存って無謀すぎ。
普通はシリアライズ用関数とか用意するもんだ。
144デフォルトの名無しさん:2007/05/19(土) 22:47:52
あと、文字列がANSIだったとか。
145デフォルトの名無しさん:2007/05/19(土) 22:57:12
手抜きなんだからしょうがない
146デフォルトの名無しさん:2007/05/19(土) 23:04:21
>>117
vtable の事もたまには思い出してあげてくださいね。
147デフォルトの名無しさん:2007/05/20(日) 06:42:57
どうせ ANSI 文字列をユニコードで表示しようとしてるんだろう。
148デフォルトの名無しさん:2007/05/20(日) 17:31:22
旧バージョンのVisual C++4.0で「コンソールプログラムを作成する」
というような使用条件であれば、十分に活用できますか?
(主にRS232CをWin32APIから使用するのが目的です)

また、当時NT4.0との組み合わせで不具合(多分使用できない機能?)
があるとかの話を耳にしたような記憶があります。
WinXPおよびWin2000での動作はどうでしょうか?
バージョンからして、既に現状に沿った話でなくて恐縮ですが、ご教示下さい。
149デフォルトの名無しさん:2007/05/20(日) 17:37:58
そこまでしてVC4を使う理由が判らない。
つーか、Win32APIからRS232Cを使うというのが何を意味しているのか判らない。
単にシリアル伝送したいだけならmodeコマンドで条件設定してcopyコマンドでもtypeコマンドでもできるだろうに。
150デフォルトの名無しさん:2007/05/20(日) 17:40:38
XP+VC5を使ってる人は知ってるけど、
VC4はわからないなぁ。
151デフォルトの名無しさん:2007/05/20(日) 17:42:38
昔のプログラムでも動くのは動くし、動かないのは動かない
適当なの探してきて動かしてみればいい
152デフォルトの名無しさん:2007/05/20(日) 18:48:47
include の path 指定の書式について質問です。

stdafx.h
#include <../creptopp/sha.h>

と記述してこれをコンパイルすると、
--------------------------------------------------------------------------------
コンパイルしています...
debug.cpp
c:\test\Anonymous\stdafx.h(126) : fatal error C1083:
include ファイルを開けません。'../../creptopp/sha.h': No such file or directory
--------------------------------------------------------------------------------

ファイルの階層は下のようになっています。
test
- creptopp/
- Anonymous/stdafx.h

#include <sha.h>
#include <../creptopp/sha.h>
#include <../../creptopp/sha.h>
と試してみたのですが、うまくいきませんでした orz

どうぞよろしくお願い致します。m(__)m

153152(追記):2007/05/20(日) 18:53:27
* Crypto++ Library 5.4
http://www.cryptopp.com/
cryptopp/sha.h
cryptopp/sha.cpp

展開するとみたいになっていました。これを利用したいです。
154デフォルトの名無しさん:2007/05/20(日) 18:54:15
#include <file-name>
使うならちゃんとpath通しとけよ
155デフォルトの名無しさん:2007/05/20(日) 18:59:35
>>152
相対パスの元は、stdafx.h の場所ではなく
コンパイルしている cpp の置かれた場所なんじゃね?
156デフォルトの名無しさん:2007/05/20(日) 19:13:50
解凍してそのまんまビルド
ライブラリができたらヘッダとlibを適当な場所へ置いて使うだけ
157デフォルトの名無しさん:2007/05/21(月) 21:29:58
C++で普通に関数にするのとクラスのメンバ関数にするのとではとちらが遅いのでしょ?
158デフォルトの名無しさん:2007/05/21(月) 21:38:42
一概には言えない。コンパイラの最適化で、実質的な差が出ない可能性も高い。
速度に関しては、個別に実測する以外は全てただの憶測。
159デフォルトの名無しさん:2007/05/21(月) 22:33:48
オーバーヘットとかは無いの?
160デフォルトの名無しさん:2007/05/21(月) 22:40:45
非仮想関数ならthisを積む程度の差しかないだろうなあ
まぁそんなこと考えるのは時間の無駄だから、コードの見易さ・美しさを考える方がいいよ
161デフォルトの名無しさん:2007/05/22(火) 00:00:15
>オーバーヘットとかは無いの
なんですか? その「オーバーヘット」って。
162デフォルトの名無しさん:2007/05/22(火) 00:06:05
夏塩蹴
163デフォルトの名無しさん:2007/05/22(火) 00:54:16
まあ韓国の文化は冷麺のどんぐり麺?あれだけは評価できるね
164デフォルトの名無しさん:2007/05/22(火) 01:07:28
VC++2005アカデミック日本語版で質問です

「warning C4996: 'scanf' が古い形式として宣言されました。」

scanf()を使うと2005から上記の警告が出ることはググって分かったのですが
当方の警告文は全て英語のままで上記の一文が出てきません

↓これだけ
'This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'

日本語の警告文の説明を表示させたいのですがどこを設定すればいいのでしょうか?
よろしくお願いします
165デフォルトの名無しさん:2007/05/22(火) 07:41:21
C4996でググればいい。
というより、MSDNライブラリインストールしろ
166デフォルトの名無しさん:2007/05/22(火) 07:58:06
役に立たねぇ香具師だなぁ。警告を日本語にしたいって書いてんだろ。
C4996だけの問題じゃねぇんだよ。判ってねぇなら書くなよ。
167デフォルトの名無しさん:2007/05/22(火) 08:11:29
すいませんした。俺が悪いんです。この通りです。許してください。読み違えただけなんです。怒らないでください。日本語にするやり方分かります。でも教えないです。ごめんなさい。
168デフォルトの名無しさん:2007/05/22(火) 08:13:17
どんな警告・エラーもCxxxxの番号が振られているんだから、
C4996以外もその番号でググればいい。
169デフォルトの名無しさん:2007/05/22(火) 09:58:06
わざわざ英語で出るように自分で設定変えたくせに
元に戻す方法は人に聞くのってどういう了見なんだ?
170デフォルトの名無しさん:2007/05/22(火) 11:00:13
C4996でググったらみんな日本語で警告が出るのに
俺の環境じゃ英語しか出ねえよ

て解釈した

英語にアレルギーがあるかしらんがこの機会に慣れたら?
171デフォルトの名無しさん:2007/05/22(火) 11:32:05
VC++2005日本語版に付属のコンパイラとは別に英語版のコンパイラも入れたの?
172デフォルトの名無しさん:2007/05/22(火) 11:33:59
特に何もしてない
173デフォルトの名無しさん:2007/05/22(火) 11:37:29
何もしないで変わるかっつーの
174デフォルトの名無しさん:2007/05/22(火) 13:00:30
MSのサポートに訊けばいい
175デフォルトの名無しさん:2007/05/22(火) 17:58:17
MSマンセー
176デフォルトの名無しさん:2007/05/22(火) 18:24:09
誰かがVC++2005EEでも入れて混ざってんじゃないのかね
177デフォルトの名無しさん:2007/05/22(火) 21:31:25
VS2005無印にSP1当てたら俺も英語だけになったぞ
でもたいして問題じゃねえしMSDNライブラリあれば心配ねえよ
178デフォルトの名無しさん:2007/05/22(火) 23:27:34
それは、英語版のSP1を入れてしまったのでは?
179デフォルトの名無しさん:2007/05/23(水) 09:56:28
(´,_ゝ`)プッ ソンナオチダッタノカ
180デフォルトの名無しさん:2007/05/23(水) 11:14:52
んなわけない
181デフォルトの名無しさん:2007/05/23(水) 11:24:41
そうだな。
本人は「特に何もしてない」と言ってるんだからSP1だってあててるわけが無い
182デフォルトの名無しさん:2007/05/23(水) 11:31:01
痴呆か。
183デフォルトの名無しさん:2007/05/23(水) 11:31:36
俺もSP1当てたからかしらんが英語だよ
その程度の日本語の説明なら要らんけど
あと、うちはProfessionalだな
184デフォルトの名無しさん:2007/05/23(水) 11:38:23
SP1入れてない。
MicrosoftUpdateで時々入れようとしてるんだけど毎回失敗する。
185デフォルトの名無しさん:2007/05/23(水) 14:17:33
俺も前失敗続いてたけど最近あらためてやったら成功したな
何が原因だったんだろ
186デフォルトの名無しさん:2007/05/23(水) 14:43:17
ちょっとツンだっただけさ
187デフォルトの名無しさん:2007/05/23(水) 17:18:31
SP1を当てたが別に英語になっていないぞ
188デフォルトの名無しさん:2007/05/24(木) 10:37:27
MFCで×ボタンを押してアプリケーションを終了するとき
どこになんと言う名前でその処理が書かれているか教えてください
終了するときに処理を付け加えたいのでお願いします
189デフォルトの名無しさん:2007/05/24(木) 10:54:40
WM_CLOSEのハンドラを追加
190デフォルトの名無しさん:2007/05/24(木) 10:58:08
SC_CLOSE → WM_CLOSE → WM_DESTROY
の順じゃないかな。それぞれのデフォルトハンドラで
MFCだと、OnSysCommand() からクローズ投げて
OnClose() が呼ばれ、そこでDestroyWindow()して OnDestroy()が呼ばれる。
もしかしたら違うかも。spy++やデバッガで確認してみて
191デフォルトの名無しさん:2007/05/24(木) 11:00:22
処理内容によっちゃExitInstanceでという選択肢も
192デフォルトの名無しさん:2007/05/24(木) 11:16:42
ありがとうございます処理内容はダイアログを表示させて
パスワード入力とOKボタンを押し終了させるものです
パスワードが違っているかキャンセルボタンを押した場合終了しません

という処理をしようと思っています
193デフォルトの名無しさん:2007/05/24(木) 11:47:00
クラックしてやんよ
194デフォルトの名無しさん:2007/05/24(木) 11:47:19
連レスすいません
ハンドラの追加でON_WM_CLOSE()を追加したんですが
対応する関数に反応ありませんでした
195デフォルトの名無しさん:2007/05/24(木) 11:54:15
×ボタンってダイアログの話なの?
何がどうなってるのかよくわからん、反応が無いとは何で判断?
196デフォルトの名無しさん:2007/05/24(木) 11:57:31
>>195
フォームビューによるダイアログです
プロパティのメッセージから追加しました

ブレークポイントをつけて通っているか判断しました
197デフォルトの名無しさん:2007/05/24(木) 11:58:45
http://www.kumei.ne.jp/c_lang/sdk/sdk_08.htm

↑簡単に言うとこういうことをMFCでやりたいのです
198デフォルトの名無しさん:2007/05/24(木) 11:59:40
んーと、WM_CLOSEが来るのはその閉じるウィンドウにくるんだよ。
こないのはおかしいね。spy++で観察してみては。
199デフォルトの名無しさん:2007/05/24(木) 12:14:47
spy++でみてみるとWM_CLOSEはちゃんとありました
200デフォルトの名無しさん:2007/05/24(木) 12:17:58
エスケープキーでダイアログが閉じないようにするので、そのへんやったことあるけど
ダイアログベースじゃない場合は、どのクラスがメッセージを処理してるかだな
201デフォルトの名無しさん:2007/05/24(木) 12:25:40
sdi/MDIでeditビューの場合は編集中にプログラム閉じようとすると
保存しますか?
みたいな確認でたような気がするけどどうだったかな?
202デフォルトの名無しさん:2007/05/24(木) 12:27:28
観察した結果は

WM_DESTROY→WM_NCDESTROY→WM_CLOSE→WM_SYSCOMMAND

でした
203デフォルトの名無しさん:2007/05/24(木) 12:45:28
CMainFrame::OnCloseにちゃんと来るじゃん
そのあと閉じていいか確認が出る
204デフォルトの名無しさん:2007/05/24(木) 13:13:44
閉じていいか確認が出ないのですが
CMainFrame::OnCloseをオーバーライドして使えばいいということですか?
そこも通らないような・・・
205デフォルトの名無しさん:2007/05/24(木) 13:15:33
あとWM_DESTROYは反応ありましたがウィンドウが閉じたあとでした
206デフォルトの名無しさん:2007/05/24(木) 13:24:39
sdi/MDIでeditビューが基本
最初からそういう風に動作するようになってる
207デフォルトの名無しさん:2007/05/24(木) 13:37:57
>>205
まあいろいろ試してあちこちにハンドラ置きまくってみればいろいろわかることもある。
208デフォルトの名無しさん:2007/05/24(木) 13:40:25
通りました!!CMainFrame::OnCloseでした!!
ありがとうございます!
209デフォルトの名無しさん:2007/05/24(木) 16:34:45
自作ダイアログ表示させようとしたら
自分でつけたコントロールのほかに

TODO: コントロールをここに置く のテキストボックスと
OKとキャンセルボタンがついてごっちゃになってました

Jisakudlg dlg(this);
dlg.DoModal();

なぜなのか教えてください
210デフォルトの名無しさん:2007/05/24(木) 16:47:48
>>209
ダイアログの選択したパーツを整列するボタン押したんじゃないの?
211デフォルトの名無しさん:2007/05/24(木) 16:52:44
すいませんよくわからないですけどhtmlが入ってたみたいで
作り直したらいけました
212デフォルトの名無しさん:2007/05/24(木) 22:34:23
可変個引数の簡単な使い方(できれば、va_arg,va_end,va_startを使わない)を教えてください。

やりたいことは、下記のようにprintf系の関数に引数をそのまま渡したいのです。
void printfWithHeader(char *str, ...) {
char buf[1000] = "Header:";

strcat(buf,str);
printf(char *str, ...);
}

環境は、Visual Studio 2003です。
皆様、お願いいたします。
213デフォルトの名無しさん:2007/05/24(木) 22:53:23
VCというか普通のCの質問だろ
そんなことをわざわざVCスレで質問する意味がわからん
214デフォルトの名無しさん:2007/05/24(木) 22:57:12
できません
規約も護れないやつぁ帰れ
215デフォルトの名無しさん:2007/05/24(木) 23:00:07
vprintf 系を使えよ・・・。
216デフォルトの名無しさん:2007/05/25(金) 00:06:50
Visual Studio.net2003を使っているのですが、
UTF-8のソースを扱うにはどうすればいいのでしょうか。
コンパイルはできるのですが、日本語の表示ができません。
217デフォルトの名無しさん:2007/05/25(金) 00:24:02
>>215
thx.
vprintf系でできそうです。


>>213
> VCというか普通のCの質問だろ
> そんなことをわざわざVCスレで質問する意味がわからん

レスありがとうございます。
VCの拡張機能も含めて、回答を頂きたかったからです。
老婆心ながら、>>213さんは行間をうまく読めないようですので、コミュニケーション能力を鍛えた方がよろしいかと思いました。
218デフォルトの名無しさん:2007/05/25(金) 00:27:25
質問等で、行間を読んでくれる事に期待するってのは、
一般社会ではコミュニケーション能力不足と判定されます。
219217:2007/05/25(金) 00:29:21
確かにその通りですね... (-_-;)
220デフォルトの名無しさん:2007/05/25(金) 00:34:52
>>216
先にShift_Jisに変換してからコンパイル、が一番楽。
.NETベースのコンパイラは、文字列=Unicodeで保持、と決め打ちできるんだけどねえ。
221デフォルトの名無しさん:2007/05/25(金) 00:51:21
Windows は UTF-16 で動いてるけど、
.NET を通す場合だとどうなんだろう。
よく知らん。
222デフォルトの名無しさん:2007/05/25(金) 01:03:25
>217
人が多いスレで質問した方が適切な回答が得られやすい
ここはVC限定でしかも初心者限定だから人が少ない
223デフォルトの名無しさん:2007/05/25(金) 04:26:27
いやこんな質問初心者レベルだろ
224デフォルトの名無しさん:2007/05/25(金) 07:09:43
>>216
VS2003にもVBとか色々あるが、ここで質問するからにはVC++2003でいいんだな?
225デフォルトの名無しさん:2007/05/25(金) 09:14:21
仕様書の行間なんぞ読まれたらと思うと・・・
226デフォルトの名無しさん:2007/05/25(金) 11:24:20
>>217 は技術者としては失格だろ
技術者が設計図の行間とか読んだら、ものは出来上がらない
行間読むくらいなら、設計を詳細まで確認するのが正しい
227デフォルトの名無しさん:2007/05/25(金) 12:26:21
VC2002を初めて使っているのですが、DllプロジェクトとMainのプロジェクトがあり
DLL側のヘッダをincludeし、定義しているクラスをメインのexeで使いたいのですが
宣言はできるのですがビルドすると 未解決の外部シンボル と怒られます。

どうしたらよいのでしょうか。
228デフォルトの名無しさん:2007/05/25(金) 12:54:27
複数のプロジェクトをいっしょに扱うのが難しかったら
DLLを先にビルドしてしまえば、DLLで配布されてるライブラリなんかと同様に扱える
229デフォルトの名無しさん:2007/05/25(金) 13:29:18
即レスありがとうございます。

実はcppUnitを使用したいと思いまして、現在のプロジェクトをそのままに
新規でテスト用のプロジェクトから該当のクラスにアクセスしたいと考えておりました。

おっしゃられるように入出力だけのテストなら、dll呼び出せばできそうです。
ありがとうございます。
230デフォルトの名無しさん:2007/05/27(日) 07:54:30
フリーでVisualC++用のリファクタリングアドインある?
231230:2007/05/27(日) 08:29:21
232デフォルトの名無しさん:2007/05/28(月) 12:20:46
VisualC++6.0でCDialogについて質問です。

1つのプロジェクトに複数のダイアログ画面でがあり、
各画面で同じ処理を行うメンバ変数・関数が存在します。
これをまとめるため、CDialogから派生したCCustomDialogを作成し、
各画面の基底クラスに使用することを考えました。

通常のC++クラスであれば、上記のことが可能であるとわかりますが、
CDialogクラスでも可能でしょうか?
(Windowsのイベントとかメッセージとかが、正常に処理されるのか心配しています。)
233デフォルトの名無しさん:2007/05/28(月) 12:32:20
>>232
CDialogを派生して各ダイアログクラスを作るように、CCustomDialogを派生すればいい。
CCustomDialogの作成には幾つかMFC特有のおまじないが必要だから、どっかでサンプルを探すのがいいね。
234232:2007/05/28(月) 19:36:24
>>233
レスありがとうございます。
参考にさせていただきます。
235デフォルトの名無しさん:2007/05/29(火) 20:40:37
メッセージループとか使わないプログラムで、
キーボードの入力を待たないでキーボードの入力を取得するにはどうすればよいのでしょう?
(押されてなかったらNULLかなんかで抜けてくれる関数等)
236デフォルトの名無しさん:2007/05/29(火) 20:54:06
GetAsyncKeyState
237デフォルトの名無しさん:2007/05/29(火) 22:26:24
>>236
これで出来ました。どうもありがとう。
238デフォルトの名無しさん:2007/05/30(水) 13:17:56
VisualC++2005,XPで開発してます。
ダイアログボックスに画像とその説明のテキストのリストを載せたいのですが、
どのコントロールを使えば最適でしょうか?
239デフォルトの名無しさん:2007/05/30(水) 13:19:49
さあ
240デフォルトの名無しさん:2007/05/30(水) 13:43:28
>>238
ケースバイケース
241デフォルトの名無しさん:2007/05/30(水) 14:26:19
ありがとうございます。
適当にやります。
242デフォルトの名無しさん:2007/05/30(水) 15:29:04
使わないのが最適
243デフォルトの名無しさん:2007/05/30(水) 16:01:43
初めまして、VisualC++2005のC++/CLI でフォームのすべてのイベントに反応させたいのですが、
そのようなイベントが見つかりません。
そのようなデリゲートはないのでしょうか?
244デフォルトの名無しさん:2007/05/30(水) 16:33:18
メソッドだけどWndProcは?
245デフォルトの名無しさん:2007/05/30(水) 16:58:28
HideCaret(static_cast<HWND>(this->textBox1->Handle.ToPointer()));
で、キャレットを非表示にすることまでは分かったのですが、常に非表示にするにはすべてのテキストのイベントで実行させなければなりません。
もっと効率よくキャレットを非表示にする方法はないものでしょうか?
246デフォルトの名無しさん:2007/05/30(水) 16:59:47
またお前か
247デフォルトの名無しさん:2007/05/30(水) 17:11:25
ご無沙汰しております。
248デフォルトの名無しさん:2007/05/30(水) 17:27:57
ないだろ
どうせ普通はそんなこと誰もやらないし
249デフォルトの名無しさん:2007/05/30(水) 17:29:32
サブクラス化してしまえ
250デフォルトの名無しさん:2007/05/30(水) 17:31:36
テキストつかわなきゃいい
251デフォルトの名無しさん:2007/05/30(水) 17:34:25
ウインドウズの電卓はテキストBOX使ってない
252デフォルトの名無しさん:2007/05/30(水) 17:51:14
キャレットに用意されているマウスカーソルイメージを弄れば。
253デフォルトの名無しさん:2007/05/30(水) 17:57:34
ShowCaret使わないなら同じこと
254デフォルトの名無しさん:2007/05/30(水) 20:20:18
テキストボックスコントロールを自作すれば?
255デフォルトの名無しさん:2007/05/31(木) 00:22:57
タイマーで監視しとけ。
256デフォルトの名無しさん:2007/05/31(木) 02:19:05
>>255
プログラマーとしてそんな行為が許されると思っているのですか?
25762:2007/05/31(木) 06:44:08
目的:Windows アプリケーションを選択して
(現状選択できない)ビルド、実行したい!コンソールアプリケーションは選択可!

>>62 VC++2005EE VISTA Microsoft Platform SDK をインストールは
自分でぐぐったり、繰り返しやったことでなんか組み込むことができたようです!^^
原因はおそらくVC++2005EEを起動したままインストール作業を
したからだと思います!(たぶん!)原因がこんなことだったとは・・・><;

Windowsゲームを作るように Windowsアプリケーションで
キャラクターを表示させたい。必要と思ったためDirectX SDKもインストールしました!^^
DirectX Sample Brawserも見れす。Microsoft .NET Framework Version 2.0もOK!
参考サイト
http://freepg.fc2web.com/cpp/topic_vce_001.html
http://www.plustarnet.com/aspil/Programming/2d00.htm
http://www5b.biglobe.ne.jp/~u-hei/vcexpress_settings/
時間ばかりかかり、どうか・・・みなさまのお力を><;
258デフォルトの名無しさん:2007/05/31(木) 06:48:26
>>257
何だ何だすごく読みづらいぞ
259デフォルトの名無しさん:2007/05/31(木) 06:51:19
もうDestroyCaretで殺しチャイナYO
260デフォルトの名無しさん:2007/05/31(木) 06:51:41
>>257
再インスコ
261257:2007/05/31(木) 07:14:02
>>258
読みやすくしたつもりですが・・・長文過ぎたか ><;
>>260
一応何回かやっています。どなたぞ宜しく願い^^
もう少し待ってつつ頑張ります。 ><;
262デフォルトの名無しさん:2007/05/31(木) 07:21:26
いや長文じゃないし日本語じゃない
263257:2007/05/31(木) 07:23:08
>>262
すません><;
264デフォルトの名無しさん:2007/05/31(木) 09:46:34
何がやりたくて、何をしたけど現状どうなってるのか
265デフォルトの名無しさん:2007/05/31(木) 10:01:25
>すません><;
言葉を注意されてすぐにもこんな事書くのか。
266デフォルトの名無しさん:2007/05/31(木) 10:14:00
><;
267デフォルトの名無しさん:2007/05/31(木) 11:32:31
><;><;><;><;><;><;
268257:2007/05/31(木) 11:43:11
>>263
>何がやりたくて
Windowsアプリケーションで Windowsのゲームを作りたい!
よってWin32アプリケーションの生成と実行をしたい!
>何をした
VC++2005EE、Microsoft Platform SDK をインストールした
DirectX SDK、Microsoft .NET Framework Version 2.0 もインストールした
主にインストール設定以下の3つを参考にした
http://freepg.fc2web.com/cpp/topic_vce_001.html
http://www.plustarnet.com/aspil/Programming/2d00.htm
http://www5b.biglobe.ne.jp/~u-hei/vcexpress_settings/

>現状どうなっているのか
http://www5b.biglobe.ne.jp/~u-hei/vcexpress_settings/
のWindows アプリケーションのビルドのアプリケーションの設定の
アプリケーション種類でWindowsアプリケーションが選択できない
(コンソールアプリケーションのみ選択できる)
なのでWin32アプリケーションの生成と実行ができない
------------------------------------------------------
他にインストールや設定が必要なのでしょうか?前向きな意見を^^
OSはVISTAです。コンソールアプリケーションは作成できます
分かりにくかったらごめんなさい <(_ _)>
269デフォルトの名無しさん:2007/05/31(木) 11:46:04
バカじゃねぇのw
そんな簡単な所で躓いてんのかよwww
既出も既出大既出
270デフォルトの名無しさん:2007/05/31(木) 11:49:13
>>268
やっぱり、「現状どうなっているのか」は大事だね。

それで正常だよ。Win32アプリケーションを作りたかったら
もうちょっとこことか、他のサイトでも調べてごらん。
271デフォルトの名無しさん:2007/05/31(木) 11:50:42
>>268
もっと具体的に何をしたか書いてみ。
例えば、AppSettings.htmはどう修正したとか。
272デフォルトの名無しさん:2007/05/31(木) 11:57:03
で、コンソールアプリケーションを作成はしてみたのかな。
コンソールアプリケーション作成時に、ウィザードの選択肢はチェックしたのかな。
273257:2007/05/31(木) 15:55:17
>>269 どうもです^^
>>270>>271
>それで正常だよ >例えば、AppSettings.htmはどう修正したとか。
この意見は大きかったです <(_ _)> その辺を意識して再調査しました
>>272
コンソールアプリケーションも動かしてみます

意見を聞いて調べ実行した結果。種類でWindowsアプリケーションが選択できました(^_^)ノ
Googleキーワード 「Windows アプリケーション AppSettings.htm corewin_express.vsprops」
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1351057&SiteID=7
を発見!それまでは秀丸で編集して反映されてOKと思っていたのですが・・・(AppSettings.htm)
メモ帳で開く反映されていない!え〜><;・・・ならばメモ帳で編集すればOKかと思ったのですが
反映されませんでした><;なんで〜T_T;意味分かりません><;・・・サイトの通りに
管理者権限でやるとうまくいきました・・・勉強します orz

多くのレス有難うございました。又何かありましたら宜しく願います。<(_ _)>
274デフォルトの名無しさん:2007/05/31(木) 16:01:10
>>273
ExpressEditionはしばらくしたら爆発するから気を付けろ
275デフォルトの名無しさん:2007/05/31(木) 18:23:49
現在のプロジェクトのフォルダを一発で開くような便利な技はありませんか?
276デフォルトの名無しさん:2007/05/31(木) 18:39:13
ツール(T)->オプション(O)->環境->スタートアップ->スタートアップ時(P):
を、最後に読み込んだソリューションにする
277デフォルトの名無しさん:2007/05/31(木) 18:39:18
開くって何で開くのさ
278デフォルトの名無しさん:2007/05/31(木) 18:42:25
フォルダなら2発目ぐらいで開ける
279デフォルトの名無しさん:2007/05/31(木) 18:42:56
愛で開くのさ
280デフォルトの名無しさん:2007/05/31(木) 18:48:41
開く押したら開くけど
281デフォルトの名無しさん:2007/05/31(木) 18:57:35
フォルダを開くって言ったらエクスプローラーで開くことなんだけど
282デフォルトの名無しさん:2007/05/31(木) 18:59:08
>>275
ファイルを開くダイアログで十分操作はできると思うぜ。
283デフォルトの名無しさん:2007/05/31(木) 19:08:16
    〃〃∩  _, ,_      
     ⊂⌒( `Д´) エクスプローラーじゃなきゃヤダ
       `ヽ_つ ⊂ノ          ヤダ
              ジタバタ
284デフォルトの名無しさん:2007/05/31(木) 19:09:51
それくらい自分で作れやカス
285デフォルトの名無しさん:2007/05/31(木) 19:12:09
馬鹿には無理だけど、ダイアログからエクスプローラは1発で開ける
286デフォルトの名無しさん:2007/05/31(木) 19:22:53
ΩΩ <な、なんだってー!!
287275:2007/05/31(木) 19:40:50
ふっ・・・できたぜ・・・世話んなったな。アバヨ!!!!!!!!
288デフォルトの名無しさん:2007/05/31(木) 23:07:50
 ___  見えませ〜ん
‖    |     ∨
‖現実 ∧_∧   .ヘ∧
‖ \ ( ・∀・) (゚A●)
|| ̄ ̄⊂   )  (   と)
凵    し`J   U U

 ___  読めませ〜ん
‖    |     ∨
‖空気 ∧_∧   .ヘ∧
‖ \ ( ・∀・) (゚A●)
|| ̄ ̄⊂   )  (   と)
凵    し`J   U U

 ___  知りませ〜ん
‖    |     ∨
‖常識 ∧_∧   .ヘ∧
‖ \ ( ・∀・) (゚A●)
|| ̄ ̄⊂   )  (   と)
凵    し`J   U U

 ___  ありませ〜ん
‖    |     ∨
‖未来 ∧_∧   .ヘ∧
‖ \ ( ・∀・) (゚A●)
|| ̄ ̄⊂   )   (  と)
凵    し`J   U U
289デフォルトの名無しさん:2007/06/02(土) 02:13:55
WisdomSoftのWinAPI講座のメッセージボックスのページ、「文字列フォーマット」に倣って
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
CHAR chStr[128];

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

return 0;
}
とやっているのですが、UNICODEでコンパイルしようとすると(勿論マルチバイトではコンパイルできます)
error C2664: 'wsprintfW' : 1 番目の引数を 'CHAR [128]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2664: 'MessageBoxW' : 2 番目の引数を 'CHAR [128]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
と型変換のエラーではねられます。
CHARをTCHARにしてみたり、とりあえず無闇にキャストしてみたりしたのですが、上手く行きません。
wsprintfをUNICODEでコンパイル通すにはどうしたら良いのでしょうか。
290デフォルトの名無しさん:2007/06/02(土) 02:32:38
#include <windows.h>
#include <tchar.h>

int WINAPI _tWinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
LPTSTR lpCmdLine , int nCmdShow ) {
TCHAR chStr[128];

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

return 0;
}
291289:2007/06/02(土) 21:19:53
>>290
あふ。wsprintfでもTEXTマクロ噛ませないといけなかったのですね。
情けなや……
どうもありがとうございました。
292デフォルトの名無しさん:2007/06/03(日) 17:20:11
winnt.h内で
#define VOID void
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
やら、
windef.hで
typedef int INT;
やら定義されていますが、これら大文字の型を用いる時(或いは用いることが望ましいとされている時)
はどのようなときでしょうか。
或いは過去or未来との互換性の為に存在するのでしょうか。
また、もしMSDNに参考となるドキュメントがあれば、それもお教え下さい。
293デフォルトの名無しさん:2007/06/03(日) 17:25:36
apiの仕様にあわせやすい
将来仕様変更あってもいい
294デフォルトの名無しさん:2007/06/03(日) 18:40:41
>>292
> 或いは過去or未来との互換性の為に存在するのでしょうか。
じゃねーか。
295292:2007/06/04(月) 00:58:10
>>293-294
解答ありがとうございます。
Win32App的には大文字で記述した方が将来的に互換性が維持されることが期待される、ということでしょうか。
サンプル漁ってもVOIDはたまに見かけますが、INTとかは今のところ見つけられていないので、現実にはほとんど利用されていない、のかな。
296デフォルトの名無しさん:2007/06/04(月) 01:09:12
>>295
> 大文字で記述した方が
というわけではなく。
たとえばintのビット数が現在のコンパイラと違うものがあった場合(実際あるよ)、
直接INTを使うよりもtypedef されたものを使っていた方が移植が簡単。
typedefのところ1箇所を変えればいいのだから。
てなとこじゃないかと・・・・
297296:2007/06/04(月) 01:09:58
間違えた 「直接int」 ね。
298デフォルトの名無しさん:2007/06/04(月) 02:03:08
あ、なるほど。訂正ありがとうございます。
コンパイラ側の設定(と呼んでいいのかな)としてintのビット数を将来的に変更しやすいようにしているわけですね。
どうもありがとうございました。
299デフォルトの名無しさん:2007/06/04(月) 07:28:27
すいません質問があるんですが、ゲーム中に
visual c++ runtime library
runtime error
abnormal prpgram tarmination
っていうエラーが起こってしまいましてゲームが進まないのですが、どのように対処したらよいでしょうか?
ちなみにXPです
300デフォルトの名無しさん:2007/06/04(月) 07:44:58
     凵@     ○   ∇ 、,、´`゙;~、  ';冫 ☆
           ┏  ━ゝヽ''人∧━∧从━〆A!゚━━┓。
 ╋┓“〓┃  < ゝ\',冫。’ 、 ._〃Ν ; ゛△│´' 'ゝ'┃...   ●┃
 ┃┃_.━┛ヤ ━━━━━━,/\.\━━━━━━━━━ .━┛
        ∇        //\\.\ 火、ヽ,,"∧.: .┨'゚,。
           .。冫▽ < //   \\.\ 十   乙  ≧   ▽
         。 ┃ . Σ、\.     \\|, 、\'’│   て く
           ┠ .ム┼\\.    /// ,,’.┼ ァΖ.┨ ミo'’`
         。、゚`。、   i/\,\// レ' o。了 、'’ ×  个o
        ○  ┃   `、,~´+√ ▽   ',!ヽ.◇    o┃
            ┗〆━┷ Z,.' /┷━''o ヾo┷+\━┛,゛;
301デフォルトの名無しさん:2007/06/04(月) 07:55:31
>>299
作ったやつに文句言う。
302デフォルトの名無しさん:2007/06/04(月) 08:05:41
>>299
OSがC++でできてるの知ってる?
そのエラーはね爆発予告なんだよ。
だから>>300の言うように今すぐPC投げ捨ててぶっ壊さないとダメなんだよ。
地球を滅ぼしたくないならね。
303デフォルトの名無しさん:2007/06/04(月) 08:16:57
ウイルス
304デフォルトの名無しさん:2007/06/04(月) 08:55:47
そのゲームをキミが作ったんじゃなけりゃ
そのゲームのスレかPC初心者あたりのスレで
305デフォルトの名無しさん:2007/06/06(水) 13:02:24
環境 WindowsXP
VisualStudio2005 VC++
文字セット UNICODE
目的 読み出したテキストと同じ内容を表示

//TCHAR szStrは外部のメモ帳で作成したテキストファイルから読み出し
//内容=>test.txt "テスト1234テスト"

int Len;
TCHAR buf[1024*64];

Len = MultiByteToWideChar(CP_ACP,0,(LPCSTR)szStr,-1,buf,0);
MultiByteToWideChar(CP_ACP,0,(LPCSTR)szStr,-1,buf,Len);

//違うのは当たり前だけど、いい方法が解らない
buf[(Len-1)/2] = '\0';
//Lenは27
//出力すると=>"テスト1234テストフフフ"

目的通りに元の文字列を表示させるにはどうしたらいいでしょうか?
306305:2007/06/06(水) 13:42:57
試行錯誤してたら出来ましたが、これで問題無いんでしょうか?
int buflen;
TCHAR buf[1024*64];
int len = _tcslen(szStr);

buflen = MultiByteToWideChar(CP_ACP,0,(LPCSTR)szStr,-1,buf,0);
MultiByteToWideChar(CP_ACP,0,(LPCSTR)szStr,-1,buf,buflen);
buf[buflen-len-1] = '\0';
307デフォルトの名無しさん:2007/06/06(水) 14:20:44
>>306
何がしたいのかわからん。
MultiByteToWideChar の戻り値をよく考えろ。
バッファサイズに0を指定した場合、ヌル終端も含めたバイと数が返ってこないか?
わざわざ '\0' を入れてるのは何で
308デフォルトの名無しさん:2007/06/06(水) 14:22:11
バイト数じゃないや、文字数ね
309デフォルトの名無しさん:2007/06/06(水) 15:52:43
>>305
test.txtの文字コードが定まっているのなら、
szStrはTCHARではなく、CHARやWCHARあるいはその他の大きさが変化しない型にすべき
310デフォルトの名無しさん:2007/06/06(水) 20:29:20
ビルドがUNICODEってことか?
改行文字を"\0\0"でやってみそ
ここのMultiByteはUTF16(エンディアンは忘れた)だからエスケプ文字も2バイト長だったかな
Sjis→Uni変換ならCP_ACPはNULLでもよかったような希ガス
311310:2007/06/06(水) 20:32:13
改行文字じゃないよ、EOFだよ俺('A`)
312デフォルトの名無しさん:2007/06/07(木) 02:36:53
http://phys.cool.ne.jp/physjpn/htextmetric.htm
このページに書いてあるGetCharABCDWidths関数の使用方法と必要なヘッダファイルを教えてください。
ググってもぜんぜんヒットしないんです。
なんかすごく便利そうなのに。
313デフォルトの名無しさん:2007/06/07(木) 02:50:25
ヤフれカス
314デフォルトの名無しさん:2007/06/07(木) 03:04:00
>>313
ヤフっても出てこないけど?
いいから教えてください。
315デフォルトの名無しさん:2007/06/07(木) 03:11:23
そんな簡単な事も分からんのに・・・
316デフォルトの名無しさん:2007/06/07(木) 03:25:47
だからいいから早く教えろよ。
検索しても出てこないから聞いてるんだろうがよ。
317デフォルトの名無しさん:2007/06/07(木) 03:27:21
なんなんだよ
318デフォルトの名無しさん:2007/06/07(木) 03:28:54
全然寝てないのに加わってめちゃくちゃイラ回るな。
もったいぶらずに教えろよ。
319デフォルトの名無しさん:2007/06/07(木) 03:28:55
書いてあるやんw
日本語も分からんのか(´・ω・`)
320デフォルトの名無しさん:2007/06/07(木) 03:30:09
寝て起きたら分かるよ
321デフォルトの名無しさん:2007/06/07(木) 03:39:12
GetCharABC”D”Widths って何だよ・・・。GetCharABCWidthsかよ・・・。
ひでーよなんだよ・・・。くそー。スマンカッタ
322デフォルトの名無しさん:2007/06/07(木) 08:21:00
包囲網かとオモタ
323デフォルトの名無しさん:2007/06/07(木) 14:40:14
\(^o^)/ワーイ
324デフォルトの名無しさん:2007/06/08(金) 23:16:35
>>313
ググること自体が検索するの意味なので「ヤフれ」はおかしい。
大抵の用語集には「ググる」とはグーグルで検索することとあるがしかし、
これはグーグルが「勝手に名前を使うな」とちゃちゃを入れたことから始まる。
昔は「ググる」とは一般的に検索するという意味で使われていたのである。
そんな痛々しい策略に乗ってヤフれなど言うのは恥ずかしいことこの上ない。
325デフォルトの名無しさん:2007/06/08(金) 23:19:55
ヤフれ
326デフォルトの名無しさん:2007/06/08(金) 23:37:13
Googleがチャチを入れる前からヤフるも見受けられていた

第一Googleが問題にしていたのは、英語としてのgoogleで、
少なくとも日本法人は、日本語のググるを問題視していない
http://japan.cnet.com/news/media/story/0,2000056023,20209087,00.htm
327デフォルトの名無しさん:2007/06/10(日) 01:30:25
ググレカスで初心者も含めてgoogleに流れるなら、
それはググルにとっても利点だろう
328デフォルトの名無しさん:2007/06/10(日) 07:12:56
ググレカレ
329デフォルトの名無しさん:2007/06/10(日) 11:07:06
Google独裁社会
330デフォルトの名無しさん:2007/06/10(日) 13:55:37
ググルもいいけど、やふーもね
331デフォルトの名無しさん:2007/06/10(日) 19:34:13
孫某というハゲがウザいので、アホーは使わない
332デフォルトの名無しさん:2007/06/14(木) 01:07:27
書籍スレで評判がよかったので
「プログラマ養成入門講座 VisualC++ 山本信雄」
という本でVisualC++を学習しているのですが、
本で使っているソフトがVisualC++6.0で、当方2005でを使っているのですが
操作方が原型を留めていないのですよ。

VisualC++6.0はもう手に入らないのでしょうか?
もしくは手に入れる方法はないのでしょうか?

333デフォルトの名無しさん:2007/06/14(木) 01:22:19
それだけの理由で6を使うくらいなら本を替えたら?
6はまだインストールされてるけど、2005使うともう使う気になれないな・・・
334デフォルトの名無しさん:2007/06/14(木) 02:11:30
つーか、操作方法を本で勉強したからといってプログラマにはなれないわけだが。
335デフォルトの名無しさん:2007/06/14(木) 05:55:13
やってることの意味が理解できてればバージョン違っても大丈夫なはず
付録のCDがついてると思うけど
サンプルをそんまんまビルドして動かしてみればいいと思う。
336332:2007/06/14(木) 09:44:58
>>333
三冊で約8000円ですよ。
今さら買いかえるなんてあんまりです。・゚・(ノД`)・゚・。
本にこんなに注ぎ込んだのは大学以来ですよ〜。。
ちなみに。、MFCが消えるって知ったのは最近です。

>>334
いやーでもビジュアル面は大事ですよ。
操作方法が判ってるとびびらなくなりまし。
会社でC#使ってるんですが、標準C#入門読み終わって。
VS.netみたらびびりましたもん、なんじゃこれ?って。。

>>335
あんましよく理解できてないかも。。
APIなんて触ったの初めてだし。
OSとかAPIとかの本読まなきゃダメなのかな orz

337デフォルトの名無しさん:2007/06/14(木) 10:34:34
操作方法なんてその場でヘルプ見ればいい
本は言語関連だけ参考にすればいい
338デフォルトの名無しさん:2007/06/14(木) 13:01:11
でも初心者は本があった方が助かることも事実
本買う金が惜しかったら、ネットで調べるしかないな
339デフォルトの名無しさん:2007/06/14(木) 19:45:04
VC++2002
MFC7.0

フォルダを探してそのフォルダの中にテキストファイルを作成
すでにテキストファイルがあればテキストを追加
もしフォルダが存在しない場合フォルダを作成してからテキスト作成

テキスト作成はC言語のやり方でやろうと思っています
フォルダの作成でいいのがあれば教えてください
340デフォルトの名無しさん:2007/06/14(木) 21:23:06
>>339
好きなのどぞ〜
複数階層を纏めて掘れるSHCreateDirectory/Exは、
残念ながらdeprecated扱いなので注意。

// C Runtime
_mkdir
system("mkdir ○○○")
// Win32
CreateDirectory/Ex // _mkdirかこれが無難か
SHPathPrepareForWrite // 一番楽?
// Automation
Scripting.FileSystemObject.CreateFolder // WSHでは標準的な方法
Shell.Application.NameSpace - Folder.NewFolder // マニア向け
// .NET
System.IO.Directory.CreateDirectory
System.IO.DirectoryInfo.Create
Microsoft.VisualBasic.FileSystem.MkDir // 昔のVBLoveな人向け
Microsoft.VisualBasic.FileIO.FileSystem.CreateDirectory
341デフォルトの名無しさん:2007/06/14(木) 22:39:56
つ[system("/cygwin/bin/mkdir -p /foo/bar/baz")
342デフォルトの名無しさん:2007/06/15(金) 05:28:01
MakeSureDirectoryPathExists
343デフォルトの名無しさん:2007/06/15(金) 15:22:59
すみません教えてください

ExecuteSQLでテーブルにInsertする際
データにダッシュ(―)が入っていた場合
実行後にテーブルを見てみると―が?に
変換されています。どうしたらよいのでしょうか?
344デフォルトの名無しさん:2007/06/15(金) 15:28:09
―って、SJISで815Cだけど、エンコードの指定は問題ない?
345デフォルトの名無しさん:2007/06/15(金) 15:35:20
回答ありがとうございます

プロジェクトの文字セットはUNICODEにしています
文字列もwchar_t型で扱っていますがそういう意味では
ないのでしょうか?
346デフォルトの名無しさん:2007/06/15(金) 15:53:38
えーと、ファイルから読んでるのかどこから読んでるのかによるし
問題がどっちにあるのか切り分けできない?
環境(と、バージョン)がわかればもうちょっと何とかなるかもよ
347デフォルトの名無しさん:2007/06/15(金) 16:41:22
申し訳ありません。
OS環境:WinXP SP2
開発環境:VS2005 MFC使用

DBはSQLServerで構築しました。
データはただ単にダイアログのエディットに
入力された文字をSQL文と連結しています
(どちらもCString型です)
348デフォルトの名無しさん:2007/06/15(金) 17:15:14
問題あるコードの一つみたいだな。
ttp://www.fiberbit.net/user/hobbit-t/html/utf8.html
ここに出てる文字を片っ端から試してみて
349デフォルトの名無しさん:2007/06/20(水) 18:07:59
アクセラレータ(ショートカット)をエクセルみたいな一覧表にしたいのだけど
ツールとかないかしらん?
350デフォルトの名無しさん:2007/06/20(水) 18:52:40
>>349
***.rcファイルをコピーして、拡張子をcsvに変え、必要なとこだけコピーペーストする。
とかではダメか?
351デフォルトの名無しさん:2007/06/21(木) 13:59:26
>>350
rcにあったのねん
サンンクス
352デフォルトの名無しさん:2007/06/21(木) 14:01:29
サンンクス
353デフォルトの名無しさん:2007/06/22(金) 03:11:00
質問です
現在、複数のプロジェクトでリソースファイルを共有しています。
リソースファイルに複数のバージョン情報リソースを定義し、実行している
EXEによって表示するバージョン情報を変えたいと思っているのですが、
どうやったら異なるバージョン情報リソースのデータを取得するかが分かりません。
EXEファイルからリソース情報を取得する方法はよく見かけるのですが
リソースファイルから取得する方法はなぜかありませんでした。
ご教授をお願い致します。
354デフォルトの名無しさん:2007/06/23(土) 00:16:36
質問です。
VC2005で作成されたプロジェクトファイルを
2003でも開けるように、変換してくれるような
ツールってありませんか?

355デフォルトの名無しさん:2007/06/23(土) 01:28:16
自分でスクリプトでも書けば?
事実上、バージョン番号書き換えるだけでしょ。
356デフォルトの名無しさん:2007/06/23(土) 12:04:11
メモ帳で十分だった気がする
357デフォルトの名無しさん:2007/06/24(日) 13:42:42
コンパイルしたら

------ ビルド開始: プロジェクト: saiki, 構成: Debug Win32 ------
コンパイルしています...
WinMain.cpp
.\WinMain.cpp(5) : fatal error C1083: include ファイルを開けません。'windows.h': No such file or directory
kooh2.cpp

というエラーが出たんだが、どうすれば解決できるの?
超初心者にもわかりやすい説明希望。
358デフォルトの名無しさん:2007/06/24(日) 14:02:06
WindwosSDKをダウソ・インスコして、INCLUDEとLIBを設定する。

これで判らないなら、VisualStudio2005 StandardEdition Upgradeを
買ってインスコしとけ。
359デフォルトの名無しさん:2007/06/24(日) 14:36:29
教えてください。
CTest クラスのInit()というメンバ関数を、複数のスレッドがコールします。
しかし、Init()関数の中には一度だけしか行ってはいけない処理があります。
(実装ライブラリの初期化処理)

どうすれば、実現できるのでしょうか?
360デフォルトの名無しさん:2007/06/24(日) 14:39:07
>>358
ダウンする以外の方法はないの?
うちのパソ、ダウンにかなりの時間かかるからそれだとできないのだが。
361デフォルトの名無しさん:2007/06/24(日) 14:41:58
じゃあStd版買えばいいじゃん。
362デフォルトの名無しさん:2007/06/24(日) 14:42:47
自分でwindows.h書けばいいと思うよ。

>ダウンする以外の方法はないの?
>VisualStudio2005 StandardEdition Upgradeを
買ってインスコしとけ。
363デフォルトの名無しさん:2007/06/24(日) 14:45:19
>>361
Stdがなんなのか知らないけど、それ以外の方法はないの?
364デフォルトの名無しさん:2007/06/24(日) 14:46:29
じゃあダウンすればいいじゃん。
365デフォルトの名無しさん:2007/06/24(日) 14:47:05
>>363
向いてないからプログラミングやめる
366デフォルトの名無しさん:2007/06/24(日) 14:47:14
ダウンも購入もしない方法はないの?
367デフォルトの名無しさん:2007/06/24(日) 14:47:53
WindowsSDKは郵送でも送ってくれるよ
http://www.qmedia.ca/launch/psdk.htm
368デフォルトの名無しさん:2007/06/24(日) 14:51:04
了解しました。もっと勉強して出直して参ります。
369デフォルトの名無しさん:2007/06/24(日) 16:00:22
>>359
そいつは実装の問題だな。

色々やり方あるけど
とりあえず CriticalSection あたりを利用してみれ
# 当然コレだけじゃ出来んぞ


まぁそもそも、全体的な構成が悪い気もするけど。
370デフォルトの名無しさん:2007/06/24(日) 16:18:38
>>369
ありがとうございました。調べてみます。
371デフォルトの名無しさん:2007/06/24(日) 22:48:53
ダウンにかなりの時間って、まさか今時アナログとかISDNとか言うんじゃないだろうな
ADSLなら余裕だろ
372ちんこ:2007/06/24(日) 22:58:23
ダイヤルアップでちゅ
373デフォルトの名無しさん:2007/06/24(日) 23:26:25
音響カプラーでふ。
374デフォルトの名無しさん:2007/06/24(日) 23:32:59
脳内電波でちゅ
375デフォルトの名無しさん:2007/06/25(月) 10:08:31
伝書鳩
376デフォルトの名無しさん:2007/06/25(月) 13:50:34
矢文
377デフォルトの名無しさん:2007/06/25(月) 14:58:11
>>355
それは本当か?
378デフォルトの名無しさん:2007/06/25(月) 21:44:01
助けてくれ〜。
当方初心者、Windows XP、Visual Studio 2005使用。
簡単なウィンドウアプリを書いて無事ビルドできたんだが、
いざ実行しようとしたら
「'C:\WINDOWS\system32\ほにゃらら.dll'を読み込みました。
シンボルが読み込まれていません」というメッセージがずらーってできた。
今まで同じようなアプリは普通に実行できたのに。
俺何もしてないはずなのになぜ、ひねくれるの?おしえておじいさん。
379デフォルトの名無しさん:2007/06/25(月) 21:45:31
気にするな。
380デフォルトの名無しさん:2007/06/25(月) 21:45:40
ググレカス。お前より年下の方が多そう
381デフォルトの名無しさん :2007/06/25(月) 21:55:04
help me お兄さん。
同じく初心者、WinXP VisualStudio2005使用。
フルスクリーンのウィンドウを表示してbmpを全画面に貼り付けようといじっててフルスクリーンのウィンドウは出るんですが、
全くいじらずデバッグ開始しているにも関わらず、bmpがキチンと画面全体に描画される場合と下に空白ができる場合があって悩んでます。
ちょっと曖昧過ぎて答えにくいかもしれませんがお願いします。
382デフォルトの名無しさん:2007/06/25(月) 22:46:00
main関数がないだけであたふたする僕
383デフォルトの名無しさん:2007/06/25(月) 22:51:31
>>377
違うの?
384デフォルトの名無しさん:2007/06/26(火) 01:27:54
>>381
もちろんWM_PAINTのタイミングで描画してるよな。
385デフォルトの名無しさん :2007/06/26(火) 01:42:35
>>384
してます・・。
386381:2007/06/26(火) 02:42:06
>>384
すみません、できているとは思うんですが自信がなくなってきたので質問・・。
それができていなかった場合>>381で書いたような不安定な不具合が起こるんでしょうか?
387デフォルトの名無しさん:2007/06/26(火) 02:42:21
>>381
ちょっと曖昧過ぎて答えにくいな。
388デフォルトの名無しさん:2007/06/26(火) 03:14:45
そんなに長いソースじゃないし
どこにでもあるようなものだろ?
全部上げるか問題部分だけ上げれば?
389デフォルトの名無しさん:2007/06/26(火) 09:40:32
下の空白ってなんだ?
タスクバー分?
390378:2007/06/26(火) 13:37:30
解決しました〜。Ctrl+F5ってすればいいんだな。
>>379
教えてくれてありがとう、おじいさん。
>>380
孫娘に「口笛はなぜ〜♪」って聞かれて「自分で調べろカス!」って、
おまいに人の心はないのか。・゚・(ノД`)・゚・。
391デフォルトの名無しさん:2007/06/26(火) 13:59:09
孫など出来るのは後何十年以上掛かる
孫娘でも知ってるような事を分からなくて孫娘に聞くって、
おまいはどんだけ〜。・゚・(ノД`)・゚・。
392デフォルトの名無しさん:2007/06/26(火) 15:43:02
マルチスレッドでclock関数を使っても大丈夫しょうか?
393デフォルトの名無しさん:2007/06/26(火) 17:12:50
ちょっとスレ違いかもしれませんが
Visualstudio6.0を入れてるPCに2005Expressを入れてしまったのでアンインストしようと思うんですが
普通に2005をアンインストしても6.0の動作に問題はありませんか?
394デフォルトの名無しさん:2007/06/26(火) 18:14:55
うん
395381:2007/06/26(火) 19:25:52
帰宅しました。
空白はタスクバー分の空白だと思います。
396381:2007/06/26(火) 21:23:35
長々とすみません、再描画処理を入れたらなんとか全画面化できました。
何故再描画入れないとタスクバー分空白ができるのか結局分からず仕舞いでしたがありがとうございました。
397デフォルトの名無しさん:2007/06/27(水) 06:55:41
そんなこったろうと思ったよ
398デフォルトの名無しさん:2007/06/27(水) 16:41:40
空白ができるときとできないときで、描画範囲の数字が違ってると思うんだけど
GetClientRectあたりで取ってきてんのかな
399sage:2007/06/27(水) 23:38:35
VC++6で作ったプロセスをWindowsのクラスタサービスの
汎用アプリケーションリソースにしています。
最近Windows2000からWindows2003にOSをアップグレードしたところ、
プロセスのオフライン時にデバッガが起動して、
オフラインに失敗する事象が頻発するようになってしまいました。
デバッガを見てもアセンブリが読めないため、難儀しております。
このような場合、考えられる問題は何がありますでしょうか。
400デフォルトの名無しさん:2007/06/27(水) 23:41:29
>考えられる問題は何がありますでしょうか。
名前欄にsageと書くバカらしさ
401デフォルトの名無しさん:2007/06/28(木) 00:46:16
ソースとpdbもちこんでは
402デフォルトの名無しさん:2007/06/28(木) 02:09:28
プログラム経験ない管理部門ですが、突然C++使えるようになれと命令
されたんですが、独学で可能ですか?いろいろ調べるとC言語が理解して
いないと無理なように思えたんですが。
403デフォルトの名無しさん:2007/06/28(木) 04:30:21
>>402
独学も可能だしC言語の知識がなくてもわかると思うけど…
でもやっといてもいいんじゃないかな?
404デフォルトの名無しさん:2007/06/28(木) 08:09:23
>>402
基本的にCからやったほうがいいと思いますが
センスがあればC++でも問題ないと・・・
しかし初心者にはC++は難しい
自分は入りやすいように
DXライブラリというサイト利用してゲームを作っています。
グーグル検索してみて〜
後は本を買ったりして基本と必要なことだけを覚えていくこと
405デフォルトの名無しさん:2007/06/28(木) 09:00:39
>>402
よし、替え玉2号の俺に任せろ!
406デフォルトの名無しさん:2007/06/28(木) 13:14:59
どこまでやるかによるけど…
プログラム経験ないんだろ?
変数とは何か、配列とは何か、演算子とは何かからはじめるわけだ。

使えるようになれと命令されたってことは猶予はせいぜい1ヶ月くらいか?
もう無理と断言していいんじゃまいか。
407デフォルトの名無しさん:2007/06/28(木) 13:39:02
そうでもない
408デフォルトの名無しさん:2007/06/28(木) 13:39:03
もう不要と断言されたようなもの?402カワイソスw
409デフォルトの名無しさん:2007/06/28(木) 14:06:25
>>402
上司に俺を紹介すればいいと思うよ
410デフォルトの名無しさん:2007/06/28(木) 18:43:32
>>402
別にたいしたことやるわけでもないなら余裕だろ
ポインタやらビット制御やらまでくると理解が難しいだろうが
411デフォルトの名無しさん:2007/06/28(木) 20:36:10
復習をしようと思ってとても簡単そうな
#include "stdafx.h"
#include <stdio.h>
void main()
{
int a,b,wk;
scanf("%d,%d",&a,&b);
wk=a;
a=b;
b=wk;
printf("a=%d b=%d\n",a,b);
}
を試してみたのですがaとbを入れ替えるプログラムがうまく動きません。
写し間違いはないと思うのでが何が原因なんでしょうか
412デフォルトの名無しさん:2007/06/28(木) 21:14:57
ここVCスレなんだしデバッガ使って自分で調べりゃいいだろ
413デフォルトの名無しさん:2007/06/28(木) 21:30:28
入力でミスってるに1票。
414デフォルトの名無しさん:2007/06/28(木) 21:40:34
C初心者スレへ行った方がいいと思うよ
415デフォルトの名無しさん:2007/06/30(土) 12:47:13
BSTR型ってサイズの制限とか無いですよね?
Base64でエンコードされたファイルをBSTR型文字列で受け取ることになっているんですが、
メモリの許す限り何MBでも入りますよね?
416デフォルトの名無しさん:2007/06/30(土) 16:34:38
有ります。
417デフォルトの名無しさん:2007/06/30(土) 16:40:51
A four-byte integer
理論上は終了文字含まないで4GBだな。
バイナリ換算だと1GBか。
418417:2007/06/30(土) 16:43:53
Win32だとUTF-16だから、文字数はその半分、
バイナリ換算すると512MBだった…… orz
419デフォルトの名無しさん:2007/06/30(土) 17:21:59
何で限界バイト数が減るのか理解できん。

#Win32ではまず連続1GBもメモリは確保できないけど。
420417:2007/06/30(土) 21:03:50
Base64の一文字当たりの情報量は6ビットだから、バイナリ変換すると3/4、
4GBytes => UTF-16:2G => 1.5GBytes だろ、常識的に考えて。

ごめん、今日はボケてるみたいだ orz
421デフォルトの名無しさん:2007/06/30(土) 21:07:37
いつもじゃね?
422デフォルトの名無しさん:2007/06/30(土) 22:45:44
>>415
>>417-420が4バイトといっているのは、
BSTRの先頭の文字列の長さを格納する部分の大きさを根拠にしている。
Win64でもこの大きさは変わっていない。

あと、言ったところでどうにもできないとは思うけど、
BSTR自体は直接バイナリデータを扱えるようにもなっている。
423デフォルトの名無しさん:2007/07/01(日) 00:04:06
残念ながら、BSTRは例え64bitWindowsでも2^32-1バイトをサポートしていない。
最大は2^29バイトとなるように実装されている。

BSTRは別段UNICODE
(これはM$が勝手に決めたUNICODEであって、本来はいわゆるUTF-16に準拠したもの)を
格納するためではない。その気になればEUCだって代入できる。
現に>>422も単なるバイナリデータとして扱えると言っている。

ところが、少なくともVB6のCComBSTRのメンバ関数は、2バイト文字を扱うように実装されおり、
かつ、null-terminal文字列として扱っている。
BSTRはどんな文字セットでも扱えるとM$は称しているが、実際のところ安全なプログラムを組むには
UTF-16以外は代入しない方がいいと考えていい。

そして、文字列のバイト数は2^29-2であって、文字列は2^28-1文字(最後は`\0')しか代入できない。

ちなみに、Windows95系と互換性を持たせたかったら、4095バイトを限界にした方がいい。
うろ覚えだが、確かメガバイト単位までは実装されてなかったはず。
424デフォルトの名無しさん:2007/07/01(日) 00:08:59
>VB6のCComBSTR
>null-terminal文字列
ここは突っ込むところなのだろうか。
425423:2007/07/01(日) 00:16:16
>>424
よく突っ込んでくれた!といいたいところだが、単なるミスです。
当方チューハイ4杯入ってますので。
426デフォルトの名無しさん:2007/07/01(日) 00:26:40
SysAllocStringの
> zero-terminated string to copy. The sz parameter must be a Unicode string
>in 32-bit applications, and an ANSI string in 16-bit applications.
についてはどう考える?
まあ、インターフェースと内部実装でコードが違ってる場合もあろうけど。
427デフォルトの名無しさん:2007/07/01(日) 00:52:36
>>426
非ヌル終端の文字列でBSTRを初期化したければSysAllocStringLen。
バイナリデータでBSTRを初期化したければSysAllocStringByteLen。
428デフォルトの名無しさん:2007/07/01(日) 00:56:28
>The sz parameter must be a Unicode string
こっちのほうだけど。
429デフォルトの名無しさん:2007/07/01(日) 11:06:09
ありがとうございます。
まとめると、データがBase64文字列の最大100MB程度で
OSがWinNT系なら、何も考えずにBSTRに格納できるということでしょうか。
ただ、格納されるBase64文字列はUTF-8かSJISのどちらか(未確認)です。
Base64文字列データを返値として提供してくれる関数の返値の型がBSTRになっているのですが、
そのまま格納してはまずいのでしょうか…。
CStringに入れれば大丈夫だったり?


上の関数はライブラリで提供されてるので中身の実装は分からないのですが、中で
返値をBSTRに格納してるのなら一緒じゃないかと思ったり
430デフォルトの名無しさん:2007/07/01(日) 11:28:49
>>429
それくらいだったら平気だろう。
431デフォルトの名無しさん:2007/07/01(日) 14:12:29
VC++2005ってC99コンパイルできますか?
432デフォルトの名無しさん:2007/07/01(日) 14:20:09
いいえ。
433デフォルトの名無しさん:2007/07/01(日) 23:41:20
VisualStudio2005でC++のライブラリの追加がうまくいきません
ツール>オプション>プロジェクト及びソリューション>VC++ディレクトリ でインクルードファイルとライブラリファイルのところに
追加してるんですがうまくいかない場合は他にどこに気をつけるべき?
434デフォルトの名無しさん:2007/07/01(日) 23:45:49
プロジェクトに追加しろよ
435デフォルトの名無しさん:2007/07/02(月) 00:04:06
>>434
しょっちゅう使うつもりなんでできるだけ環境に入れときたいんですが……
436デフォルトの名無しさん:2007/07/02(月) 00:22:21
ライブラリをインクルードファイルに追加する分際で何言ってんの?
だからプロジェクトに追加しないとリンクされねぇっつーの。
プロジェクトなりソースでファイルをリンクするように設定しろや
環境にPATHを入れるのは自由だ
437デフォルトの名無しさん:2007/07/02(月) 00:53:23
visual C++ 2005 をインストールしようとしているのですが、
登録しなければインストールできないのですか?

http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
438デフォルトの名無しさん:2007/07/02(月) 00:56:45
ううん
439デフォルトの名無しさん:2007/07/02(月) 08:56:42
>>434,>>436
なんだい、えらそうに。このタコが。
440デフォルトの名無しさん:2007/07/02(月) 09:15:15
うまくいかないで考えが終わってるから
うまくいかないんだろう
猿の方が賢いかも
441デフォルトの名無しさん:2007/07/02(月) 10:26:55
VC++なら、提供するincludeファイルに、#prafma comment(lib, "xxx.lib")
をつけときゃ、あとはディレクトリの指定だけしときゃいい
442デフォルトの名無しさん:2007/07/02(月) 19:12:19
自作のクラスやメソッドをインテリジェンスで表示させるときに
コメントも一緒に表示できるようにならないかねぇ・・・
俺が知らないだけかもしれないけど・・・
443デフォルトの名無しさん:2007/07/02(月) 20:26:37
New C++ Language Features - XML Documentation
に何か書いてあるっぽい。C#のXMLドキュメントコメントと似たようなものか?
でも、読むの('A`)マンドクセ
444デフォルトの名無しさん:2007/07/02(月) 23:10:07
>>441
いや、どうせなら

#prazma

ディレクティブの方が多少面白かったのに。
445デフォルトの名無しさん:2007/07/02(月) 23:45:21
タブブラウザを作りたくて、手始めにタブ表示を実装しようと

ttp://www.kumei.ne.jp/c_lang/sdk3/sdk_206.htm

を参考に作ってみたのですが、

ttp://www.dsnw.ne.jp/~yasushi/donutr.jpg

のページ切り替え用タブのような、タブ同士の間にセパレータが
入った格好良いタブ表示にするにはどうしたらよいのでしょうか?
446デフォルトの名無しさん:2007/07/03(火) 00:02:42
タブに普通にあるスタイルに見えるけど
447デフォルトの名無しさん:2007/07/03(火) 00:13:30
>>445
http://www.kumei.ne.jp/c_lang/sdk3/sdk_206.htm
の先頭に

> さらにこのプログラムではタブコントロールから TCS_EX_FLATSEPARATORSスタイルを取り除いて
> タブとタブの境界線を描画しないようにしています。

と書いてあるけどこれとはまた別のこと?
448デフォルトの名無しさん:2007/07/03(火) 00:31:40
>>446-447
dwStyle &= ~TCS_EX_FLATSEPARATORS;

の行をコメントアウトしたらできました。

大変下らない質問でスレを汚してしまい、
申し訳ありませんでした。

ありがとうございました。
449デフォルトの名無しさん:2007/07/03(火) 03:44:25
ちょっと待て。それかっこいいのか?
450デフォルトの名無しさん:2007/07/03(火) 07:26:00
>>449
まあまあ、主観の話なんだからケチ付けない。
451デフォルトの名無しさん:2007/07/03(火) 15:43:22
>>449 ワロタw
452デフォルトの名無しさん:2007/07/03(火) 16:11:09
>>449
ふかわっぽい笑いを感じた2007年夏
453デフォルトの名無しさん:2007/07/04(水) 19:41:46
マルチスレッドなのでlocaltime_r()というものを使いたいのですが
#include <time.h> をしてもlocaltime_r() が使えません
何故だか教えてくださいVS2002ですよろしくお願いします
454デフォルトの名無しさん:2007/07/04(水) 19:56:29
VSはTLS使うので、マルチスレッド版でコンパイルすれば、
スレッド間で干渉はない。よって、localtimeつかってればいい。
455デフォルトの名無しさん:2007/07/04(水) 20:02:19
マルチスレッド版でコンパイルというのは
普通にコンパイルするのと同じでいいのでしょうか?
456デフォルトの名無しさん:2007/07/04(水) 20:32:39
プロジェクトのプロパティで
C/C++→コード生成→ランタイムライブラリ→マルチスレッド〜を選択しろ
DLLかスタティックか、デバグ用かリリース用かで計4種類ある

Makefile手書きかcl.exeを直接実行してる場合は、
clに-MT -MD -MTd -MDdのいずれかのオプションを指定しろ

つうか、これぐらいぐぐるかヘルプ嫁
457デフォルトの名無しさん:2007/07/04(水) 20:43:00
すいませんプロジェクトのプロパティがわかりません
メニューのプロジェクトのところをみているのですが存在しませんorz
458デフォルトの名無しさん:2007/07/04(水) 20:58:57
存在しない理由がわかりました
私はMFCプロジェクトでプログラムを作成しています
その場合どうすればいいのでしょうか?
459デフォルトの名無しさん:2007/07/04(水) 21:08:32
(´・ω・`) 君にVisualC++は向いていないんじゃないかな。
460デフォルトの名無しさん:2007/07/04(水) 21:11:14
むいてなくてもいいですが
存在しないものは存在しないので普通混乱するでしょう?
461デフォルトの名無しさん:2007/07/04(水) 21:42:35
(´-ω-`) ……'プロジェクト プロパティページ'でヘルプを検索してみなさい
462デフォルトの名無しさん:2007/07/04(水) 22:00:54
あちこちで右クリックしまくってみ
463デフォルトの名無しさん:2007/07/04(水) 22:59:50
ぐぐればヒントが見つかるかも
もしかしたら出ないしくみかもしれないし・・・
464デフォルトの名無しさん:2007/07/04(水) 23:44:02
検索ダイアログ操作しようとして
Viewクラスにメッセージ定義してコールバック関数追加したんですけど
メッセージがViewに飛んできません。

//View cppに
static UINT WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);

BEGIN_MESSAGE_MAP(C**View, CFormView)
 ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)
END_MESSAGE_MAP()

LONG C**View::::OnFindReplace(WPARAM wParam, LPARAM lParam)
{
 return 1L
}

//Vew hに
afx_msg LONG OnFindReplace(WPARAM wParam, LPARAM lParam);

ダイアログ自体の表示もうできてるんですが、なんでメッセージこないんですか?
465デフォルトの名無しさん:2007/07/05(木) 07:46:34
おーいエスパー
466デフォルトの名無しさん:2007/07/05(木) 09:42:24
なんだよ、、、寝てたのに・・・
467デフォルトの名無しさん:2007/07/05(木) 22:32:12
doxygen(Ver1.5.2)とHTML Help Workshopを使って、Windowsヘルプを
作成しているのですが、索引がどうしても文字化けしてしまいます。
INPUT_ENCODING = Shift-JIS
DOXYFILE_ENCODING =UTF-8
と設定し、ページに関しては文字化けは解消されたのですが…
何か解決策があれば教えてください。
468デフォルトの名無しさん:2007/07/05(木) 23:25:27
VCとdoxygenに何の関係が?
469デフォルトの名無しさん:2007/07/05(木) 23:32:48
すんまそ。いまいちどこで聞けばいいか分からず一番最初に
目に入ったここで聞いてしまった;
別んとこで聞きます。
470デフォルトの名無しさん:2007/07/06(金) 00:35:51
VC++2005を使ってます。
int型の値をテキストボックスに表示したいのですが、
int→System::Stringに変換できず困っています。
int→std::stringやSystem::String→intはぐぐると出てくるのですが、
int→System::Stringが出ません。
int型の値をいったんchar型の配列に入れなおして、Stringに変換しようと
しても、やはりコンパイルエラーになってしまいます。

どのようにするべきでしょうか?
471デフォルトの名無しさん:2007/07/06(金) 00:54:43
int i = 42;
System::String^ s = i.ToString();
472470:2007/07/06(金) 00:58:52
ありがとうございます。
ToString()を使えば一発なんですね。
473デフォルトの名無しさん:2007/07/06(金) 03:27:57
このスレの勢いがほとんどなくなったのは
もうみんなMFC使ってないんですか?
474464:2007/07/06(金) 09:09:54
みんな検索置換ダイアログボックス使ったことないのかなあ。
ぜんぜんVC使いこなせてないんですねえ。
質問した私が馬鹿でした。
475デフォルトの名無しさん:2007/07/06(金) 09:15:01
馬鹿はお前
476デフォルトの名無しさん:2007/07/06(金) 09:21:09
>>474
そうそう、お前のがレベルが上なんだからこんなスレにはもう用無いだろ?
2度と来なくていいよw
477デフォルトの名無しさん:2007/07/06(金) 10:05:45
手元の本みたら検索置換ダイアログはたいていのやつに載ってるな
ざっと 見て4冊ぐらいにあった
478464:2007/07/06(金) 10:15:39
で?
479デフォルトの名無しさん:2007/07/06(金) 10:25:52
本買えばいいよ
480デフォルトの名無しさん:2007/07/06(金) 10:28:17
うちらに検証しろと
481デフォルトの名無しさん:2007/07/06(金) 15:37:42
VC++6.0でActiveX DLLを作る方法はどこで勉強すればよいでしょうか?
482デフォルトの名無しさん:2007/07/06(金) 16:40:54
ウイザードでできないの?
483デフォルトの名無しさん:2007/07/06(金) 16:51:03
>>482
すみません。できました。
484デフォルトの名無しさん:2007/07/06(金) 23:56:03
Visual C++で文字コードの変更ってどこからできますか?
いちいちLつけるのめんどくさい(´・ω・`)
485デフォルトの名無しさん:2007/07/07(土) 00:33:22
Visual C++に484が言うような機能はないし、
あったとしてもソースコードの文字コードと実行ファイルの文字コードは関係ないので、
ワイド文字・文字列にLを付けなければいけないことに変わりは無いぞ。
486デフォルトの名無しさん:2007/07/07(土) 11:34:29
プロジェクトのプロパティ→全般→文字セット
unicodeからマルチバイトに。
487464:2007/07/07(土) 11:50:40
だからさ、こんなスレに質問しないで本買いなね。
そこに全部答えが載ってるってさ。
488デフォルトの名無しさん:2007/07/07(土) 11:56:01
>>486
TCHARではなくWCHAR固定なら意味無いだろ。
489デフォルトの名無しさん:2007/07/07(土) 12:15:55
質問のレベルからすると、単に、
VC6から移行したら、文字列全部にLを付けなくちゃいけなくなった。なんとかならない?
ってことでは。そういう人向けには、>>486でOK。
490デフォルトの名無しさん:2007/07/07(土) 12:18:08
なら文字列はコードに埋め込むんじゃなくてリソースで管理するようにすればいい☆
491デフォルトの名無しさん:2007/07/07(土) 14:45:37
冷たくあしらわれたにも関わらず、必至にこのスレを覗きにくる464に萌えたw

m9(^Д^)
492デフォルトの名無しさん:2007/07/07(土) 16:49:06
質問が意味不明なら、まともな答えがもらえるわけないだろ
迷子センターじゃないんだし、泣いてたら誰かが面倒みてくれると思ってんの?
493デフォルトの名無しさん:2007/07/07(土) 23:18:24
VC6でboostって使えないんですか?
vector<string> v;
string message = "This is a pen";
boost::algorithm::split( v, message, is_space() );
こんなテストコードをコンパイルすると
error C2265: '<Unknown>' : サイズが 0 の配列への参照は不正です。
コンパイルされたクラスのテンプレートのインスタンス化 'boost::algorithm::size_descriptor<I>' の参照を確認してください
fatal error C1506: ブロックが大きすぎて、コンパイルできません。
こんな調子なのですが
494デフォルトの名無しさん:2007/07/07(土) 23:21:21
VC6なら仕方が無い。
試しにVC++ 2005 Expressでも入れてみ。
495デフォルトの名無しさん:2007/07/07(土) 23:25:31
>>494
やっぱりそうでしたか、古すぎるんだな
496デフォルトの名無しさん:2007/07/08(日) 10:59:32
VC++6にできてVC++2005 Expressにできない事ってなんでしょう
497デフォルトの名無しさん:2007/07/08(日) 11:17:05
>496は無視でいいよ
498464:2007/07/08(日) 11:52:09
>>496
本を読めばいいと思います
499デフォルトの名無しさん:2007/07/08(日) 12:00:11
古い文法を使ったプログラムをコンパイルする事
500デフォルトの名無しさん:2007/07/08(日) 12:56:25
>496
ある程度自分で調べて違いをまとめてから質問してくれる?
501デフォルトの名無しさん:2007/07/08(日) 13:02:38
調べもしないで質問するやつは死んでいいよ
502デフォルトの名無しさん:2007/07/08(日) 14:52:11
ここは冷たいスレでつね
503デフォルトの名無しさん:2007/07/08(日) 14:55:17
怠け者の相手はしてられん
504デフォルトの名無しさん:2007/07/08(日) 15:27:46
CRTとして、MSVCRT.dllをリンクすること。
505デフォルトの名無しさん:2007/07/09(月) 08:42:42
case WM_MOUSEMOVE:
GetCursorPos(&mp);

if (mp.y>200) { //mpはPOINT
SetWindowPos(hWnd,0,0,0,40,80,0);
}

(VC++6.0 SDK)
上記のような書き方でマウスカーソルのY座標が
200を超えたらウィンドウのサイズを変えるようにしたいんだけど
(ウィンドウのサイズは50,50 位置は 0,0)
どうもこの書き方だと出来んのです。

どこをければいいんでしょう?
506デフォルトの名無しさん:2007/07/09(月) 08:48:49
ウィンドウのサイズを50,50 じゃなくて200以上にしてやってみ
507505:2007/07/09(月) 08:58:13
>>506
説明不足ですいません。
本当は「普段はデスクトップ左上で小さく待機し
マウスカーソルが当てられるとウィンドウが大きくなり
マウスカーソルがウィンドウから出ると元の大きさに戻るランチャー」を作りたくて
実験してました。

どうやら、WM_MOUSEMOVEだとウィンドウの外に出た時
効かないようです。

マウスカーソルがウィンドウ外にあっても
動いたのを感知できるメッセージってありますか?
508デフォルトの名無しさん:2007/07/09(月) 09:17:30
だから
ウインドウの外にメッセージ来ないのが原因だって
わかってないみたいだから
200以上にしてやってみろと言ったの
509デフォルトの名無しさん:2007/07/09(月) 09:52:51
>>507
SetCapture()を使う
離れたのが知りたいだけなら↓の手段もある。
http://support.microsoft.com/kb/183107/ja
510509:2007/07/09(月) 10:17:27
511デフォルトの名無しさん:2007/07/09(月) 19:42:37
マウスキャプチャは、ボタンを押している間しか効かないような・・・
512デフォルトの名無しさん:2007/07/09(月) 23:31:25
動的引数関数を#defineでラップする方法を教えてください。

#define ABC( prm00, prm01, ... ) \
func( prm00, prm01, ...);\

void func( int prm00, int prm01, ... )
{
}
エラーになってしまいます・・・
513デフォルトの名無しさん:2007/07/09(月) 23:56:18
#define ABC func

でいいんでね?
514デフォルトの名無しさん:2007/07/10(火) 01:43:42
>>512
typedef使えヴォケ
515デフォルトの名無しさん:2007/07/10(火) 02:09:42
typedef???
516デフォルトの名無しさん:2007/07/10(火) 02:11:07
#define ABC func

ABC(prm01, prm02, prm03, prm04);

#define ABC(params) func params

ABC((prm01, prm02, prm03, prm04));

好きな方を
517デフォルトの名無しさん:2007/07/10(火) 09:48:06
>>511
ボタンを押してるときに使う例がほとんどなのであって、押してる間しか効かないわけではない。
他のウィンドウをクリックすると解除されるけどね。
518デフォルトの名無しさん:2007/07/10(火) 12:56:30
C++ってもう過去の言語なんだろ?
519デフォルトの名無しさん:2007/07/10(火) 13:54:33
Yes, I did.
520デフォルトの名無しさん:2007/07/10(火) 14:12:56
>>518
C# がおすすめ だからもう来ないで。
521デフォルトの名無しさん:2007/07/10(火) 19:06:04
まぁ、さまざまな言語が使われているが、現在世の中で書かれてるプログラムで
圧倒的多数派はCとC++だよね。
過去の言語っていえば、過去の言語だけど。
生まれてちょっとだけチヤホヤされ、誰も話題にしなくなった言語は、C生存中に
いくつあるだろう。
現在の言語で20年後にも話題にされるような言語はあるのだろうか。
522デフォルトの名無しさん:2007/07/10(火) 19:38:14
英語
523デフォルトの名無しさん:2007/07/10(火) 19:42:57
COBOL とか話題にはなってるな。
糞言語だって。
524デフォルトの名無しさん:2007/07/10(火) 19:46:17
COBOLしか選択肢が無い時代だってあったんだよ
それでも、オンライン端末でWWWの元祖みたいな画面(CICSとか)で
DBとはSQLでデータやりとりしてたんだぜ。
525デフォルトの名無しさん:2007/07/10(火) 19:54:16
それを言ったらマシン語直打ちしか選択肢が(ry
526464:2007/07/11(水) 06:42:21
ちょーいっぱいなデータをリストコントロールに表示させなくちゃなんないから
http://www5b.biglobe.ne.jp/~kouta_y/c/c07.html
このページで仮想リストコントロールを寝ずに勉強しました。すごく分かり易いサンプルで助かりました。
でもリストビューのソートは自前でデータをソートさせなくちゃならないので、
このサンプル通り再起関数使ったクイックソートでやったら、
ちょーパソが固まってスタックオーバーフローになっちゃいました。
ちょーいっぱいなデータを扱うために仮想リストにするのに、ちょーいっぱいなデータを仮想関数使ったクイックソートを使うとスタックオーバーフローになるのは当たり前なのにさっき気付きました。
いったいどういうつもりであんなサンプル作ったんですか?
ちなみにシェルソートも寝ずに勉強して何とかなりました。
527464:2007/07/11(水) 06:45:09
>ちょーいっぱいなデータを仮想関数使ったクイックソート←ばつ
間違えました
>ちょーいっぱいなデータを再起関数使ったクイックソート←○

528デフォルトの名無しさん:2007/07/11(水) 07:09:33
CRTのqsort_s使え
529デフォルトの名無しさん:2007/07/11(水) 08:24:56
サンプルはあくまでサンプルだし
丸ごとパクって使う馬鹿はいない
530デフォルトの名無しさん:2007/07/11(水) 19:06:26
プログラムの楽しさに付いて教えてくれないか
何か作るか思って絵を描く、動かす為にドットパターンを作る、シナリオ考える
ここまでは誰でも行けると思うが
いざ、形にしようと行動するとプログラム出来ないし止めたになる
これを回避するには楽しさを語って貰うのが一番だと思うんだ
531デフォルトの名無しさん:2007/07/11(水) 19:36:09
>526
あんまりデータ多い時は実データをソートするのは無駄
仮想リストなんだから要求されてもないデータを並べ替える必要ない
532デフォルトの名無しさん:2007/07/11(水) 20:42:20
リストビューのソートがクイックソートではない、という情報自体怪しい気がする。

昔、ソート速度が遅いのを修正した時は、
比較毎にリストビューにアイテムの文字列を問い合わせていたのが原因だった。

その時は、予めLVITEM.lParamを一意の値&ソート直前に必要な項目を全取得してlParamと対応付け、
として問い合わせを無くすだけでかなり改善した。
533デフォルトの名無しさん:2007/07/12(木) 06:46:49
CHoge *hoge = new CHoge();
ではコンストラクタが呼ばれるのですが
CHoge hoge;
の場合はコンストラクタは呼ばれますか?
534デフォルトの名無しさん:2007/07/12(木) 06:57:29
呼ばれません
535デフォルトの名無しさん:2007/07/12(木) 07:02:00
ま、マジっすか?
536デフォルトの名無しさん:2007/07/12(木) 08:44:51
寿司食いたい
537デフォルトの名無しさん:2007/07/12(木) 09:23:20
なんで自分で試してみないんだろ
538デフォルトの名無しさん:2007/07/12(木) 23:44:25
>>534
なにをいい加減なことを言っているのですか?
オブジェクトがメモリ上にインスタンスを作った時点でコンストラクタが呼ばれるでしょう
539デフォルトの名無しさん:2007/07/12(木) 23:54:56
インスタンスどこで作ってる?
540デフォルトの名無しさん:2007/07/13(金) 00:03:47
>>534
ワロタ
541デフォルトの名無しさん:2007/07/13(金) 00:43:45
#include <iostream>

class A {
public:
  A() { std::cout << "呼ばれたじゃないか、嘘つくなよボケが" << std::endl; }
};

int main() {
  A a;
}
542デフォルトの名無しさん:2007/07/13(金) 01:01:13
>>536
ガリでも食ってろ
543デフォルトの名無しさん:2007/07/13(金) 01:31:16
#include <iostream> って懐かしいお
544デフォルトの名無しさん:2007/07/13(金) 07:05:54
クラス定義中のメンバオブジェクトの宣言時には呼ばれないがそれと勘違いしたんだろうか。
545デフォルトの名無しさん:2007/07/13(金) 22:18:16
>>544
定義と宣言の使い方が微妙でよくわからん
546デフォルトの名無しさん:2007/07/14(土) 00:06:49
// クラス定義
class CFuga
{
public:
CFuga(){printf("CFugaクラスコンストラクタ\n");}
};
// クラス定義
class CHoge
{
public:
CHoge(){printf("CHogeクラスコンストラクタ\n");}
CFuga m_fuga; // メンバオブジェクト宣言。まだCFugaのコンストラクタは呼ばれない。
void func();
};
// メイン関数
int main(void)
{
printf("main内でCHogeオブジェクトの宣言\n");
CHoge hoge; // ここで初めてコンストラクタが呼ばれる。CFuga→CHogeの順。
printf("main内でCHogeメンバ関数呼び出し\n");
hoge.func();
}
// CHogeメンバ関数実装
void CHoge::func()
{
printf("CHogeメンバ関数内でCFugaオブジェクトの宣言\n");
CFuga fuga; // この関数が呼ばれるとここでもCFugaコンストラクタが呼ばれる。
}
547デフォルトの名無しさん:2007/07/14(土) 01:47:29
構文上・意味上の話をすると、
546がクラス定義と言っているものは宣言だし、
main内でのCHoge hoge;は、自動変数の定義と言える(定義は宣言を兼ねるが)。
そしてfuncの実装はメンバ関数の定義。
548デフォルトの名無しさん:2007/07/14(土) 10:26:56
> 546がクラス定義と言っているものは宣言だし

// クラス宣言
class A;

// クラス定義
class A
{
 int n;
};
549デフォルトの名無しさん:2007/07/14(土) 21:19:48
役に立たん連中だな
550デフォルトの名無しさん:2007/07/14(土) 21:27:23
C++初心者向きの話題だからどうでもいい
551464:2007/07/14(土) 22:02:41
>>549
そりゃもう><
552デフォルトの名無しさん:2007/07/15(日) 01:02:18
VC++2005 EEを使用しています
これまで正常に動いていた同じフォルダ内の
ソースファイルとヘッダファイルを
をsrcとincludeのフォルダに分けてました(整理のため)
ビルドの結果
fatal error C1083: include ファイルを開けません。'xxx.h': No such file or directory
というメッセージがでます
メニュー>ツール>オプション>プロジェクトおよびソリューション>VC++ディレクトリ
で前もって登録すればいいのかと思ったのですが
どのようにすればいいのかわかりません。どなたかアドバイスを願います
553デフォルトの名無しさん:2007/07/15(日) 01:13:55
>>552
構成プロパティ - C/C++ - 全般 - 追加のインクルードディレクトリ
に設定するのが無難かな。
554デフォルトの名無しさん:2007/07/15(日) 01:22:21
>>553
速レス有難うございましたm(_ _)m
試してみます
555デフォルトの名無しさん:2007/07/15(日) 07:23:19
すいません、学校のC言語の課題で
「入力した値を大きなものから順に表示するプログラムを作れ」
と言う課題があり、ここまでは作ってみたのですが、「★」の部分で
どうしても下記のエラーメッセージが出てしまいます。
しかしどういう意味なのかが全く分かりません。
どなたか助言をお願いします・・・。
動作環境はVisual C++ 2003です。

#include<stdio.h>

int input(float data[], int n)//数値を入力し、なお且つ数値の個数を求める関数
{
int i;
for(i=0;i<n;i++)
{
printf("実数値を一つ入力してください: "); scanf("%f",&data[i]);
if(data[i]==0)
break;
}
return(i);
}

void swap(float *a,float *b)//引数としてアドレスを与えられた二つの変数の値を入れ替える関数
{
float c;
c=*a; *a=*b; *b=c;
return;
}

556デフォルトの名無しさん:2007/07/15(日) 07:27:05
続きです・・・。

float maxp(float *data,int n)//最大値が入っているアドレスを返す関数
{
int i=0; float s=0;
while(i<n)
{
if(s<=*(data+i))
{s=*(data+i);}
i++;
}
return(s);//★error C2440: '=' : 'float' から 'float *' に変換できません。
}

void sort(float *data,int n)//data配列内の数値を大きな値から順番に並べなおす関数
{
int i=0; float *x;
while(i!=n)
{ x=maxp(data+i,n-i);   swap(x,data+i);   i++; }
return;
}

main()
{
float x[100]; int i,j=0;
i=input(x,100);   sort(x,i);
while(j<i)
{ printf("%f\n",x[j]);  j++; }
}
557デフォルトの名無しさん:2007/07/15(日) 08:01:18
宿題スレへ
558556:2007/07/15(日) 13:47:45
>>557
わかりました(´・ω・`)b
559デフォルトの名無しさん:2007/07/17(火) 00:35:52
「初心者にVisual C++を教えるスレ」なんだから、答えてやれよ
560デフォルトの名無しさん:2007/07/17(火) 00:42:03
>>555
実際にエラーになったのは、
★印の行じゃないのだろ?
maxp()の戻り値を使う所じゃね?
561464:2007/07/17(火) 01:40:47
初心者が答えるところでもありますん><
562デフォルトの名無しさん:2007/07/17(火) 03:12:02
>>556
関数maxp()はfloatを返すんだから、

*x=maxp(data+i,n-i);

にしないとマズイのでは?
563デフォルトの名無しさん:2007/07/17(火) 04:15:47
こんにちは。VC++で以下のコードを実行すると、ファイルを見つけられないと、エラーになるのですが、
ファイルはコードのあるディレクトリのどこにおけばいいのでしょうか。
いろいろ試したのですが該当なしでした。。。
よろしくお願いします。

int input_statement_from_file(char *one_statement, int *statement_length)
{
FILE *fp;
char filename[64],
input_one_statement_buff[65536];
int state = 0,
length = 0;

gets_s(filename);

if ((fp = fopen(filename, "r")) == NULL){
printf("ERROR: could not open file. \n");
state = 1;
goto exit;
}
/* Get data till ";" detection */
while(fgets(input_one_statement_buff, 65536, fp) != ";")
{
length++;
state = 0;
}
fclose(fp);
exit:
return state;
}
564デフォルトの名無しさん:2007/07/17(火) 04:48:37
つGetCurrentDirectory

親プロセス次第で子プロセスのデフォルトカレントディレクトリが変化するので、
相対パスを使うときは注意しる。
565デフォルトの名無しさん:563:2007/07/17(火) 05:18:05
>>654
紹介ありがとう。
でも、”++”初めてなので、
Public Declare Function GetCurrentDirectory Lib "KERNEL32" Alias "GetCurrentDirectoryA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

という部分を扱い方(クラスの何か?)がわからんちんです。。。
566デフォルトの名無しさん:2007/07/17(火) 06:00:49
>565
それVBからapi呼ぶ場合に使うやつだろ
ていうかapi使うの?
api使わずにやりたいなら
【初心者歓迎】C/C++室 Ver.39【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1182740506/
567デフォルトの名無しさん:2007/07/17(火) 08:19:46
どう見ても誤爆
568デフォルトの名無しさん:563:2007/07/17(火) 08:45:58
>>566
そうみたいです。誤爆で済みません。
コンソールプログラムからはじめて最終的にapi使いたいと思っています。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpref/html/frlrfSystemIODirectoryClassGetCurrentDirectoryTopic.asp
を参考に
#using <mscorlib.dll>
using namespace System;
using namespace System::IO;
として呼ぼうとすると、
「 fatal error C1190: マネージ ターゲット コードには '/clr' が必要です。」
となります。何かコンパイルオプションでもあるんでしょうか?
569デフォルトの名無しさん:2007/07/17(火) 08:49:49
>>568
は?
何が必要かはそこに書かれてるだろうが
http://msdn2.microsoft.com/ja-jp/library/k8d11d4s(VS.80).aspx
570デフォルトの名無しさん:2007/07/17(火) 09:00:30
それapiじゃなくてclrの気がする
うちの父親もホームセンターで蛍光灯買ってきたけど
サイズ合わないから母に交換してきてくれと言われたけど
結局放置して埃かぶってる。
蛍光灯と言ってもいろいろ種類があるように
VCといってもいろんなプログラムの作り方があるんだ
だからいきなりわけのわからりプログラム作り始めてから
相談されても困るんだよね
基本から間違ってるんだと最初から作り直しだろうし
571デフォルトの名無しさん:2007/07/17(火) 09:20:47
カレントディレクトリの変え方
絶対パスの指定方法
相対パスの指定方法

この辺知らないと作った本人がプログラム使えないだろう。
572デフォルトの名無しさん:563:2007/07/17(火) 09:35:08
>>569
コンパイルオプション指定で、無効にいくつかしたら/clrは使えるようになったようですが、
「識別子が見つかりません」となりました。わからない領域へ突入です。。。
573デフォルトの名無しさん:563:2007/07/17(火) 11:39:47
とりあえず、fopen_s()に代えてみたら、
デバッグディレクトリ上のテストファイルを読み込めるようになりました。
ただ、
char buff[64];
while(fgets(buff, 64, fp) != NULL);

でデバッグすると、初回呼び出し時、fgets.c上の
(str != NULL)
というところに引っ掛かり中断してしまいます。
問題点を把握できていません。
このプログラム(>>563)の問題点を指摘していただけないでしょうか。
574デフォルトの名無しさん:2007/07/17(火) 11:57:36
>>573
中断した時の呼び出し履歴をみて、各階層の変数の値をチェックしよう。
575デフォルトの名無しさん:2007/07/17(火) 12:01:14
>568 >572はどうなった?
知らんぷりする気か
576デフォルトの名無しさん:2007/07/17(火) 12:07:14
>>573
つーか、、
>while(fgets(input_one_statement_buff, 65536, fp) != ";")
これは何をしたいの。fgetsの戻り値は何だっけ?
577デフォルトの名無しさん:2007/07/17(火) 12:16:00
前の行のコメント読んだらわかりそうなもんだけど
578デフォルトの名無しさん:2007/07/17(火) 12:18:06
>>576は中卒
579デフォルトの名無しさん:2007/07/17(火) 12:30:46
中卒も馬鹿にしたものじゃないってことか?
580デフォルトの名無しさん:563:2007/07/17(火) 12:57:18
>>576
済みません、ソース間違っていました、「ヌル」でない時でした。
ヌルまでラインゲットです。>>573のように書いています。
その上で、上記のようなエラーが発生しています。
>>575
もともと、fopen()でファイルがこの関数見つけられなかったんで、
パスを表示してみればというアドバイスだったんです。
>>574
fgets.cの57行でストップしているので、そこの流れを見てみます。
581デフォルトの名無しさん:2007/07/17(火) 13:06:00
>>580
VCやる前にCかC++の勉強した方がいいいな
CかC++スレへ行けば?
582デフォルトの名無しさん:563:2007/07/17(火) 13:50:52
結局、ヌルファイルを読み込んでいたためということでした。

ファイルをデバッグディレクトリへ置いて直接指定してみると実行できました。

>>581
そうします。ありがとうございました。
583デフォルトの名無しさん:2007/07/18(水) 23:58:39
16ビットカラーを32ビットカラーにしたいんですがどんな感じになるでしょうか?
ビット演算でおねがいします
RRRRR GGGGGG BBBBB
RRRRRRRR GGGGGGGG BBBBBBBB AAAAAAAA

584デフォルトの名無しさん:2007/07/19(木) 00:03:32
日本ではもう忘れ去られたであろう某所に似た話題があったのを思い出した。
ttp://thespoke.net/forums/370434/ShowPost.aspx
585デフォルトの名無しさん:2007/07/19(木) 00:29:04
>>583
シフト演算子しらないのか?
586デフォルトの名無しさん:2007/07/19(木) 00:34:51
>>583
ANDとORと左右シフトくらい知っとけ
587デフォルトの名無しさん:2007/07/19(木) 01:38:03
>>583 >>586
知ってますけど なんかちがうっぽいんで聞いているんです
588デフォルトの名無しさん:2007/07/19(木) 01:41:02
違いません
unsigned short rgb16 = 0;
unsigned tempR = rgb16 >> (5 + 6);
unsigned tempG = (rgb16 >> 5) & ((1 << 6) - 1);
unsigned tempB = rgb16 & ((1 << 5) - 1);
unsigned long rgb32 = (tempR * ((1 << 8) - 1) / ((1 << 5) - 1)) << (8 + 8 + 8)
+ (tempG * ((1 << 8 - 1) / ((1 << 6) - 1)) << (8 + 8)
+ (tempB * ((1 << 8 - 1) / ((1 << 5) - 1)) << 8;
590デフォルトの名無しさん:2007/07/19(木) 04:05:29

591デフォルトの名無しさん:2007/07/19(木) 14:59:32
>>587
>ちがうっぽい
と思ったんなら、何でそう思ったかの過程を書けよ。
592デフォルトの名無しさん:2007/07/21(土) 09:27:16
ダイアログベースでボタンを配置しておいて、
while文実行中(無限ループ)にそのボタンを押されるとプログラムを終了する、
という感じのものを作りたいんですが、どうすればいいですか?
while文実行中はボタンを押しても無反応になってしまいます。
593デフォルトの名無しさん:2007/07/21(土) 09:29:05
何でそんなことしとんねん。設計見直せ
while文実行中にボタンが押されてないか確認
594デフォルトの名無しさん:2007/07/21(土) 09:39:38
windowsプログラミングの常識を超えたね
595デフォルトの名無しさん:2007/07/21(土) 09:53:49
>>592
ループをUIスレッドとは別スレッドで実行しろ
ボタン押されたらイベントハンドラでフラグでも立てるかEventをシグナルして
それをループ側でチェックすればいい
フラグの変数を使うのならvolatileにするのを忘れずに
596592:2007/07/21(土) 09:57:37
( ゚,_ゝ゚)プッ
597デフォルトの名無しさん:2007/07/21(土) 09:59:52
タイマーでも使っとけば
598デフォルトの名無しさん:2007/07/21(土) 10:01:59
イベントドリブンで作りたくないんだろ
ゲームじゃないの
599592:2007/07/21(土) 10:05:38
( ^,_ゝ^)ニコッ
600592:2007/07/21(土) 10:11:18
>>596>>599は偽者です。

>>595
別スレッドですね。
やってみます。
601デフォルトの名無しさん:2007/07/21(土) 10:13:20
>>600
m9(^Д^)プギャー あほすぎてわろた
602592:2007/07/21(土) 10:22:14
スレッドじゃないんですか?
603592:2007/07/21(土) 10:27:30
>>602は偽者です。

スレッド難しすぎで諦めました。
604デフォルトの名無しさん:2007/07/21(土) 10:31:18
もうどれが本物かわからん
>>600っぽいが
605デフォルトの名無しさん:2007/07/21(土) 12:22:06
昔ながらのスレッド使わないメッセージループ内包というのもあるが
諦めるのが一番簡単
606デフォルトの名無しさん:2007/07/21(土) 12:34:27
逆転裁判
607592(本物):2007/07/21(土) 13:28:52
592を名乗ってるのは全部偽者です!(#゚Д゚)ニセモノコラァ!!
>>595
スレッドは難しそうなイメージがあり敬遠しておりましたが、
この機会に勉強してみようと思います。
>>597
例えば10秒経過したら自動的にプログラムを終了するとかでしょうか?
出来れば、ボタンが押されたときに終了させたいのです。
>>598
ボタンが押される(イベント)→終了
これはイベントドリブンということになるのでは?

とりあえずスレッドを調べてみます。アドバイスサンクス。


608デフォルトの名無しさん:2007/07/21(土) 13:40:16
>>607
m9(^Д^)プギャー あほすぎてわろた
609デフォルトの名無しさん:2007/07/21(土) 13:41:19
>>607
GUIプログラム作ったりネットワークプログラミングとかするならスレッドの知識は必須
がんばれ

質問するときトリップつければ偽者は出ないよ
というか見分けが付く
610デフォルトの名無しさん:2007/07/21(土) 13:56:28
>>607
スレッド簡単、消防でも分かる
611デフォルトの名無しさん:2007/07/21(土) 21:06:55
>>609
別に必須じゃないだろ。

何のために、WSAASyncSelect なんてものがあるんだよ。

まあ、個人的にはスレッドの方がわかりやすいと思うが、
スレッド起こせるようになっただけで、スレッドなんて
簡単と勘違いしてる奴がいるのが難点。
612デフォルトの名無しさん:2007/07/21(土) 21:18:32
アフォだから苦労したんだねw同情するよ
613デフォルトの名無しさん:2007/07/22(日) 00:49:45
ボタンが押されるイベントで終了すればいいだけだろ
Whileになんの意味があるのかイミフメイ
614デフォルトの名無しさん:2007/07/22(日) 00:50:09
スレッドって比較的簡単なことを数多く学ぶ必要があるし、初心者にとってはとっつきにくいだろうね。
でも慣れてくると592で言ってることぐらいは簡単に書けるようになるから頑張れ。
615デフォルトの名無しさん:2007/07/22(日) 00:54:03
人それぞれ
616デフォルトの名無しさん:2007/07/22(日) 01:47:12
昔、引継ぎしたソースはスレッドがメインで7個、サブで15個位あって大変だった
作った奴(すでに退社してたけど)ぶっ殺したくなった
617デフォルトの名無しさん:2007/07/22(日) 01:52:44
>>609
ネットワークはスレッド使えば確かに簡単かもしれないが
GUIプログラムにスレッドが必須かといわれるとそうでも無い気がする
まぁ、メッセージループが単一だといろいろ問題があるのはわかるけど
618デフォルトの名無しさん:2007/07/22(日) 10:15:00
インストーラーみたいなもん作ってるんじゃないのかと勝手に予想。
その昔の俺もはまったなぁ…

結局1つスレッド作って回避したけど。
619デフォルトの名無しさん:2007/07/22(日) 23:18:55
レベルの低い質問ですいません
VC++ Express Editionを使っています
つい先日プログラミング始めたばかりで,一応C++の参考書に
目を通したので簡単なゲームでも作ってみたいと思ったのですが
プロジェクト作成のさいにどれを使ったらいいのか分かりません
620デフォルトの名無しさん:2007/07/22(日) 23:23:24
621デフォルトの名無しさん:2007/07/23(月) 00:14:06
そこの 「図3 作成したプログラムの一例」 だけど、min の比較前に else つけると
バグらない?
622デフォルトの名無しさん:2007/07/23(月) 00:17:12
>>620
すいませんコンソールアプリケーションじゃなくて
ウィンドウアプリケーションが作りたいんです
623デフォルトの名無しさん:2007/07/23(月) 00:27:25
624デフォルトの名無しさん:2007/07/23(月) 00:31:37
>>623
多分>>619の必要としてる情報は
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
だと思うよ
625デフォルトの名無しさん:2007/07/23(月) 00:32:17
いきなりVC++でGUIプログラムか
無理じゃね
626デフォルトの名無しさん:2007/07/23(月) 00:35:01
>>624
多分>>619の必要としてる情報は
http://pc11.2ch.net/test/read.cgi/tech/1162452408/l50.
だと思うよ
627デフォルトの名無しさん:2007/07/23(月) 00:38:35
微妙に分かってきましたありがとうございます

>>625
自分でもきついと思いますがやらなくてはいけないことなんで('A`)
628デフォルトの名無しさん:2007/07/23(月) 00:39:47
ヘルプ読めカス
629デフォルトの名無しさん:2007/07/23(月) 01:41:48
最大化しないでウィンドウを作成し、ウィンドウのサイズを
大きくすると、タブバーやボタンバーの灰色の下地の横の
長さが足りなくなって、右側に白い余白ができてしまうのですが、
どうしたら余白を無くすことができるでしょうか?
630デフォルトの名無しさん:2007/07/23(月) 02:32:40
そんなんできたっけ
テーマとか設定してる?
631629:2007/07/23(月) 02:41:47
>>630
レスありがとうございます。

テーマ等は設定せず、全てデフォルトで使っています。

SDKで、「猫でもわかるプログラミング」を参考に
タブバーやツールバーを作ってみたら、メイン
ウィンドウの幅を起動時の幅より広げた時に、広げた
幅の部分のタブバーやツールバーの下地が表示
されなくなってしまいます。
632デフォルトの名無しさん:2007/07/23(月) 05:24:33
普通はそういう風にはならないと思うけど
猫でもわかるの作者じゃないからどうやったらそんな風になるのか知らないし、
プログラムに問題があるなら作者に聞いてみれば?
633デフォルトの名無しさん:2007/07/23(月) 05:36:42
作者迷惑どう見ても629のせいです。
634デフォルトの名無しさん:2007/07/23(月) 05:51:11
ウインドウの幅を変えた時にツールバーの幅を
ウインドウの幅に合わせたいという意味だったら
ウインドウの幅が変ったらツールバーの幅を
ウインドウの幅に合わせるんだよ(自分で)
635629:2007/07/23(月) 06:36:23
>>632-634
レスありがとうございました。

もう一度ソースをよく見て調べてみます。
636デフォルトの名無しさん:2007/07/23(月) 15:51:04
VC++7.0でお尋ねします。
ソースファイルがプロジェクトファイルと同じフォルダに作成されるのですが、
ソースファイルの作成されるフォルダを別の場所に変更することはできないのでしょうか?
ソースファイルとヘッダーファイルを別のフォルダにしたいのです。
637デフォルトの名無しさん:2007/07/23(月) 15:51:39
>>636
別にできるよ。
638636:2007/07/23(月) 15:54:24
>>637
手順もしくは説明しているホームページを教えてくれるとありがたいのですが・・・。
639636:2007/07/23(月) 16:03:17
VC++7.0と書いてしまいましたがVC++2005の誤りでした。
640636:2007/07/23(月) 16:13:05
手作業でソースファイルとヘッダファイルを別のフォルダに移動させた後、
もう一度プロジェクトに追加してビルドすると

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

というメッセージが表示されます。これが解決したらなんとかなりそうなのですが・・・。
641デフォルトの名無しさん:2007/07/23(月) 16:23:33
プロジェクトからファイルを削除
実ファイルを移動
プロジェクトへファイルを追加
642デフォルトの名無しさん:2007/07/23(月) 16:26:24
そもそも何で分けたいの?
分けたら、#include "xxx.h" → #include "../header/xxx.h" とかにすんの?
643デフォルトの名無しさん:2007/07/23(月) 16:40:54
ユーザーインターフェーススレッドオブジェクトを
newで生成したとき役目が終わると自動的に破棄されますか?
deleteをしなければ破棄されていないことになりますか?
644636:2007/07/23(月) 16:48:44
>>642
昔UNIXの仕事をした時に、そこではソースをフォルダ分けしていたので
同じようにしないと気持ちが悪いというか・・・。

フォルダが適当に分かれていた方がファイルが探しやすいような気がします。
たとえば(ダイアログ名)フォルダの下にソースとヘッダの両方が置いてあるとか

>>641さんのやり方でやった時に640のメッセージが出てきてビルドできないのです。
645デフォルトの名無しさん:2007/07/23(月) 17:00:30
>>644
だったらプリコンパイルヘッダーの使用をやめてstdafx.hは捨てちゃえば
646デフォルトの名無しさん:2007/07/23(月) 17:03:04
>>643
そのままではdeleteは呼ばれない。
PostNCDestroyでdelete this を呼んでWindowが破棄されたら
オブジェクトも消えるようにできる。
647デフォルトの名無しさん:2007/07/23(月) 17:04:01
VC++2005EE環境でゲームを作り
リリースビルドをして実行すると

>構成が正しくないといわれて起動できないです…

が表示されます。原因が分かりません。
どなたか意見などありましたら宜しくお願いします
648デフォルトの名無しさん:2007/07/23(月) 17:04:41
Test *Testsure;に

for(int i=0; i<10; i++){
Testsure= new Test;
}

をするとどうなりますか?deleteしないで
newを繰り返しますから以前にnewした領域は
破棄されませんよね?
649デフォルトの名無しさん:2007/07/23(月) 17:05:28
>>646
ありがとうございます
650636:2007/07/23(月) 17:18:23
>>645
実はプリコンパイルヘッダーとかstdafx.hの意味もよくわかってなかったりします・・・。

ところで自己解決しました。

[プロジェクトのプロパティ]−[構成プロパティ]−[C/C++-]-[全般]タブの
追加するインクルードディレクトリにヘッダを格納したディレクトリを設定すればビルドできました。

教えて下さった皆様ありがとうございました。
651デフォルトの名無しさん:2007/07/23(月) 17:51:41
そもそもstdafx.hだけ移動させなければエラーにならないはず。
652デフォルトの名無しさん:2007/07/23(月) 18:08:31
stdafx.hを移動するのがきもちわるい
653デフォルトの名無しさん:2007/07/23(月) 20:00:57
>648
Testクラスが中でdelete this;とか発行してるかもしれないし。
削除オブジェクトに登録して削除してもらう実装も考えられる。
あるいは、実はGCを動かしているのかもしれない。
654デフォルトの名無しさん:2007/07/23(月) 22:05:05
VC++2005を使って関数ポインタを作成し、クラスAが呼び出した
クラスBから、所望のタイミングでクラスAの関数を呼びたいと
思っております。
そのために、関数ポインタを作ったのですが、コンパイルすると、
void (__clrcall *)(int)からvoid(__cdecl *)(int)に変換できません
というコンパイルエラーになります。

原因を調べてみると共通言語ランタイムをclr:/pureではなく/clrのため
というのがわかりました。他で開発されたdll、Libraryを使用するため、
/clrでコンパイルするように設定しております。

共通言語ランタイムを/clrにしたとき、
関数ポインタの受け渡しをするためにはどうすればよいでしょうか?
例などを教えていただけたらうれしいです。


[class Aの一部]
CLASSB classb // class bの作成
classb.passfunc(funcpointer); //関数ポインタfuncpointerを渡す
// この行でエラーが出る。

void funcpointer(int){
// funcpointerの中身
}

[class bの一部]
void passfunc(void (*func_)(int)){
// passfuncの処理
}
655デフォルトの名無しさん:2007/07/23(月) 22:54:29
そういう風に書かれると関数funcpointerはAのメンバでないように見えるが、
そのエラーメッセージだと、void passfunc(void (__clrcall *func_)(int))にしたらどうだろう?

いざとなったらBoost.Functionとかデリゲートとか
関数呼出できるものなら何でも受け付けるぞって奴を使えばいい。
656デフォルトの名無しさん:2007/07/23(月) 22:58:59
>>654
関数の呼び出し規約についてちゃんと勉強しなされ
657デフォルトの名無しさん:2007/07/24(火) 13:48:18
Visual Stadio 6.0(おそらくVC++ 6.0)使っています。
以前はVisual Stadio 6.0をフルインストールした状態のPCで使ってた『自作ソフト.exe』を
今回は容量の少ないシリコンディスク(2GB)のFAタイプPCで使用したいのですが、
Visual Stadio 6.0をインストールするほど容量が確保できないので、
そのまま『自作ソフト.exe』を起動したところ、アプリケーションエラーが発生し
ソフトが起動しませんでした。
専門書等を見てみましたが
1)メイン及び、監視タスクのパス(フォルダ)位置が、pathに登録されているか?
2)アプリでOCX等が使われてたりすると、アプリのみでは実行できない場合があるため、
  必要なOCXをそのPCに登録する必要がある。
などと書いてありましたがはっきりいってわかりません

ちなみに、私は初心者というか普通にWordやExcelぐらいしか使えないレベルの人間なので
ビルド(リビルド)ぐらいしか出来ないくらいの知識しかありません…

しかもこの『自作ソフト.exe』を作った人が会社辞めてしまってるので、このソフトの中身すら
私には理解できない現状です。
(起動したときの使い方ぐらいしかわからないんです…)

ちなみにOSはWindows2000 SP4で、
エラー内容は
「エラーが発生したので。『自作ソフト.exe』を終了します。
プログラムをもう一度開始する必要があります。」
という表示が出てきました。
 
658デフォルトの名無しさん:2007/07/24(火) 13:55:50
>>657
Studioだろ
まず、Releaseビルドかどうか
DebugだったらReleaseでビルドしなおして
659デフォルトの名無しさん:2007/07/24(火) 14:06:08
>>657
我が社にご依頼いただければ調査から必要な修正まで格安にて対応させていただきます。
660デフォルトの名無しさん:2007/07/24(火) 14:06:50
>>657
MFCが共有DLLを使うようになってるだけの予感。
ソースがあってビルドできるならプロジェクトの設定に全て書いてあるのだが、
わかりませんの連発ではなんとも。
661デフォルトの名無しさん:2007/07/24(火) 14:43:50
>>659
お任せしたいと思います。連絡先を教えて下さい。
662デフォルトの名無しさん:2007/07/24(火) 15:00:50
dllないときはdllがないというエラーが出たはず
663デフォルトの名無しさん:2007/07/24(火) 15:11:59
シリコンディスク(2GB)のFAタイプPCって
特定の業務専用機だろ
664デフォルトの名無しさん:2007/07/24(火) 15:18:06
だろうね。OSも書いてないし、釣りじゃなければ地雷だね。
665デフォルトの名無しさん:2007/07/24(火) 15:18:13
6.0ならプロジェクトメニューにメイクファイルのエクスポートがあるから
それ出力して見てもらうのがいいかもな
666デフォルトの名無しさん:2007/07/24(火) 17:33:13
::func(〜,〜);
この記述って普通の関数とどう違うの?
667デフォルトの名無しさん:2007/07/24(火) 17:37:09
>>666
namespaceをグローバルに限定している。
クラス内で使用しているなら、メンバ関数を誤って呼ぶのを防止する効果がある。
668デフォルトの名無しさん:2007/07/24(火) 19:37:54
>>657
MFCDLLのバージョンはチェックしたのか?
669デフォルトの名無しさん:2007/07/24(火) 23:39:54
なぜVC++のコードはやたら__が付いてるのでしょうか?
どういうときにつけるのでしょうか。
670654:2007/07/24(火) 23:49:24
655さん、656さんありがとうございます。
void passfunc(void (__clrcall *func_)(int))にしても同様の
コンパイルエラーが出ました。関数ポインタを渡すことは
不可能なのでしょうか・・・?

デリゲートを薦めてくださいましたが、デリゲートはC#特有のものと
思っておりました。検索してもC#ばかり。
みなさんは関数を他のクラスに渡すときどのようにしてらっしゃるの
ですか?

671デフォルトの名無しさん:2007/07/25(水) 00:00:37
boost::function(w
672デフォルトの名無しさん:2007/07/25(水) 00:09:11
>>670
基のコードはネイティブC++でもコンパイルできないだろ。

まず、非静的メンバ関数からポインタへの変換は存在せず、
非静的メンバにアドレス演算子を使用しても、
得られるのはメンバへのポインタと言い、普通のポインタとは全く別物。
更にC++/CLIの参照・値クラスでは、メンバへのポインタが使えない。

デリゲートはC#特有のものではなく、CLIが持っている機能でC++/CLIからも使える。
http://msdn2.microsoft.com/ja-jp/library/ms235237(VS.80).aspx
でないとWindows Formsなんか困る。

>>669
下線で始まる名前は処理系のためのもので、一般の利用者が使ってよいものではない。

そのコードはどうせマネージドC++だろ。.NETに対応させるため、
様々なキーワードを追加しているが、ことごとく独自拡張扱いとして
処理系予約の名前になるよう追加されたキーワードは下線で始まるようになっている。
673654:2007/07/25(水) 00:09:56
671さんありがとうございます。
boost::functionはなるべく使いたくないと思っております。
Microsoft提供のものでできたらと思うのですが・・・・
674デフォルトの名無しさん:2007/07/25(水) 00:12:55
いつかstd::tr1::functionをマイクロソフトが実装するときがくるかもしれない。
何年先のことだかわからないけど。
675654:2007/07/25(水) 00:17:50
672さん、ありがとうございます。
メンバのポインタが使えないことは初めて知りました。
現在、Form1.hという一番最初に生成されたヘッダファイル内に
関数を作成し、それを関数ポインタとして別クラスに渡していました。

関数ポインタを使うことはそもそも不可能ということでしょうか?
676デフォルトの名無しさん:2007/07/25(水) 00:46:12
654はコードを正確にコピペしたのか気になる。
手で写したので写し漏れがあるなんてことはないか?

このコードで同じエラーメッセージを再現できた。
しかしこれだと655で解決できるんだよな……。
void passfunc(void (*pfn)(int));

ref struct S
{
  static void f(int);
};

void test()
{
  passfunc(S::f);
}
677654:2007/07/25(水) 01:06:08
676さんありがとうございます。

現在、以下のようにしていますが、コンパイルエラーになります。

// Form1.h
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

ClassA classa;


classa.SetFunc(FuncPointer);

}
public: static void FuncPointer(int pos){pos = 0;}



// ClassA.h
class ClassA
{
// 省略 //
〜〜〜〜
private:
private:
void (*PointerFunc) (int);
public:
void SetFunc(void (__clrcall *PointerFunc_) (int )){
PointerFunc = PointerFunc_;
}

};
678デフォルトの名無しさん:2007/07/25(水) 01:08:30
>>677
SetFuncの引数だけでなく、それを代入するPointerFuncも
void (__clrcall *)(int)型にしないと駄目だよ。

関数へのポインタ型なんて、いちいち打つのが面倒だからtypedefしたほうがいいよ。
679デフォルトの名無しさん:2007/07/25(水) 01:10:32
>>677
ところで、FuncPointerのpos = 0は、
ここで晒すためだけのダミーだよな?
680654:2007/07/25(水) 01:15:52
678さん、みなさん
ありがとうございます!コンパイルが通りました。これで次のコーディング
に進めます。

typedefにして設定するようにします。
ところで、このClassA.hを利用しようとする他のプロジェクトファイルを
作るとしたら、そのプロジェクトファイルは必ずVC++2005で作成した
プロジェクトでなければならないのでしょうか?それとも、他の(VBや2003など)
で作成したプロジェクトにも組み込めるのでしょうか?
非常に初歩的な質問で申し訳ありません。ついでで勝手ながらですが、
教えてほしいです。。。
681デフォルトの名無しさん:2007/07/25(水) 01:16:11
ファイアーモックス!
682デフォルトの名無しさん:2007/07/25(水) 01:22:16
>>680
そのままではVC++でしか使えない。

他のCLI言語で使いたければ、.NETクラスライブラリ(だったかな)のプロジェクトで
マネージドDLLを作る。その中でClassAを公開の参照クラスとして定義すればいい。
できたDLLと中のクラスは参照設定すれば使えるようになる。
ただし、CLRのバージョンが違うので、VS .NET 2002/2003では使えない。
当然CLI、特にCTSやCLSの制約を受けることになるので、その点は厄介。
683デフォルトの名無しさん:2007/07/25(水) 01:29:24
CLIなんて世の中にゴミを撒き散らすだけだからやめてくれんかなぁ。
バカマイクロソフトに言ってるんだけどね。
684654:2007/07/25(水) 01:37:10
682さん、683さんありがとうございます。

要するに__clrcallの呼び出し規約に設定することで、一気に
汎用度が下がるのですね・・・?
じゃあ、普通、VC++2005で汎用的?というか一般的にライブラリを公開
(提供)する場合はどうやって関数ポインタを実現するのでしょうか?
何かずれている質問をしているのかもしれません。
685デフォルトの名無しさん:2007/07/25(水) 01:56:51
VBやらC#やらでもDLLを呼び出したいなら__stdcallを使う。
VC++だけなら気にしなくていい。
__stdcallと__cdeclの違いは調べておいたほうがいい。
__thiscallもついでに調べておけば、クラスとメンバの関係が理解できるかもな。
686654:2007/07/25(水) 01:59:12
685さん、ありがとうございます。
呼び出し規約について深く調べてみます。

みなさん、ありがとうございましたm(_ _)m
687デフォルトの名無しさん:2007/07/25(水) 02:46:55
ファイアーモックス!
688デフォルトの名無しさん:2007/07/25(水) 16:19:55
>>685
マネージドC++とC++/CLIなら件の__clrcallも欠かせないだろ。
689464:2007/07/25(水) 19:46:58
初心者スレの話題じゃない><
690デフォルトの名無しさん:2007/07/25(水) 19:51:54
(LPCWSTR)char*のようにしてchar*からLPCWSTRにキャストすると
文字化けしてしまうのですが、どのようにしたらちゃんとキャストできますか?
691デフォルトの名無しさん:2007/07/25(水) 19:57:40
>>689
初心者のスレの話題ですが?w
692デフォルトの名無しさん:2007/07/25(水) 20:25:12
>>690
キャストは不可能です。
693デフォルトの名無しさん:2007/07/25(水) 20:26:25
>>692
orz
では、System::Stringからの変換は可能ですか?
694デフォルトの名無しさん:2007/07/25(水) 20:49:18
>>693
PtrToStringCharsの戻り値をpin_ptr<WCHAR>型の変数で受けるだけ。
(WCHARの代わりにwchar_tやSystem::Charでも可)

なお、<vcclr.h>のインクルードが必要。
また、pin_ptr<T>はT*のように扱える。

http://msdn2.microsoft.com/ja-jp/library/585whdf9(VS.80).aspx
695デフォルトの名無しさん:2007/07/25(水) 21:12:59
VS2003です。シンボル情報を含んだ実行ファイルを、外部からCreateProcessで
デバッグモードで起動させ、実行ファイルが含んでいるシンボル情報を動的に
取得したいと思っています。
CreateProcessで一度サスペンドさせ、SymInitializeをコールしてシンボルハンドラ
を初期化させてモジュールアドレスを設定したいのですが、実行ファイル本体に含む
シンボルを取得するモジュールアドレスに何を設定するかわかりません。
実行ファイルが読み込むDLLのシンボルは、デバッギが発生させるDLL_LOAD割り込みから
取得できています。
試しにLoadModuleイベントをすべて見張ってシンボルを出力してみたところ、実行
ファイルに含まれるシンボルは取得できませんでした。

誰か分かる人いませんか?
696デフォルトの名無しさん:2007/07/25(水) 22:35:38
スレ違い
697695:2007/07/26(木) 22:43:34
スレ違いだったかもだけど、自己解決したので情報垂れます。

MapDebugInformation関数を呼んで、実行ファイルのベースアドレスを取得して
SymEnumSymbolsCallbackから取得できました。別にCreateProcessを呼んでも
呼ばなくてもできますね。PDBファイルを作るように実行ファイルを作った時は
PDBファイルがないとシンボルは取得できないようです。
LoadModuleイベントを組み合わせると、実行ファイルが参照するシンボルを全て
見ることができました。(Win32の隠しAPIも見れましたが、あれは問題ないのかな?)
これでINT3仕込めば、シンボル参照ができるデバッガの完成です。

_64のサフィックスを付ける事ができる関数がほとんどなので、64bit対応も問題なさげ。
Vista対応は分からず。
698デフォルトの名無しさん:2007/07/28(土) 22:04:40
はじめまして。
今日vc++を購入したのですが、教本で悩んでいます。
教本はc++のものでもよろしいのでしょうか?
まだプログラムを打ち込んだことが一度もないのでvc++についての基本概念
などが理解できるものがあれば教えていただけますか?
699デフォルトの名無しさん:2007/07/28(土) 22:13:26
最低限CかC++は知ってる前提じゃないかな
まだだったら当然やっておかないと
700デフォルトの名無しさん:2007/07/28(土) 22:16:34
では、先にc++等を勉強し満足するものが作れるまでvc++には
手を出さない方が良いでしょうか?
701デフォルトの名無しさん:2007/07/28(土) 22:50:25
手を出さない方が良い
702デフォルトの名無しさん:2007/07/28(土) 22:58:48
>>700
そういうものでもない。
C++はC言語を拡張しているが、考え方は全く違う。

せっかくVC++を買ったのならそれで色々作ってみたら?
最初はコンソールアプリケーションで練習すると、分かりやすい。

赤くてでかい本でC++プログラム言語(かな?) 第4版
というのが、C++のバイブル扱いになっていると思う。値段も高い。
同じ体裁でC++ Primerもある

金があるならまずこの二つかな。
703デフォルトの名無しさん:2007/07/28(土) 23:06:22
俺も手を出さないほうがいいとは思うが
もう買ってしまったんなら仕方ない。
まずはコンソールアプリケーションとC入門書ではじめるべし
704デフォルトの名無しさん:2007/07/28(土) 23:15:09
C言語、VC++はやめておけ
まずはC++(STL)がいいと思うぞ
705デフォルトの名無しさん:2007/07/28(土) 23:57:32
>>704
は、VC++でSTLが使える事を知らないらしい。
しかも、C++がいいというが、処理系を書いていない。
釣りかもしれない
706デフォルトの名無しさん:2007/07/29(日) 00:04:53
>>705
違うよ
統合環境として初心者向けでは無いんだ VC++は
初心者はコンパイルの速いBCCつかっとけ
707デフォルトの名無しさん:2007/07/29(日) 00:22:58
>>705
704はCやVC++の本はやめとけという意味だと俺は思ったぞ。
708704:2007/07/29(日) 00:58:25
(C言語のみ、VC++は)本も本体もやめとけ 
とくに文字列操作はSTLから始めた方がいいぞ
709704ウザイ:2007/07/29(日) 01:03:40
700からでした。
710名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:32:02
STLの文字列操作もなぁ。
711名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:32:33
ありゃ。なに俺のハンドル名。
712名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:33:31
なにが?
713デフォルトの名無しさん:2007/07/29(日) 01:34:30
>>711
m9(^Д^)プギャー
714名無しさん@そうだ選挙に行こう:2007/07/29(日) 01:54:46
>>712
ぎゃははw
715名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:26:41
Visual C++ Express Editionを使用しています。
テキストボックスに書きたいのですが、コンパイルができません。
初歩的かもしれませんが解決方法を教えてください。

コード
  public: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
        debug1();
  }
  int debug1()
  {
    textBox1->text = "あいう";  // ← 135行目
    return 0;
  }

エラーメッセージ
c:\〜\projects\test2\Form1.h(132) : error C2248: 'System::Windows::Forms::Control::text' : private メンバ (
クラス 'System::Windows::Forms::Control' で宣言されている) にアクセスできません。
    c:\〜\projects\test2\Form1.h(25) : 'System::Windows::Forms::Control::text' の宣言を確認してください。
    c:\windows\microsoft.net\framework\v2.0.50727\system.windows.forms.dll : 'System::Windows::Forms::C
    ontrol' の宣言を確認してください。

テキストボックスのModifiersはpublicにしました(ここは関係ないんでしょうか)
  public: System::Windows::Forms::TextBox^ textBox1;
716名無しさん@そうだ選挙に行こう:2007/07/29(日) 02:45:50
いいんだよ。
717名無しさん@そうだ:2007/07/29(日) 03:03:47
こんな感じで普通に出来たぞ
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
testtext("あいう");

}
void testtext(System::String ^s)
{
this->textBox2->Text = s;
}
718名無しさん@そうだ選挙に行こう:2007/07/29(日) 03:46:15
>>717さん
ありがとうございます。
小文字のtextが原因だったようです。

しかし (System::String ^s) の意味も??です。

Visual C++ の道は険しそうです・・・
719名無しさん@そうだ選挙に行こう:2007/07/29(日) 04:30:06
>>715よ。
お前さんがやってるのは「C++/CLI」だ。
「C++」ではないことを指摘しておくぞ。
720名無しさん@そうだ選挙に行こう:2007/07/29(日) 06:36:54
>>700
プログラミング初心者ならば、コンソールアプリをVC++の開発環境を使わないで作るのがいいかも
BCCを使ってもいいけどせっかく買ったVC++でもVC++上のビルドではなくて
コンソール上からでもコンパイル出来るからそれをやる方がいいと思う
古い考え方かもしれないけど、やっぱりc(c++)言語をやる人間はmakeファイル、コンパイル、リンク
の知識は知っていてほしいし
>>708
文字操作に関してはcから始めた方が良いと思う
文字操作はメモリの勉強の第1歩だし

以上、最近は管理職に回ってしまった中年SEの意見です
721名無しさん@そうだ選挙に行こう:2007/07/29(日) 06:38:53
お前どんだけ(yr
722名無しさん@そうだ選挙に行こう:2007/07/29(日) 07:45:20

> makeファイル、コンパイル、リンクの知識は知っていてほしいし
> 文字操作はメモリの勉強の第1歩だし

無くても出来ることをわざわざやる必要なし
関数の受け渡しにc_str()が必要になる事以外に、char型で操作する必要なし
ソースが難解になるだけだ
723名無しさん@そうだ選挙に行こう:2007/07/29(日) 07:48:37
704ウゼェ
724名無しさん@そうだ選挙に行こう:2007/07/29(日) 07:52:48
区切りを見つける find、部分文字列を取り出す substr 、
文字列連結 + 、領域自動確保が使えすぎる charでやる必要がどこにある?
ポインタとかは考慮する必要はあるだろうが、文字列操作限定では
string型で出来ないことはないだろ
725名無しさん@そうだ選挙に行こう:2007/07/29(日) 07:56:16
さらにboostのstring algorithmを使えば向かうところ敵無しですからね
726デフォルトの名無しさん:2007/07/29(日) 11:52:15
string 使おうと思ったら、クラスやメンバ関数を覚えてないといけない。
それに入出力を扱うならストリーム、さらに STL 特有のイテレータ操作なども必要。
正直初心者には、ポインタよりハードルが高いと思うんだがなぁ。
727名無しさん@そうだ選挙に行こう:2007/07/29(日) 12:06:32
覚えなくてもその都度リファレンスマニュアル調べればいいじゃない
その過程でストリームやイテレータの概念を理解していけば一石二鳥だよ
ポインタ等の低レベルな操作はそれらを理解した後の方がやりやすい
ような気がするんだけどどうもそれはあんまり一般的じゃないようだ
というか、そもそもC/C++をやるやつそのものが周囲に少なかったり…orz
728名無しさん@そうだ:2007/07/29(日) 13:21:15
そうそう、AMSI Cの標準関数でも全部覚えてるかっつーと
覚えてないし、要はしたいことをするためにどうすべきかを
調べる能力が大事だね。
729名無しさん@そうだ選挙に行こう:2007/07/29(日) 14:53:37
stringなんかよりprintfのほうがよっぽど使えるが。
730名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:00:41
出力(coutとprintf)を比べたらだろ それ以外ならstringだろ
731デフォルトの名無しさん:2007/07/29(日) 15:06:47
まて、どっちが使えるかじゃなくて、
初心者が覚えるならどっちから、って話だったはずだ
問題から履き違えたら、答えが分かれるのは当然だぞ
732名無しさん@そうだ選挙に行こう:2007/07/29(日) 15:45:54
733名無しさん@そうだ選挙に行こう:2007/07/29(日) 16:17:21
でもまあポインタというかメモリの概念がわかってないと
いろんなところでつまずくからなぁ
不正なメモリ操作をしてるのに全く気づかないとかになりがち
734名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:09:33
VC知らなくてもいい内容だと書き込みが増えるのがいつも不思議
735名無しさん@そうだ選挙に行こう:2007/07/29(日) 17:35:16
736デフォルトの名無しさん:2007/07/30(月) 16:59:56
アプリケーションを作成したんですが
1回目 2回目と作業をしていくと
メモリ使用量が40kbずつどんどん増えていきます

new deleteには気をつけてるつもりなんですが
他になにか原因になるようなものはありますか?
737デフォルトの名無しさん:2007/07/30(月) 17:40:38
>>736
デバッガで実行して終了時にメモリリークはダンプされる?
他は、GDIオブジェクト(BITMAPとか)はメモリ使用量に出るんだったか?
タスクマネージャでGDIオブジェクトの数を見れるので、漏れをチェックすべし。
738デフォルトの名無しさん:2007/07/30(月) 18:55:42
>>736
100回起動を繰り返して高々4Mでしょ。OK。合格。
739デフォルトの名無しさん:2007/07/30(月) 19:43:45
>>737
勉強してからレスしますね


>>738
起動じゃなくて
メッセージを受け取って作業して
その作業がし終わったらなので

4Mは大きいですよね
740デフォルトの名無しさん:2007/07/30(月) 20:50:10
ヘッダファイルの <new.h>
はどういう時に使用するファイルなのか教えて下さい
741デフォルトの名無しさん:2007/07/30(月) 21:33:28
obsoleted
742740:2007/07/30(月) 21:43:47
>>741
C++ではほとんど使われていない。と言う意味でしょうか?
回答ありがとうございました。
・・・出来れば<new.h>の意図するものを教えていただきたいです
743デフォルトの名無しさん:2007/07/30(月) 22:28:10
>意図するもの
obsoleted
744デフォルトの名無しさん:2007/07/30(月) 22:32:18
プログラム組もうと思ってるんだよね?

なんで、new.h を開いてみようとか思わないの?

*new.h - declarations and definitions for C++ memory allocation functions
745デフォルトの名無しさん:2007/07/30(月) 23:24:53
標準C++には<new>があるんで、そっちのことを少し書いてみるが、
operator newやnew[]、delete、delete[]などといった関数の宣言が置いてある。

new(ptr) hoge_tのようなvoid*の引数を1つ取る配置newなんかは、
これをインクルードしないと使えないはず。
746740:2007/07/30(月) 23:32:11
m(..)m
747デフォルトの名無しさん:2007/07/31(火) 16:06:27
Visual C++ 2005について質問です。
読み込むファイル名を指定する以下のプログラム

TCHAR tmpName[256];
sprintf_s( tmpName, sizeof(tmpName), "wanko.txt" );

を、構成プロパティ→全般→文字セット の項目が「Unicode 文字セットを使用する」
という設定のプログラムにコピーしたところ、コンパイルエラーが出ました。そこで、
WCHAR tmpName[256];
wprintf_s( tmpName, sizeof(tmpName), L"wanko.txt" );

と修正したところ、コンパイルは通ったのですが、
tmpNameに、「wanko.txt」の文字列が入っていないことがわかりました。
どこに問題があるのでしょうか?
あるいは回避方法などが、あれば教えてください。よろしくお願いします。
748デフォルトの名無しさん:2007/07/31(火) 16:15:19
>>747
やりたいことをはっきりしろ。
コンパイルエラーが出るのは、きちんとTCHARに対応したコードになってないからだ。

charでやりたいんなら
char tmpName[256];
sprintf_s(tmpName, sizeof tmpName, "wanko.txt");

TCHARでやりたいんなら
TCHAR tmpName[256];
_stprintf_s(tmpName, sizeof(tmpName)/sizeof(TCHAR), _T("wanko.txt"));

wchar_tでやりたいんなら
wchar_t tmpName[256];
_swprintf_s(tmpName, sizeof(tmpName)/sizeof(wchar_t), L"wanko.txt");
749デフォルトの名無しさん:2007/07/31(火) 16:17:00
swprintf_s() 呼びたいのはこっちじゃ?
750デフォルトの名無しさん:2007/07/31(火) 16:22:23
全然違うみたいだけど同名のやつがいろいろあるのかな?

int wprintf_s(
const wchar_t *format [,
argument]...
);
751デフォルトの名無しさん:2007/07/31(火) 16:23:35
>>750
wprintf_s()はprintf()のワイド文字版のセキュア版
>>747はsprintf_s()を置換するつもりで間違った関数を使ってしまったと言うだけ
752デフォルトの名無しさん:2007/07/31(火) 18:44:47
よくありがちなのが、入ってるのに入ってないって騒ぐやつ
Unicodeが表示できないものもあるからな
753747:2007/07/31(火) 22:02:44
>>748-752

wprintf_s を swprintf_s と書き直したところ、意図したとおりに動きました。

どうもありがとうございます。
754デフォルトの名無しさん:2007/07/31(火) 22:06:49
工工工工工工エエエエエエ(´д`)エエエエエエ工工工工工工
755デフォルトの名無しさん:2007/07/31(火) 22:10:42
ごちゃごちゃ書かれているが、748のTCHAR版が一番の正解だろ。
756デフォルトの名無しさん:2007/07/31(火) 22:22:45
747には理解できません
757デフォルトの名無しさん:2007/07/31(火) 23:52:06
TCHAR というのは、Unicode でも MBCSの
どちらでも対応できるとですか?
758デフォルトの名無しさん:2007/07/31(火) 23:58:39
てすと
759デフォルトの名無しさん:2007/08/01(水) 00:04:57
>>757
「正しくコーディングすれば」大丈夫。
>>748はその例。

もっとも、場合によってはそれが無駄に面倒なこともあるがな。
MBCSで必要なロジックが、SBCSやUCSの場合と明らかに異なる場合などがそうだ。
例えばTCHARでMBCSを考慮する場合は、文字へのポインタをインクリメントするのに
単に
s++;
と書いてはいけなくて、
CharNext()や_tcsinc()といったものを使わなければならない。
が、それは明らかに単なるポインタのインクリメントよりも高価な処理で、
記述も面倒になる。
760デフォルトの名無しさん:2007/08/01(水) 00:27:15
最近では面倒くさくなって、
TCHARをほとんどWCHARとして扱うことが増えてる。
9x系OSは完全無視。
761デフォルトの名無しさん:2007/08/01(水) 00:31:43
最近では面倒くさくなって、
TCHARをほとんどCHARとして扱うことが増えてる。
9xもNT系OSも完全考慮。
762デフォルトの名無しさん:2007/08/01(水) 00:34:52
>>760
せめてunicows.libをリンクしてください。
運が良ければそれだけで9xでも動きます。
763デフォルトの名無しさん:2007/08/01(水) 01:34:47
最近よく こんなの→ System::String ^s 見かけるんだけど、
「^」ってどういう意味ですか?
764デフォルトの名無しさん:2007/08/01(水) 01:43:06
>>763
C++で.NETする気が無いなら知らなくても良い
765デフォルトの名無しさん:2007/08/01(水) 01:44:54
じゃあ必要ないや
766デフォルトの名無しさん:2007/08/01(水) 01:46:22
>>760-761
それなら、最初からTCHARなんぞ捨てて、明示的にchar/wchar_tに汁
APIはA/Wを明示汁
といいたいが、ATL/WTL/MFCはほぼTCHAR専用なんだよな……
767デフォルトの名無しさん:2007/08/01(水) 03:30:21
>>763
C++/CLI と gcnew でググれ。
768デフォルトの名無しさん:2007/08/01(水) 03:33:01
やだね必要ないもん
769デフォルトの名無しさん:2007/08/01(水) 04:49:22
>>767
なんだ、マネージドC++か。興味なし。
770デフォルトの名無しさん:2007/08/01(水) 04:59:48
362 :デフォルトの名無しさん [] :2007/08/01(水) 04:54:48
マネージドなプログラム組むならC++なんか使わねっつの!w
771デフォルトの名無しさん:2007/08/01(水) 07:40:09
.NETってあの厨房御用達のやつ?マジ世の中から消え去って欲しい。ゴミを撒き散らすなよな。
772デフォルトの名無しさん:2007/08/01(水) 12:48:17
PTSTRをstringにしたいんですけど、、、単純に代入しちゃだめ?
ってか正直分かってないんです。
773デフォルトの名無しさん:2007/08/01(水) 13:07:49
std::basic_string<TCHAR>へなら代入や初期化ができる。
std::stringはstd::basic_string<char>のtypedef。
774デフォルトの名無しさん:2007/08/01(水) 13:33:56
VC++2002のMFCでアプリケーションを作ったんですが
タスクマネージャーのメモリ使用量のところで
48000KBほどから少しずつ増えていき52000KBになると
例外エラーがでたあと
アサーションいれた覚えが無いのにアサーションがでてきました

これはメモリリークですか?
775デフォルトの名無しさん:2007/08/01(水) 13:50:59
何の例外?
デバッグ環境での実行?
776デフォルトの名無しさん:2007/08/01(水) 13:55:37
unkownがなんがなんたらかんたらで命令が16進数のなんとかをなんとか
すいませんメモしていませんでした

コンパイルしたexeファイルを実行しました
777デフォルトの名無しさん:2007/08/01(水) 13:59:37
>>772
std::basic_string<>はマルチバイト文字対応ではない。
TCHARを使うWindowsベッタリなプログラムなら、CStringを使うのもアリだ。
CStringなら内部的に_tcs〜系の関数を使っているので、MBCSで
コンパイルした場合には正しくマルチバイト文字が処理される。

Windowsベッタリではないコードを分離したいなら、TCHARは使わず
std::wstringで書くと良いと思うが、VC++のC++ランタイムは8.0になっても
未だにlocale周りにバグを抱えているので、wchar_tを使ったプログラムは
しばしばそれを踏むことになるかもしれん。
778デフォルトの名無しさん:2007/08/01(水) 14:22:10
>>773
>>777
ありがとうございます。Javaから入ってVC++に慣れない日々が続いています。
まだ解決には至ってませんが、とても有益な情報ありがとうございました。
779774:2007/08/01(水) 15:58:16
一つのアプリケーションの使える
メモリ領域の限界って決まってるんですよね?
その限界を調整する方法ってあるんですか?
780デフォルトの名無しさん:2007/08/01(水) 16:17:05
PCに搭載してるメモリを外したり増やしたりすれば調整できるよ
781774:2007/08/01(水) 16:19:24
ハード的な部分でしか無理ですか?
VC++の設定では無理ですか?
限界まで使っているように見えないので
782デフォルトの名無しさん:2007/08/01(水) 16:41:31
そりゃキミのプログラムの欠陥
783デフォルトの名無しさん:2007/08/01(水) 16:46:22
メモリを確保する部分のコード晒してみ?
784デフォルトの名無しさん:2007/08/01(水) 16:48:11
listexp2を使ってkernel32.dllをリストアップしてみました。
で出来上がったdswをVC++2005 Express Edition + Platform DSKで開き、
ビルドすると、
c:\_ernel32_dummy.cpp(7) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\_ernel32_dummy.cpp(7) : warning C4508: 'd_ActivateActCtx' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。

というエラーが1行ごとに吐き出されてしまいます。
色々検索して調べてみたのですが、どうすれば直るでしょうか・・?
785デフォルトの名無しさん:2007/08/01(水) 16:51:16
関数に戻り値の型指定子を書いてください
786774:2007/08/01(水) 17:08:49
TestThread=new TEST[MAX*num];//UIスレッド動的生成

こんな感じですが他のところも似たようなものです
ちなみにこのときは75個ほど生成しています
787デフォルトの名無しさん:2007/08/01(水) 17:10:13
new[]しているけど、delete[]ではなくdeleteを使っているなんてことはない?
788デフォルトの名無しさん:2007/08/01(水) 17:15:26
>>785
なるほどと思いlistexp2で吐き出されたcppをみたところ、void指定されていませんでした。(^^;
listexportを使ってcppとdefを吐き出し、listexp2で吐き出されたプロジェクトに上書きしてから
開いてみたところ、正常にビルドできました。

本来なら新規プロジェクトでcppとdefを読み込んでdllビルドできればいいのですが、
ビルドして出来上がったdllはdllでないらしく・・・。

何はともあれ解決しそうです。ありがとうございました。
789774:2007/08/01(水) 17:18:17
delete[]をしています
自動変数の使いすぎが原因とかでしょうか?
領域が増えていってもエラーがでないようにしたいのです


スレッドが反応してそれぞれ作業していくので48000KBほどから52000KBに
増えていっても不思議じゃないのですが
メモリリークが原因かわかりませんが52000KBになってもエラーがでないように
するにはどうすればいいのでしょうか?

790デフォルトの名無しさん:2007/08/01(水) 17:33:34
どっかでオーバーランしてんじゃないの。

とりあえず、実行し直して、メモを取り直せよ
791デフォルトの名無しさん:2007/08/01(水) 19:21:51
>>788
プロパティ→リンカ→入力→モジュール定義ファイル
にdefを指定しているか?
792デフォルトの名無しさん:2007/08/01(水) 20:50:06
>>791
ありがとうございます。できました(>_<)。
793デフォルトの名無しさん:2007/08/02(木) 06:27:08
>>792
やったじゃん! おめ!
794デフォルトの名無しさん:2007/08/02(木) 07:10:21
プログラムの話になるか分らないのですがどなたか質問聞いていただけますか?

色々な海外サイトを回っていたらJust-In-Time デバックとの表示が度々出てきます。
ぐぐってみた所、他の方々は選択を無視出来るようなのですが、それをすると自分のブラウザは勝手に終了してしまいます。
無視せず進むとMicrosoft Visual Studioが起動しエラー表示後、逆アセンブリで〜など色々表示されるのですが理解できず苦戦しています。

現状がどうなっているのかも理解できません、なのでここに書き込みしてみました。
プログラマの方、プログラム経験者の皆様によろしければ助言など頂けると助かります。
使用OS WinXP 使用ブラウザ Sleipnir 設定などは特に変更してません。

よろしくお願いします。
795デフォルトの名無しさん:2007/08/02(木) 07:18:09
そのまま苦戦してればいいよ
796デフォルトの名無しさん:2007/08/02(木) 07:34:27
やすゆきに言えよ
797デフォルトの名無しさん:2007/08/02(木) 10:58:26
>>794
>Microsoft Visual Studioが起動し
アンインストールすればおk
798デフォルトの名無しさん:2007/08/02(木) 21:54:26
>>794
Visual Studioが入っていて、君のブラウザ(ブラウザに限らないけど)が回復できないエラーになると、そういう表示が出てくるのさ。
つまり、ブラウザのバグってこと。
特別なスキルが無い限り、『無視』でブラウザを強制終了するしかない。

解決策は>>797にするか、君のブラウザをもっとバグの少ないものに変えるべきですね。
799デフォルトの名無しさん:2007/08/02(木) 22:17:34
エスパー登場
800デフォルトの名無しさん:2007/08/02(木) 22:23:17
どこに?
801デフォルトの名無しさん:2007/08/02(木) 22:39:35
シリウスの方向に 1 光年くらいのところに
802デフォルトの名無しさん:2007/08/02(木) 22:52:17
面白くないよ
803デフォルトの名無しさん:2007/08/02(木) 23:50:38
オマエモナー
804デフォルトの名無しさん:2007/08/03(金) 00:03:15
805デフォルトの名無しさん:2007/08/03(金) 02:29:59
806デフォルトの名無しさん:2007/08/03(金) 03:23:06
const A&
807774:2007/08/03(金) 15:41:09
>>790
例外 unknown software exceptionというのがでました
808デフォルトの名無しさん:2007/08/03(金) 15:44:33
>>807 m9(^Д^)プギャー
809デフォルトの名無しさん:2007/08/03(金) 15:57:29
>>807
きちっと環境作ってデバッグしたほうがよさげ
810デフォルトの名無しさん:2007/08/06(月) 10:21:40
Visual C++2005をつかってDirect Xベースのゲームを作ろうかと思うのですが、
Visual C++本体とDirect X SDKの他に必要、重要となるものは何かありますでしょうか?
811デフォルトの名無しさん:2007/08/06(月) 10:34:08
>>810
まともな人間。
812デフォルトの名無しさん:2007/08/06(月) 10:39:08
>>810
まともな思考。
813デフォルトの名無しさん:2007/08/06(月) 10:46:55
ネットがあれば何もいらない。
814デフォルトの名無しさん:2007/08/06(月) 10:52:03
うそをうそと見抜く力が必要
815デフォルトの名無しさん:2007/08/06(月) 12:18:02
そろそろできた?
できなかったら何か足りないと思うよ
816810:2007/08/06(月) 12:27:53
マスタ〜アップしました♪
817デフォルトの名無しさん:2007/08/06(月) 16:01:04
ここは初心者に冷たいインターネットですね
818デフォルトの名無しさん:2007/08/06(月) 16:02:44
暖かすぎだと思うけど・・・普段どんだけインターネット満喫してるんだw
819デフォルトの名無しさん:2007/08/07(火) 01:19:44
関数の入力をしているときに、
関数に入力する引数がガイドででるときと、でないときがあるけどなんで?
820デフォルトの名無しさん:2007/08/07(火) 01:34:10
ツンデレ
821デフォルトの名無しさん:2007/08/07(火) 07:34:25
Visual C++2005で開発してますが、ソースはViクローンで書いています。
Viでインテリセンス出す方法が知りたいです。
822デフォルトの名無しさん:2007/08/07(火) 07:37:48
無理だろwww
823デフォルトの名無しさん:2007/08/07(火) 07:58:03
それでもvimなら、vimならやってくれ(AAry
824デフォルトの名無しさん:2007/08/07(火) 08:01:39
それでもvimなら、vimならやってくれない
825デフォルトの名無しさん:2007/08/07(火) 08:43:01
>>824
お前は何を言っているんだ
826デフォルトの名無しさん:2007/08/07(火) 08:49:48
>>825
お前は何を言っているんだ
827デフォルトの名無しさん:2007/08/07(火) 09:49:42
>>827
おれは何を言っているんだ
828デフォルトの名無しさん:2007/08/07(火) 15:40:32
829デフォルトの名無しさん:2007/08/07(火) 16:02:01
もうMFCはおなかいっぱい。
830デフォルトの名無しさん:2007/08/07(火) 19:41:53
テンプレートを使うと「コンパイルされたクラスの テンプレート のインスタンス化…」とかいう
ワーニングが大量に出てうざいんですけど、これが出力されないようにする方法ってありますか?
831デフォルトの名無しさん:2007/08/07(火) 19:52:46
>>830
なんでエラーコード書かないのか知らないが、警告消すだけなら
つ[#pragma]
832デフォルトの名無しさん:2007/08/07(火) 19:53:10
まつがい。
つ[#pragma warning]
833デフォルトの名無しさん:2007/08/07(火) 20:02:47
>>830
そんなんもしらんってバカじゃねぇの( ゚,_ゝ゚)
834デフォルトの名無しさん:2007/08/07(火) 20:28:33
その警告だけに限定して消す方法は存在しません。
835デフォルトの名無しさん:2007/08/07(火) 20:41:14
コンパイラオプションに「-EHsc」追加するといいよ
836デフォルトの名無しさん:2007/08/07(火) 22:02:06
ワーニングって何だ?
ウォーニングなら知ってるが。
837デフォルトの名無しさん:2007/08/07(火) 22:56:00
オーバーフローを防ぐために、
<limits.h>をインクルードして、INT_MIN + 2以下INT_MAX - 2の値以上を入力したら、
再入力を促すようなプログラムを組んだのですが、
スルーされることがあるのはなんでですかorz

ちなみに、Cygwinで実行した時は、うまくいきました。
838デフォルトの名無しさん:2007/08/07(火) 23:23:41
勘違いだろ
839デフォルトの名無しさん:2007/08/07(火) 23:38:15
>>837
まさかintで比較しているって落ち?
840デフォルトの名無しさん:2007/08/07(火) 23:42:29
>>839
どういう意味でしょう……?
もしかして、INT_MINやINT_MAXはint型じゃないんですか……?
841デフォルトの名無しさん:2007/08/07(火) 23:45:55
オーバーフローしてからチェックしても遅いでしょう。
値チェックの直前で値をprintfして確認してみたら?
842デフォルトの名無しさん:2007/08/07(火) 23:49:04
int使うならlong
843デフォルトの名無しさん:2007/08/07(火) 23:49:44
intってOSに依存しなかった?
844デフォルトの名無しさん:2007/08/07(火) 23:51:43
>>841
オーバーフロー後に確認してもダメなのですか……。
つまり、こんなプログラムは無意味?

do {
printf("値:");
scanf("%d", &n);
} while (n < INT_MIN + 1 || n > INT_MAX - 1)

もし、オーバーフローを起こす前に確認できるプログラムがあれば、
教えていだだきたい所存orz
845デフォルトの名無しさん:2007/08/07(火) 23:53:36
少なくともこんなことしてたらダメだ。
int foo;
scanf("%d", & foo);
if (foo <= INT_MIN + 2) ...;
846デフォルトの名無しさん:2007/08/07(火) 23:56:44
>>844
入力の桁数が非常に大きかった場合にscanf()がどういう値を返すかは
完全に処理系によるみたいだな
gccなんかは、intで表現し切れなかった場合はINT_MINやINT_MAXを
返すようだから、それで判断がつくだろう
一方、VC++あたりは、何も考えずに足し算掛け算を行いオーバーフローした
結果をそのまま返すので、それではどうしようもない
847デフォルトの名無しさん:2007/08/08(水) 00:04:12
scanfがオーバーフローを検出して、INT_MAXを返す仕様なら
それでもいいけどさ。
848デフォルトの名無しさん:2007/08/08(水) 00:21:04
普通はキー入力で桁数チェックして
それ以上はを受け付けないようにして
コピペされちゃったら切り捨てかな
849デフォルトの名無しさん:2007/08/08(水) 00:24:47
つ strtol
850デフォルトの名無しさん:2007/08/08(水) 14:04:15
>>834
#pragma warningで普通にできるから
851デフォルトの名無しさん:2007/08/08(水) 14:14:12
本人だろう
852デフォルトの名無しさん:2007/08/08(水) 17:00:38
コンソールアプリケーションをビルドしてデバッグ開始したときにウィンドウが勝手に消えないようにするにはどうすればいいんでしょう
853デフォルトの名無しさん:2007/08/08(水) 17:09:59
デバッグしてるなら、途中で止めるからそういうのは気にならないはずなんだけど、
止めない=デバッグしないのなら、CtrlF5とかでデバッグ無しで実行ってやればいい

止まる関数を入れてもいいし、ブレークポイントを設定してもいいけど。
854デフォルトの名無しさん:2007/08/08(水) 17:26:01
つ getchar
855デフォルトの名無しさん:2007/08/08(水) 17:35:32
ありがとうございます
856デフォルトの名無しさん:2007/08/08(水) 18:29:34
ImmGetCompositionStringを使って、入力された文字列を拾っているのですが、
ウィンドウ左上に入力中文字が表示されてしまいます。
これを非表示にしつつ、文字を拾う方法はありますか?

拾った文字は、DirectXによって画面に出力させています。
WindowsXP、VC++6.0です。
857デフォルトの名無しさん:2007/08/08(水) 20:14:27
>>856
DirectXのCustomUIサンプル見るといいよ。
これ以上話を続けるならDirectXスレで。
858856:2007/08/08(水) 21:10:29
>>857
ありがとうございます。
参考にさせていただきます。
859デフォルトの名無しさん:2007/08/10(金) 07:22:22
昨日始めたような初心者です

とりあえずC++に触ってみようと思い1番簡単なプログラムをコンパイルしようとしたのですが
うまくいきません。どうすればいいのでしょうか?

Visual C++ 2005 Exp

#include <iostream>
using namespace std ;

int main()

{
cout << "Hellow World \n;

return 0;
}

あほらしい質問かもしれませんがよろしくお願いします
860デフォルトの名無しさん:2007/08/10(金) 07:24:44
後ろの"抜けてる
えらメッセージでないの?
861デフォルトの名無しさん:2007/08/10(金) 07:26:18
あ、忘れてました。コンパイルしてるのではちゃんとついてます
862デフォルトの名無しさん:2007/08/10(金) 07:30:49
プロジェクトの設定が間違っているんじゃないの?
それともコンパイルできたけどプログラムが一瞬で終了するとか?
863デフォルトの名無しさん:2007/08/10(金) 07:39:06
Win32コンソールアプリケーションで作製しています
プロジェクトの設定は初期のままで弄ってないです

出るエラーは

プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。
'#include "stdafx.h"' をソースに追加しましたか?

でした
864デフォルトの名無しさん:2007/08/10(金) 07:42:00
初めからそう書けばいいのに。
プロジェクトの設定でプリコンパイルヘッダを使用しないにするか、
言われた通り#include "stdafx.h" をソースに追加すればいい。
865デフォルトの名無しさん:2007/08/10(金) 07:48:07
>>864
ありがとうございます。コンパイルできました!

>>862で言われてるようにプログラムが一瞬で終了しないようにするにはどうすればいいですか?

あ〜質問がgdgdだ…次回から気をつけます…
866デフォルトの名無しさん:2007/08/10(金) 07:50:29
コマンドプロンプトから実行する
867デフォルトの名無しさん:2007/08/10(金) 08:05:14
度々ありがとうございます
頑張ってみます
868デフォルトの名無しさん:2007/08/10(金) 22:26:49
>LINK : warning LNK4067: エントリ ポイントがあいまいです。'mainCRTStartup' が選択されます。
この警告がほぼいつも出るのですが、なにか悪いのでしょうか?
デバッグするときは、特に問題なく動くのですが……。
869デフォルトの名無しさん:2007/08/11(土) 00:30:58
質問させていただきます.

http://www.ne.jp/asahi/nagoya/ahomaro/builder/cpb-061.html
にある「プロジェクトWavePlay」のサンプルプログラムを落として
Visual Studioでコンパイルしようとしたのですが,

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

というエラーが出てしまいコンパイルできません.
一応Win32コンソールアプリケーションとして新規プロジェクトを作ってみたのですが
うまくいきません...

どなたかご教授いただけませんでしょうか?
870デフォルトの名無しさん:2007/08/11(土) 00:44:36
vcl.hは>>869のPC内にあるのかな?
あるのなら、プロジェクトのプロパティの中の
「追加のインクルードディレクトリ」にそこのパスを入れればOKなはず。

ただ
http://www.ne.jp/asahi/nagoya/ahomaro/builder/のタイトルが
「C++Builderのお部屋」になってるのが気になるんですが・・・
871デフォルトの名無しさん:2007/08/11(土) 11:04:42
>>869
どう見てもC++Builder専用のソースです。
ありがとうございました。

ちなみにC++Builderを知ってしまうと、その快適さ故に
以後のVC++の扱いが苦痛になるという恐ろしいシロモノです。
VC++を長く使って行きたいなら、近づかない方が身のためです。
注意しましょう。
872デフォルトの名無しさん:2007/08/11(土) 16:17:11
ソースの編集をする画面上で、コピー&ペーストが使えなくなってしまいました。
又、Backspaceキーもその行の文字しか消すことができず、何だか
操作がおかしくなってしまいました。何か間違ってキーを押してしまった
のだと思うのですが、わかる方いませんか?
ちなみにVisual C++上以外では通常通りに操作が出来ています。
873デフォルトの名無しさん:2007/08/11(土) 16:24:04
喜んで再インスコ
874デフォルトの名無しさん:2007/08/11(土) 18:24:19
キーバインドをemacs風とかにした、とか?
875872:2007/08/11(土) 18:30:06
するわけないじゃんw emacsなんて・・・ダサッ
876デフォルトの名無しさん:2007/08/11(土) 20:00:38
おいしいです
877デフォルトの名無しさん:2007/08/13(月) 04:09:24
>>871
C++Builderってそんなにいいのけ。ちょっと検討してみっぺ。
878デフォルトの名無しさん:2007/08/13(月) 04:18:41
      |
      |
      |
      |              /  ̄   ̄ \
     (=)           /、          ヽ
     J            |・ |―-、       |
                   q -´ 二 ヽ      |
                 ノ_ ー  |     |
                 \. ̄`  |      /
                   O===== |
                  /          |
                   /    /      |
879デフォルトの名無しさん:2007/08/13(月) 10:19:29
Visual Studioの自動変数ウィンドウってフォントを指定できるのでしょうか?
いつのまにか超巨大なフォントになってしまって元に戻したいのですけど。
880デフォルトの名無しさん:2007/08/13(月) 10:51:20
>>879
なんでそうなったのかは知らんが、指定はできるよ
ツールのオプションの環境のフォントおよび色で、設定の表示を自動変数ウィンドウにしてみ
881879:2007/08/13(月) 11:41:44
「設定の表示」のリストボックスに「自動変数ウィンドウ」のような項目はなかったのですが、
片っ端から選んでは「規定値を使用」を連打していったら直りました…。
882デフォルトの名無しさん:2007/08/13(月) 18:59:58

String^ a = "aaa\r\nbbb\r\nccc";
//Splitを使って文字列Stringの配列に
// "aaa", "bbb", "ccc"とさせるにはどうしたらよいのでしょうか?

VC++ 2005を使っています。
883デフォルトの名無しさん:2007/08/13(月) 19:02:11
>>882
それは最早C++とは言えなくなってしまった化け物だ。.Netスレへ逝け。
884デフォルトの名無しさん:2007/08/13(月) 22:20:28
こんばんわ。熟練のC++プログラマのみなさまに質問です。組み込み系の開発をしていまして、だいぶ詰まっているので教えてください。
java->C++へのコンバートで、文字列をsplitするようなメソッドを作っているのですが、
目的通りに動いてくれません。
class Stringがあったとして
String** A::split( const char* c_str, int c_str_len, char jud, int& ret_str_len )
こんな感じでポインタポインタを返そうとしています。
1度目はちゃんと動いてくれるのですが、2回目で失敗します。
このメソッド内でしているのは、細かい部分を除いてだいたいこんな感じです。
char* cpybuff = (char*)MALLOC( c_str_len + 1 );
String** pplist = new String*[ ret_str_len ]; // 必要分だけ確保します
pplist[array] = new String( c_str ); // こいつはバッファのコピーを持ちます
FREE( cpybuff );
return pplist;
呼び出し側では、
void A::main()
{
char c_line[] = { "1,2,3,4,5,6,7,8,9," };
int lenA = 0;
int lenB = 0;
str_listA = split( c_line, STRLEN( c_line ), ',', lenA );
str_listB = split( c_line, STRLEN( c_line ), ',', lenB );
}
こんなイメージです。
ポインタポインタのとらえ方が間違ってるのでしょうか?
885デフォルトの名無しさん:2007/08/13(月) 22:30:35
それをなぜ「Visual C++」のスレで質問するかな
886デフォルトの名無しさん:2007/08/13(月) 22:31:34
C++のスレにも質問してるから
887デフォルトの名無しさん:2007/08/13(月) 22:35:21
multi kayo
888884:2007/08/13(月) 22:43:22
マルチじゃないです…。
いまいちどこで質問していいか迷ったもので。。。vcでとりあえずはプログラムしてるので、アリかなと思ったんですが。
すいません。
889884:2007/08/13(月) 22:49:32
目的としてはjavaでString[] split()みたいなメソッドの戻り値を
c++風に
String** array split();
みたいにしてみました。
*str[1]->equals()
ってな感じで使いたいけどうまくいかんのです。お助けを…
890デフォルトの名無しさん:2007/08/13(月) 22:52:31
本当に「C++風に」やるんなら
std::vector<std::string> split(const std::string &s)
みたいになるだろうな

Javaの移植ってことで手抜きをするために何でもポインタに
しているのだろうけれど、GCでも使ってるの?
891884:2007/08/13(月) 23:02:07
ちなみにテンプレートと標準関数は使えないのです。。。
892デフォルトの名無しさん:2007/08/13(月) 23:24:16
>>891
組込みだから?
malloc()/free()ではなく、MALLOC()やFREE()を用いているね。
そのわりに、placement newではなく普通のnewを使っているようだけれども。

それと、それだとイマイチ関数の仕様がわからんな。
>>884のmain()の例で言うと、
split()の2度の呼び出しの後に、str_listA, str_listB, lenA, lenB
の中身はどうなって欲しいわけ?
893デフォルトの名無しさん:2007/08/13(月) 23:27:36
Embedded C++か?
それなら、素直に文字列配列クラスを一つでっち上げた方がいいな。
894デフォルトの名無しさん:2007/08/13(月) 23:32:30
>>884
本当に1回目は動作するっていうんなら、
引用部分以外のところで領域破壊でもしてるんじゃない?
c_lineの領域自体を更新したり、c_line内のポインタをStringに保存してたりとか。
895デフォルトの名無しさん:2007/08/13(月) 23:37:31
「Javaの移植」なら、全部Objectから継承させて、operator newで
専用のアロケータでも使わせるのかな
テンプレート使えないってことでGenericsは無しで、
Object*を保持するArrayList風のクラスを作ればいいかと

ゴミ掃除をどうするつもりか知らないがw
896デフォルトの名無しさん:2007/08/13(月) 23:56:39
>String** pplist = new String*[ ret_str_len ]; // 必要分だけ確保します
ここのret_str_lenの計算が違うとか
というか、これは意味的にはsplitした文字列の数と推測すると、名前がスゴイな。

>pplist[array] = new String( c_str ); // こいつはバッファのコピーを持ちます
ここでc_strという引数文字列全体を生成しているのはなぜだとか

破壊にミスってるのでは、とか。

まあ、それだけではアレだね
897デフォルトの名無しさん:2007/08/14(火) 00:20:23
よくわからんが、こんな感じか
String **split(const char *s, size_t len, char delim, size_t &arraysize)
{
    arraysize = 0;
    for (size_t i = 0; i < len; ++i)
        if (s[i] == delim)
            ++arraysize;
    String **vec = new String*[++arraysize];
    const char *p = s, *q;
    int n = 0;
    while (q = reinterpret_cast<const char*>(std::memchr(p, delim, len))) {
        vec[n++] = new String(p, q - p);
        len -= (q - p + 1);
        p = q + 1;
    }
    vec[n] = new String(p, len);
    return vec;
}

なお、ここではString に String(const char *, size_t) なコンストラクタが
あることを仮定しているが、無い場合は適当に。
std::memchr()が使えない場合も、適当に。
メモリの解放については知らね。
898デフォルトの名無しさん:2007/08/14(火) 01:50:49
質問です。
VCのツールボックスみたいなコントロールバーというかダイアログバー(↓)みたいな
ものは作れるのでしょうか?
もし作れるのなら、せめてコントロール名が知りたいです。

ttp://www.prof-uis.com/FeatureTour.aspx?view=tour_toolbox_window

環境はVC2003 です。

899デフォルトの名無しさん:2007/08/14(火) 21:08:52
質問です。

VC2003でVISTA用アイコン(*.ico:256*256の特大イメージ付き)を
リンクさせてビルドしたのですが、
VISTA上で、特大アイコンが表示されません。

これってVC2003をつかっているからなのでしょうか?
VC2005なら大丈夫なんでしょうか…(困)
900デフォルトの名無しさん:2007/08/14(火) 21:36:35
PNG
901デフォルトの名無しさん:2007/08/15(水) 23:47:30
メモリ開放のタイミングについて質問です。
使用環境はVC++ 2005 WinXPHomeを使っています。

下記のようなテストクラスを作成し、

class CTest
{
public:
CTest()
{
m_pInt = new int;
*m_pInt = 10;
}
~CTest()
{
delete m_pInt;
}

int* GetInt() {return m_pInt;}

private:
int* m_pInt;
};

// 続く
902デフォルトの名無しさん:2007/08/15(水) 23:49:08






















// 終了
903デフォルトの名無しさん:2007/08/15(水) 23:49:21
上のクラスを、下記のように使ってみました。

void CSample1Dlg::OnOK()
{
int* pTemp = NULL;
{
CTest test;
pTemp = test.GetInt();
}

TRACE(_T("Num = %d\n"), *pTemp);
}


んで、このような使用法をした場合、TRACEでは無効なポインタを参照していると思うのですが、
なぜだか、この"Num = -17891602"という結果が出力されます。
もちろん、値自体は無効なのがはっきり分かるのですが、実際にはアクセスできないメモリに行ってると思うので、
TRACEで落ちてほしいんです。どうやったら、TRACEで落ちるように(間違いに気づけるように)なるのでしょうか。

よろしくお願いします。
904デフォルトの名無しさん:2007/08/15(水) 23:50:27
            ,ヘ           ,:ヘ.
               /: : \       /::  !
            /::::.....  \--―‐'.:.:::...  !       プギャーーーーーーーッ
           /::::::       .:::::::::::::     ',
          ,'::::     /\ヽ_ヽv /:  /\i
           .i::::         √___丶     !
           !:::.          / / tーーー|ヽ   !
        |::::..         ..: |    |ヽ     l             _,-,.、
           i;::::..          | |⊂ニヽ| |     !       i´ヽ    い {,-ゝ.
          ':;::::...      | |  |:::T::::| !  /        l ,人 __,!...!_}ゝ l
         _  \:::::....      ト--^^^^^┤ /         ヽ. '´    ` /
     /   `ヽ `ゝ:::::........      ....../_             /    ァ-- '
     i::.....    ;\!..-ー 、 /⌒ヽ      、\      /    .:/
     ` '''''ー- 、::::/ ,.. .  `/:::   〉‐ 、   \ \   /     ..::ノ
           .ソ'    : /::.   /::  〉     \\,/      .:/
         /i:.       :,'::.   /::  ./ヽ       \!     ..:;'
         / |::       |ヽ.:..    :'::/       \    .::/
          /  !::.    i::.:.:`:‐"ー、_,ノ          \:::/
       / ,/ヾ;:....   /:.:.:.:.:/:::.:..             ヽ、
         | :i   `ー::':.:.::.:.:./\:::::.:.:.               ':;
905デフォルトの名無しさん:2007/08/15(水) 23:58:07
TRACE は別に不正なポインタで落とすようなマクロじゃないぞ。とりあえず。

でまぁ、デストラクタで開放した後 ポインタへNULL 代入しておけば
ぬるぽコールで落ちるのでは無かろうか。
906デフォルトの名無しさん:2007/08/16(木) 00:47:24
>>903
無効なポインタではないためではないかと

malloc や new では効率化のため、C/C++言語のランタイムがあらかじめ大きめに取得した
領域を切り出して使い、解放するときもC/C++ランタイムのバッファに戻すだけなので、
自分ではメモリを解放したつもりになっていても、OSからは無効領域に見えない。

このようなメモリの有効性確認にはC/C++ランタイムのデバッグ用サービス関数を使う。

_CrtIsValidHeapPointer あたりでググってみれ。
907デフォルトの名無しさん:2007/08/16(木) 00:58:02
>>906
ありがとうございます。

void CSample1Dlg::OnOK()
{
int* pTemp = NULL;
{
CTest test;
pTemp = test.GetInt();
}

_CrtIsValidHeapPointer(pTemp);
TRACE(_T("Num = %d\n"), *pTemp);
}
とやってみたところ、うまい事_CrtIsValidHeapPointerで落ちてくれました。
908デフォルトの名無しさん:2007/08/16(木) 01:21:00
>>907
ちょっとまて

_CrtIsValidHeapPointer はチェックするだけなので、
無効なポインタであっても FALSE を返すだけ。

通常は ASSERT マクロと一緒に使い、落とすのは ASSERT の役目。

もう一度、仕様と動作を確認した方がいいぞ。
ググって使用例とか探してみろ。
909デフォルトの名無しさん:2007/08/16(木) 01:21:15
>>906
効率化という点では、現在はOSに全てを任せるような実装になっている罠。
まあ、デバッグ時は別処理になるので、デバッグ用関数を使う点では同意。
910デフォルトの名無しさん:2007/08/16(木) 01:34:37
>>909
そうなの?

でも考えてみれば、HeapAlloc なら例としてあげた動作そのものだし、
OS側で頑張って最適化してればそれを特にラップする意味もないか。
指摘してくれてありがとう。
911デフォルトの名無しさん:2007/08/16(木) 05:19:51
何言ってんのかさっぱりわかんないや (ノ_・。)
912デフォルトの名無しさん:2007/08/16(木) 05:24:08
(ノ_・。) やいなんかわりぱっさかのんてっ言何
913デフォルトの名無しさん:2007/08/16(木) 11:13:27
(。・_ヽ)
914デフォルトの名無しさん:2007/08/16(木) 11:23:10
ぐっじょぶ( <_,` )b
915デフォルトの名無しさん:2007/08/16(木) 12:05:52
>>908
あ、すいません。ASSERTは単に書き忘れただけです。そこら辺は分かってると思うので……
916デフォルトの名無しさん:2007/08/17(金) 16:19:03
レスするとき、コピペしないでいちいち手打ちしてるの?
917デフォルトの名無しさん:2007/08/17(金) 16:39:46
ブラウザでもdabbrev使いたひ
918デフォルトの名無しさん:2007/08/17(金) 16:41:20
だせ
919デフォルトの名無しさん:2007/08/18(土) 16:52:07
すいません、配列を使ったキューの作り方を教えてください。キューのデータ数を
保持する変数も必要でしょうか

void QIn(char c) {
Que[Q++] = c;
if (Q > QSize -1) Q = 0;
}

char QOut(void) {
char c;
c = Que[P++];
if (P >= Q) P = Q;
else if (Q > QSize-1) Q = 0;
return c;
}
920デフォルトの名無しさん:2007/08/19(日) 08:22:41
Express Editionってプロジェクト内の複数のソースファイルの変数や関数の宣言とか使用箇所にジャンプとかできますか?
921デフォルトの名無しさん:2007/08/19(日) 10:26:22
できるよ。

つーか、ダウンロードして試せばいいじゃん。
922デフォルトの名無しさん:2007/08/19(日) 19:11:56
CPUやGPU、HDDなどの温度を取得したいんですが、
どうすればいいんでしょうか?
923デフォルトの名無しさん:2007/08/19(日) 19:13:28
勉強すればいいよ
924デフォルトの名無しさん:2007/08/19(日) 19:17:50
何を?
925デフォルトの名無しさん:2007/08/19(日) 23:02:57
CPUやGPU、HDDなどの温度の取得の仕方
926デフォルトの名無しさん:2007/08/19(日) 23:12:27
            ∩_ 
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
927デフォルトの名無しさん:2007/08/19(日) 23:14:07
             ∩_ 
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にクマ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
928デフォルトの名無しさん:2007/08/20(月) 08:49:20
おまえもな
929デフォルトの名無しさん:2007/08/20(月) 09:33:45
モナー
930デフォルトの名無しさん:2007/08/20(月) 13:28:20
ぬるぽ
931デフォルトの名無しさん:2007/08/20(月) 20:54:01
932デフォルトの名無しさん:2007/08/21(火) 01:23:02
>>922
WMIのMSAcpi_ThermalZoneTemperatureまたはWin32_TemperatureProbe
ただし、BIOSにはかなり依存するみたい
933デフォルトの名無しさん:2007/08/24(金) 19:15:41
猫でもわかるの時計の基礎をリスト通り打ち込んで実行するとエスケープシーケンスが
文字通り表示されてしまうのですがどうしたらいいですか?VS6でコンソールアプリケーション
にしています。

934デフォルトの名無しさん:2007/08/24(金) 19:16:51
ANSI.SYSをだな、、、、
ってOS何よ
935デフォルトの名無しさん:2007/08/24(金) 19:27:28
XPですけどANSI.SYSをどうするんでしょう
936デフォルトの名無しさん:2007/08/24(金) 19:28:28
937デフォルトの名無しさん:2007/08/24(金) 19:58:58
>>935
諦めろ。
NT系で32ビットプログラムがエスケープシーケンスを使えないのは仕様。
もちろん代わりの方法はあるし、その方法は後のほうの章で出てくる。
938デフォルトの名無しさん:2007/08/24(金) 20:13:19
記事の通りやってみましたが効かず困ってましたが仕様と言うことでここはとばして
先に進もうと思います。
ありがとうございました。
939デフォルトの名無しさん:2007/08/24(金) 22:31:30
>>936
>1.DOSプログラムの場合 -> C:\SysemRoot\System32\CONFIG.NT , AUTOEXEC.NT
>2.Windowsプログラムは -> C:\SysemRoot\System32\CONFIG.WOW , AUTOEXEC.NT
>となります。
>ですから、DOSプログラムを処理する場合には、CONFIG.NT にはNECのPC9801と違って、
>ansi.sysを組み込んでやる必要があります。

あ?なにが、ですから、だよ。何を、ですから、だ?どこから、ですから、なんだよ。頭おかしーんじゃねーの?
940デフォルトの名無しさん:2007/08/24(金) 22:51:21
ブログにコメントをつけずにここに書くほうがよっぽどどうかしている。
941デフォルトの名無しさん:2007/08/25(土) 02:07:49
VC++2005 ExpressEditionを使ってます。

お馬鹿な質問かもしれませんが、exeファイルを作成するにはどうすればいいのでしょうか?

int main(int argc, char *argv[])

↑こんな形式で作成しているので、デバッグではなく
コマンドプロントから開く必要があるのですが、実行ファイルが作られなくて……orz
942デフォルトの名無しさん:2007/08/25(土) 02:10:39
F7
943デフォルトの名無しさん:2007/08/25(土) 02:17:24
自己解決しました。d
944デフォルトの名無しさん:2007/08/25(土) 02:18:06
死ね
945デフォルトの名無しさん:2007/08/30(木) 09:05:26
生きろ
946デフォルトの名無しさん:2007/08/31(金) 14:12:50
犯れ
947デフォルトの名無しさん:2007/08/31(金) 14:38:33
スレ埋めにしては、早すぎだし酷い
948デフォルトの名無しさん:2007/08/31(金) 15:41:53
しゃぶれよ
949デフォルトの名無しさん:2007/09/03(月) 02:29:20
ダイアログボックスをxボタンクリックで閉じるにはどうすればいいですか?
WM_DESTROYでは釣れないようなのですが。
950デフォルトの名無しさん:2007/09/03(月) 03:53:55
普通に
951デフォルトの名無しさん:2007/09/03(月) 08:14:45
>>949
×ボタンクリックで閉じるには、×ボタン押せばいいんじゃない?
質問の仕方を変えてもう一度どうぞ
952デフォルトの名無しさん:2007/09/03(月) 08:23:26
>>949
アホが意味不明な言葉使うな
モーダルならEndDialog
953デフォルトの名無しさん:2007/09/03(月) 08:43:56
なんというかダイアログボックスだけのプログラムなんですけどXボタンを押すと
どんなメッセージが来るのかわからないとEndDialog をどこに書けばいいかわからないです。
954デフォルトの名無しさん:2007/09/03(月) 08:52:49
WM_COMMAND BN_CLICKED IDCANCEL

Windowing - Dialog Boxes - Dialog Boxes Overviews
- Dialog Box Programming Considerations
を一通り読んでおくことを勧める
955デフォルトの名無しさん:2007/09/03(月) 09:00:58
>>953
正解は954で良いんだけど
どういうメッセージが発生しているのかを調べるにはSpy++という開発ツールがあるから
使えるようになっておいて損は無いよ
956デフォルトの名無しさん:2007/09/03(月) 10:03:33
IDCANCELだとESCキーと区別できないからWM_CLOSEのがいい
957デフォルトの名無しさん:2007/09/03(月) 12:12:09
勉強になります。ありがとうございます。
958デフォルトの名無しさん:2007/09/03(月) 22:01:29
ソースが長くなったのでソースを分割したいのですが
ヘッダーファイル一つに関数をたくさん定義して
ソースファイルいっぱ作って分割するとエラーがたくさん出ます。
ソース分割の仕方が詳しく載っているサイトってあるでしょうか。
検索してもC言語のソース分割しか無いもので…。
959デフォルトの名無しさん:2007/09/03(月) 23:51:24
エラーの内容ぐらいちゃんと書こうな
960デフォルトの名無しさん:2007/09/04(火) 07:45:00
>>958
お前には無理だから諦めた方がいいよ
961デフォルトの名無しさん:2007/09/04(火) 09:15:51
958です。
ソースを分割したら

error C2011: '_Game' : 'class' 型の再定義
'_Game' の宣言を確認してください

と最初のエラーに出ます。
その下にも100以上エラーが出ます。
その殆どが「定義されていない識別子です」と言う感じです。
環境はOSはXPでVC++2005の無償版です。
誰か分かる方いましたら教えて下さい。
よろしくお願いします。
962デフォルトの名無しさん:2007/09/04(火) 10:21:15
これはひどい
963デフォルトの名無しさん:2007/09/04(火) 10:51:38
>>961
再定義してないかどうか確認してください
定義の記述が間違って無いか確認してください
964デフォルトの名無しさん:2007/09/04(火) 20:26:36
>>961
ヘッダ用のファイルを、次のようになおしましょう。

#ifndef UNKO_BAKA
class _Game
{
〜〜〜〜
};
#else
#define UNKO_BAKA
#endif
965デフォルトの名無しさん:2007/09/04(火) 20:33:25
964がウンコバカな件w
966デフォルトの名無しさん:2007/09/04(火) 22:31:02
最初にアンダーバーを付ける識別子は将来予約語として使う可能性があるから
普通はつけないんだぜ。
だからUNKO_BAKAは良い例なんだぜ。
”_Game”という識別子はお勧めしないんだぜ。
967デフォルトの名無しさん:2007/09/04(火) 23:38:24
将来というよりも、現時点で既に
コンパイラ・ライブラリその他処理系がどしどし使っているし、
むしろそのために予約されているのだし、
お勧めしないではなく、使ってはならない。
少なくともC/C++の規格ではそうなっている。

でもWin32APIのヘッダでも無視しているし、
VC++使っていると無視せざるを得ない状況も度々訪れる罠。
968デフォルトの名無しさん:2007/09/04(火) 23:49:34
せめて

#ifndef UNKO_BAKA
#define UNKO_BAKA
class _Game
{
〜〜〜〜
};
#endif

じゃないのか
多重インクルードガードになってねーよ
969964:2007/09/05(水) 05:01:01
そうでした。
ありがとうございました。
970デフォルトの名無しさん:2007/09/05(水) 14:37:14
ところで、958の問題は解決したのだろうか?
971デフォルトの名無しさん:2007/09/05(水) 14:40:57
どうでもいい
972デフォルトの名無しさん:2007/09/05(水) 15:20:15
>>971
どうでもいいのは確かだが、この数レスって結局958が発端だろ
973デフォルトの名無しさん:2007/09/05(水) 15:24:06
たしかにそうだけど、、、やっぱりどうでもいいや
974デフォルトの名無しさん:2007/09/05(水) 18:09:24
958本人の反応がない限りどうでもいい。
975デフォルトの名無しさん:2007/09/05(水) 19:19:45
例え反応があったとしてもどうでもいい
976デフォルトの名無しさん:2007/09/06(木) 00:36:01
そんな事より聞いてくれよ
蚊に刺されてかゆいんだが
977デフォルトの名無しさん:2007/09/06(木) 01:13:38
マジで?ヤバくない?
978デフォルトの名無しさん:2007/09/06(木) 01:24:29
まずいね、蚊に刺されて痒いってのは。
979デフォルトの名無しさん:2007/09/06(木) 01:25:39
え、そうなんですか?どうしよう・・・
980デフォルトの名無しさん:2007/09/06(木) 10:00:29
かくか、薬を塗るか、我慢するか、どれかを選ぶしかないかも
981デフォルトの名無しさん:2007/09/08(土) 12:52:16
アプリケーションの一番左上にMFCアイコンとタイトル文字が表示されますが
タイトルを変えたくて文字列リソース(String Table)のIDR_MAINFRAMEの1つめを変えました
「ここの文字列\n〜\n〜\n〜\n〜\n〜\n」

タイトルは一応変わったのですが
アイコンとタイトルの横に「-無題」や他のマシンでは「-Untitled」がついてしまいます
この横についてくる無題等をはずしたいのですが
どうすればいいのでしょうか?
982デフォルトの名無しさん:2007/09/08(土) 13:12:38
>>981
FWS_PREFIXTITLE、FWS_ADDTOTITLE でググれ。
983デフォルトの名無しさん:2007/09/08(土) 13:14:33
>>970
あれだ、無償版ってのがいけなかったんだろうw
984デフォルトの名無しさん:2007/09/09(日) 16:27:30
デバッグ用の最適化を全く行っていないコードの
一部分だけ最適化を行うことは可能でしょうか。
985デフォルトの名無しさん:2007/09/09(日) 17:11:18
>>984
#pragma optimize で
986984:2007/09/09(日) 17:39:47
>>985
optimizeでは最適化を行ったコードの一部を無効化することはできるのですが
逆はできないようです。
(アセンブリを見たり、時間を計測して確認しました)
987デフォルトの名無しさん:2007/09/09(日) 17:46:40
一部分だけ別ソースにすりゃいい
988デフォルトの名無しさん:2007/09/09(日) 17:48:35
インラインアセンブラで最適化したコードを埋め込む
989984:2007/09/09(日) 18:36:47
>>987
別ソースってどういうこと?って思ってたら
ソースファイル単位でコンパイルオプションの設定ができるんですね。
今回最適化したい部分もちょうどソースファイル単位なので
この方法で行こうと思います。
ありがとうございました。

>>988
多少手間がかかりそうなのでそれは避けたいところです。
990デフォルトの名無しさん:2007/09/09(日) 20:33:40
↓次スレよろ
991デフォルトの名無しさん:2007/09/09(日) 21:53:49
|      〃∩ ∧__∧
|      ⊂⌒ ( ・ω・) 
|        `ヽ_つ  ,.ヘ_ヘ
|            (   )
↓             u,__っ)
992デフォルトの名無しさん:2007/09/09(日) 21:56:35
↓   ∩___∩
↓   | ノ      ヽ/⌒)  あばばばばばばばばばば
↓  /⌒) (゚)   (゚) | .|
↓ / /   ( _●_)  ミ/   ∩―−、
↓.(  ヽ  |∪|  /    / (゚) 、_ `ヽ
↓ \    ヽノ /      /  ( ●  (゚) |つ      おちんちんびろ〜〜〜ん
↓  /      /      |  (入__,,ノ   ミ       あばあばばばば
↓ |       /       、 (_/    ノ
↓ |  /\ \       \___ ノ゙ ─――、
↓ | /    )  )       /\       _  ヽ
↓ ∪    (  \    (⌒0 /\     ヽ (_ノ
↓       \,,_)    `ヽノ   /  、   )O
↓                    (  </ /
↓                     > ( 〈
↓                    (,,__(,,_ノ
993sage:2007/09/10(月) 10:01:59
VC++6.0でビルドした時に、ビープ音がなるのを防ぎたいと思っているのですが、
どの項目を参照してよいのかが分からずに苦戦しております
唐突で申し訳ありませんが、ご教授願います。
994デフォルトの名無しさん:2007/09/10(月) 11:01:59
>>993
あまり意識したことなかったけど、確認したら確かに音鳴ってた。
ビープ音とは呼ばないと思うけど。
で、コントロールパネルからサウンドトオーディオのプロパティを開いて、
その中のサウンドの関連付けで制御できるみたい。
Microsoft Developer みたいなカテゴリがあるので、その中。

問題は、初期値だと音が割り当てられてないように見えるのに
音が鳴っていること。
環境の問題かもしれないけど、一旦、別の音を割り当ててから解除
したら鳴らなくなったよ。
995993:2007/09/10(月) 11:19:27
レスありがとうございます。
何とかやってみます。
996デフォルトの名無しさん:2007/09/10(月) 11:20:36
その程度で何とかって・・・
997デフォルトの名無しさん:2007/09/10(月) 12:22:58
次スレ

★初心者にVisual C++を教えるスレ★ Part27
http://pc11.2ch.net/test/read.cgi/tech/1189394427/l50#tag3
998デフォルトの名無しさん:2007/09/10(月) 17:10:10
うめ
999デフォルトの名無しさん:2007/09/10(月) 17:22:18
1000デフォルトの名無しさん:2007/09/10(月) 17:23:31
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。