★初心者にVisual C++ ..
[2ch|▼Menu]
2:デフォルトの名無しさん
07/04/12 23:28:11
Part25 スレリンク(tech板)
Part24 スレリンク(tech板)
Part23 スレリンク(tech板)
Part22 スレリンク(tech板)
Part21 スレリンク(tech板)
Part20 スレリンク(tech板)
Part19 スレリンク(tech板)
Part18 スレリンク(tech板)
Part17 スレリンク(tech板)
Part16 スレリンク(tech板)
Part15 スレリンク(tech板)
Part14 スレリンク(tech板)
Part13 スレリンク(tech板)
Part12 スレリンク(tech板)
Part11 スレリンク(tech板)
Part10 スレリンク(tech板)
Part09 スレリンク(tech板)
Part08 URLリンク(pc5.2ch.net)
Part07 URLリンク(pc5.2ch.net)
Part06 URLリンク(pc5.2ch.net)
Part05 URLリンク(pc5.2ch.net)
Part04 URLリンク(pc5.2ch.net)
Part03 URLリンク(pc5.2ch.net)
Part02 URLリンク(pc3.2ch.net)
Part01 URLリンク(pc3.2ch.net)

3:デフォルトの名無しさん
07/04/12 23:29:27
【関連スレ】
■MFC相談室 mfc17d.dll■
スレリンク(tech板)l50
Win32API質問箱 Build48
スレリンク(tech板)l50
鬱だ氏のう DirectX (Part 16)
スレリンク(tech板)l50
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
スレリンク(tech板)l50
C++相談室 part55
スレリンク(tech板)l50
C/C++の宿題を片付けます 80代目
スレリンク(tech板)l50
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
スレリンク(tech板)l50

【関連サイト】
猫でもわかるプログラミング
URLリンク(www.kumei.ne.jp)
MSDN ライブラリ ※変更された
URLリンク(msdn.microsoft.com)
URLリンク(msdn2.microsoft.com) (2005のことはこっち)
Platform SDK Update ※変更された
URLリンク(www.microsoft.com)
Google
URLリンク(www.google.co.jp)

4:デフォルトの名無しさん
07/04/12 23:30:00
【このスレの前身 VisualC++相談室 過去スレ】
part 1 URLリンク(piza.2ch.net)
part 2 URLリンク(piza.2ch.net)
part 3 URLリンク(piza2.2ch.net)
part 4 URLリンク(pc.2ch.net)
part 5 URLリンク(pc.2ch.net)
part 6 URLリンク(pc.2ch.net)
part 7 URLリンク(pc.2ch.net)
part 8 URLリンク(pc.2ch.net)
part 9 URLリンク(pc5.2ch.net)

5:デフォルトの名無しさん
07/04/12 23:31:17
以上、前スレ997でした。

>>前スレ998-1000
ありがとうございました。

6:デフォルトの名無しさん
07/04/13 00:03:01
1乙

7:前987
07/04/13 01:54:08
関係ありそうなとこにはvolatileつけましたが一緒でした
変数の初期化はしてあると思うのですが
もう一度確かめてみることにします
CEventと変数では同期をとるのになにか違いがあるのですか?
大分前に同じと言われたような

8:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/13 09:58:53
>>7
> CEventと変数では同期をとるのになにか違いがあるのですか?
・同時に複数のスレッドから変数を変更する可能性
・リードする側がチェック直前/直後で変数が書き換わる可能性(それで動作が異なってしまう場合)
等、気をつける必要があると思。

11:デフォルトの名無しさん
07/04/13 12:07:46
VisualC++ 2005 Expressを使用しています。使用歴は1週間だけです。
UNIXのプログラムにWindowsのガワをつけたプログラムの作成をして配布しようと思っている
のですが、配布の段階でつまずいてしまいました。

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

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

経験が全くないため見当違いな部分が多く、検索も下手で要領を得ませんが、解決法をご存知の
方がいらっしゃったらお力を貸していただけないでしょうか。

12:デフォルトの名無しさん
07/04/13 12:20:26
Visual C++ 6.0を再インストールしようと思って、
一旦削除してもう一回インストールし直したら、
「プライマリ プラットフォームがありません。
ビルドシステムは使えません。セットアップがインストールしたアドオン プラットフォーム(.pkg)のロードに失敗した可能性があります。」
といわれ、エラーで落ちる。
何回インストールし直してもだめ。

教えてエロい人><

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

※例外処理でfinallyが無いのが納得できない……

14:デフォルトの名無しさん
07/04/13 16:35:17
>>11
たぶんそれはExpress Editionにない機能と思う

15:デフォルトの名無しさん
07/04/13 18:08:20
>>14
お返事ありがとうございます。
今日ずっと調べた所、VisualC++ではインストーラーは作成できないようですね。
VisualC#であればClickOnceを使ってインストーラーの作成ができたので、つらいですが
VisualC#でプログラムを書き直そうと思います。
予算があればStandard Editionを買いたい所ですが・・・

16:デフォルトの名無しさん
07/04/13 22:02:57
VisualStudio2005のスタンダード版ってMFCと静的リンクできますか?出来るなら買いたい。

17:デフォルトの名無しさん
07/04/13 22:19:35
>>16
OK

18:デフォルトの名無しさん
07/04/13 22:28:10
階層構造でtodoを記述できるような補助機能ってあります?

19:デフォルトの名無しさん
07/04/13 22:33:53
性的リンク

20:デフォルトの名無しさん
07/04/13 22:34:47
WindowsXP環境でVisualStudio2005・C++で単純なWin32アプリケーションを作成したのですが、
これをWindowsVistaで実行しようとすると、
「このアプリケーションのサイドバイサイド構成が正しくないため、アプリケーションを開始できませんでした」
というエラーが出て起動できません。
Vistaで動かすにはどうしたらいいでしょうか?

21:デフォルトの名無しさん
07/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;

22:21
07/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:デフォルトの名無しさん
07/04/15 00:30:22
>>21
実行してみたが、ウチの環境では問題なし。

24:21
07/04/15 02:38:05
わざわざ実行までして頂いてありがとうございます!!
問題なしですか、どうしよう…
そうするとコードではなくてうちの環境が悪い可能性がありそうですね。
………
ということで環境を疑う前提で再度ググりまくってみたところ、おかげさまで解決策が見つかりました!
ImeWatcherというソフトを起動していたのですが、そちらを終了させるとアクセス違反が発生しなくなりました。

その結論に至った流れとしては、こちらのページ URLリンク(forums.belution.com)
を参考に出力に知らないソフトが混じっていないか見てみたところ、
なぜか起動中のソフトの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:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/15 09:55:25
どんな警告が出るんだ?

27:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/15 10:09:51
>>27
移植性を考慮するなら、言語規約にあるfopen()を使うのが妥当。
MSの甘言に載せられて移植性を度外視するのなら、fopen()の派生版でもAPIでも使えば宜しい。

29:デフォルトの名無しさん
07/04/15 10:27:18
C/C++言語の初心者が使うには余計な機能

30:デフォルトの名無しさん
07/04/15 12:08:54
>Consider using fopen_s instead

31:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/04/15 12:31:43
MSG msg;
で、このmsgがぶつかる場合というのは
ウィンドウメッセージキュー
なのか
PostThreadMessageキュー
どっちかで、他がつかんでて、ぶつかってるんだろう。

33:デフォルトの名無しさん
07/04/15 15:33:16
Web API(Yahoo! API)をVisual C++で使いたいのですが、
Web APIを利用するためのクラスなどはありませんか?

34:デフォルトの名無しさん
07/04/15 16:04:41
>>30
レスサンキューです


35:デフォルトの名無しさん
07/04/15 16:23:54
>>33
スレ違い。

そして無視される>28、>29

36:デフォルトの名無しさん
07/04/15 16:39:48
>>25
C++のstd::ifstreamを使えばOk

>>28
ところがどっこい、あのセキュリティ強化のライブラリ関数はTR 24731として公開されており、
下手すると将来の標準Cに取り込まれる可能性すらある。現時点ではまだどうなるかわからないけどな。
ちなみにOpen Watcomのも実装しているようだ。

37:デフォルトの名無しさん
07/04/15 18:07:53
>>36
M$のはSafer Cと相違点が多すぎる。
警告通りに直したら後でひどい目にあうのは確実。

38:デフォルトの名無しさん
07/04/15 18:18:01
fopen_s なんか使ってるやついるんか?
winアプリならapi使うだろうし
学習用途なら標準Cライブラリだろうし

39:デフォルトの名無しさん
07/04/15 19:32:11
XP VS2002 MFC。
大文字と小文字を区別せずに文字列(char)を検索したいのですが、
速くて簡単な方法ありましたら教えて下さい。

40:デフォルトの名無しさん
07/04/15 19:44:58
元々は正社員だったのに取引先にフリーのほうが稼げるとか騙されて
結局派遣やってるバカがいるんだけどw
なんか派遣先といい関係、とか言ってたから思わず吹き出しちゃったよw
最近はマネージャーもやってるとか寝言言ってるし、派遣がまねぇじゃぁ?はあ!?w

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

派遣期間が長くならないうちに早く就職しろ、と忠告したら、ウッキー!って逆ギレw
バカで頑固だから何度言っても理解できない
騙されたとはいえ結局は自分で決めて派遣やってる癖に逆ギレしちゃってまぁ
人間として本当に恥ずかしい


41:デフォルトの名無しさん
07/04/15 20:23:48
>>39
stricmp()

42:39
07/04/15 21:36:55
>>41
レスありがとうございます。
先頭からstricmpで比較していって検索するモノが出来ました。

43:デフォルトの名無しさん
07/04/16 22:19:58
SDKで作ったサンプルプログラムですがアプリの動作で
ちょっとおかしなところがありまして質問します。

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

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

開発環境はVisual C++ 6.0 Pro
OSはXP Pro SP2

44:デフォルトの名無しさん
07/04/16 23:08:24
なんか難解な日本語だなw

下側のフレームに薄く表示されるって状態がいまいちわからんのだけど
言ってる各状態のスクリーンショットとか撮れん?


45:43
07/04/17 00:06:02
>>44
説明が下手で済みません。画面のスクリーンショットは自分のホームページに載せて
リンクしました。
以下がリンクです。

水平スクロールバーが下側のフレームに薄く表示されている画像。
URLリンク(www3.zero.ad.jp)

スクロールバーのサイズグリップがタイトルバーの×ボタンに重なっている画像。
URLリンク(www3.zero.ad.jp)

よろしくお願いします。

46:デフォルトの名無しさん
07/04/17 05:44:09
最小のサイズを決めておけば?

47:デフォルトの名無しさん
07/04/17 07:16:21
>>45
CreateWindowでウィンドウスタイルにWS_HSCROLLとWS_VSCROLLを指定してスクロールバーを出して
その時に一緒に表示されるサイズグリップの挙動ってことでいいんだよな?
VCが作る雛型にスタイル追加してやってみたけど、サイズ小さくしたら普通に消えていったけどなぁ
2000とXPの違いなんだろうか・・・

48:デフォルトの名無しさん
07/04/17 07:32:24
3つほど質問があります。

@C++はクラス外に関数を記述できますが、main()やWinMain()以外を
 クラス外に記述する意味はあるのでしょうか?
 単にCからの引き継ぎ、慣習ということであれば
 なるべく全ての処理をクラス内に記述したいのですが。
AVisual C++には、JavaのLoggerクラスの様な標準ログ出力クラスは用意されていないのでしょうか。
 見あたりませんでした。clogをリダイレクトする処理を実装するしかないでしょうか。
BGUIアプリを、コンソール出力無しに作成する場合は、
 WinMain()関数を使用するしかないのでしょうか?(Google検索だとそのように記述するサイトがヒット)
 機種依存するコードはなるべく外出し、極小化したいのですが、
 WinMain()からmain()を呼ぶように記述するしかないでしょうか。

49:デフォルトの名無しさん
07/04/17 08:16:53
1. まあみんながみんなOOPというわけではないからね。
Cみたいな手続き型プログラミングだけでなく、
STLアルゴリズムみたいにジェネリックプログラミングでは非メンバ関数も必要に応じて使う。
何にせよ、OOPのときでも静的メンバだけのクラスなんて作るなんて馬鹿げていると俺は思うけどね。

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

3. プロジェクトのプロパティ→リンカで
•システム→サブシステムにWINDOWS(コンソールを使わない指定)、
•詳細→エントリポイントにmainCRTStartup(main用のスタートアップルーチン)
を指定すると、mainから始まる非コンソールアプリケーションが作れるはず。
あまり一般的な手法ではないかもしれないが。

50:デフォルトの名無しさん
07/04/17 08:59:53
>>48
GUIアプリって時点で十分環境依存だからWinMainを排除したところで意味はないぞ。

51:デフォルトの名無しさん
07/04/17 09:07:46
>適当なファイルをofstreamで開けば十分だと思う。ちなみにVC++のclogは、バッファリング付の標準エラー出力。
(cin, )cout, cerrの他に用意されてるの?
#尤も、cerrはバッファリングしないが。

52:デフォルトの名無しさん
07/04/17 12:34:20
質問があります。

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

レジストリの
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR
のStartを3から4に書き換えた(USB大容量記憶デバイス禁止)状態で
USBポートに挿入されているリムーバブルディスクの確認(空き容量と場所(E:などの割り当てられる文字))を行う方法が
存在するのなら、ご教示ください。

53:デフォルトの名無しさん
07/04/17 20:27:35
>>48
1:C++は不完全OOPです。

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

3:Windowsの標準的なGUIアプリにおいてはそもそもコンソールなんて使ってません
  ていうか規定のエントリポイントを排除しないでください

54:デフォルトの名無しさん
07/04/17 20:32:30
>>51
そうだよ
無論標準C++に含まれている

55:48
07/04/17 20:34:52
>>49
ご丁寧にありがとうございます。
1につていは、Javaの癖なんですよね。C++では非メンバ関数が当たり前ということであれば
郷に従う必要がありそうです。
2については、ログレベル(外部ファイルで、出力する下限レベルを設定)を
実現したいので、やはり個別実装しないと駄目なんでしょうね。
3については、なるべく一般的なコーディングを心がけて移植性を高めたいと思うので、
一般的でないなら止めた方が良さそうですね。

>>50
そのまま他でコンパイルできることまでは望みませんが、
このクラスは機種依存、と明確にして移植性を高めるのが目的です。
確かに、WinMainでそれを考える意味はあまりないのかもしれませんね。
イベントドリブンでなければともかく。

56:48
07/04/17 20:39:34
あ、返事中に新たな回答が。

>>53
1、そう意識していくしかないのでしょうね。
もっとも、自分で制約をかければほぼ完全にOOP的に
実装できそうだと思ってはいますが(それが良いかはともかく)
2、>>55で書いてしまったのですが、ログレベルを実現したいのです。
個別実装したいと思います。
3、わかりました。WinMainを使って素直に実装しようと思います。

57:デフォルトの名無しさん
07/04/17 21:00:15
Windows用のプログラムを作れる環境では、
どんなコンパイラでもWinMainが使えると思って平気。
その程度の移植性ならある。

58:デフォルトの名無しさん
07/04/17 22:16:19
ていうかWinMainが使えなきゃWindows用のGUIプログラムなんて作れなくね?


59:デフォルトの名無しさん
07/04/17 22:54:30
>>58
>>49
インスタンスハンドルはGetModuleHandle(0)で、
WinMainの最後の引数の代わりはSW_SHOWDEFAULTで代用すればいい。
(どうしても拘るのならGetStartupInfoと言う手もあるが)

60:デフォルトの名無しさん
07/04/18 07:37:19
そこまでする意味が理解できない件

61:デフォルトの名無しさん
07/04/18 07:58:28
環境依存コードはどうやったって出てくるだろうしね。
自分は環境依存コードにWinMain書いておいて、そこからmainを呼ぶようにしているが、
それは48氏が初めに書いているね。(それでいいと思うけど)

62:デフォルトの名無しさん
07/04/18 16:23:15
URLリンク(freepg.fc2web.com)
以前のパソコンで上のサイトよりVisual C++ 2005 Express Editionを
インストールできたのですが新しいパソコンでインストールできません(VISTA)

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

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

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

3日間悩んでいます>_<;よい意見などあれば宜しくお願い致します。<(_ _)>

63:デフォルトの名無しさん
07/04/19 00:34:31
Vistaを捨てるのはどうだろう。

64:デフォルトの名無しさん
07/04/19 10:52:50
MSに訊いてみるのはどうだろう。

65:デフォルトの名無しさん
07/04/23 22:44:35
Visual C++ 6.0で質問です。

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

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

よろしくお願いします。


66:デフォルトの名無しさん
07/04/23 23:01:36
自分がやってることは疑わずに悪いのはこの関数と決めつけてるし
ほっといてあげよう

67:デフォルトの名無しさん
07/04/23 23:20:49
適当に言うけど

catch(...)

で捕らえられんの?

68:デフォルトの名無しさん
07/04/24 01:08:41
>>66
仰るとおりです。以後気をつけます。

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

>>67
レスありがとうございます。
catch(...)で試してみたのですが、拾ってくれない(そこまで到達してない)
ようです。
一度通常のコンソールアプリに組み込んでトラップできるか試してみます。
何かお気付きの点ありましたら、お願いします。


69:デフォルトの名無しさん
07/04/24 08:20:39
プログラムの1機能的な例外ではなくOSが発する例外なのにcatchできるわけないべw

70:デフォルトの名無しさん
07/04/24 08:25:44
>fopen()が失敗した際に

失敗の原因が
>サービスプログラムから複数のスレッドを起動
だったりしないよな

71:デフォルトの名無しさん
07/04/24 17:02:09
>>68
/EHaを付けて、SEH (__tryと__expect)の方を使えば受けられるかもしれない。
SEHで受けられるなら、_set_se_translatorでC++例外へ変換する道が開ける。

72:デフォルトの名無しさん
07/04/26 07:55:05
>68
そのDLLの内部でfopen()お呼びfclose()が行われてるってことかな。
ソースあるなら呼ばないで自分で似たようなの作り直すってのはダメなのか?
あるいは、そのDLLの問題部分を完全に突き止めて、ここをこう直せと指摘するとか。

73:デフォルトの名無しさん
07/04/26 08:28:27
お前らの話しを全部理解できてないので間違えてるかもしれんが
俺も例外をcatch(...)で取れないことが最近あった。
で、調べた。

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

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

とりあえずメモリアクセス違反を握りつぶすのも問題だから
VC2005でデフォルトが例外をcatch(...)で取れないようになったのは
妥当なことなのかな。

74:デフォルトの名無しさん
07/04/26 08:33:44
>>72
それが一番だよな。
エラー処理が不十分てことだからDLLを直させるべき。

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

社外の作成したDLLだからソースなしで
責任転嫁だとか本当にお前の担当部分にバグがないのかとか・・・
愚痴になってしまったのでおしまい。

75:デフォルトの名無しさん
07/04/26 09:30:00
>>73
C++例外でないアクセス違反を、C++の構文で捕捉できた事が異常。

76:デフォルトの名無しさん
07/04/26 17:52:57
>74
>でも自分の担当じゃないDLLの細部まで調べないと云々は納得いかんな。
他人に直させるにしても、問題が本当に相手のソースにあるのかまではつきとめないと
やっぱり自分のミスでしたって事になった場合、人間関係に亀裂が入り易いからなぁ。
(はっきり指摘してやって逆ギレするのもいるが、そういうのは置いといて^^;)

少ない修正で済むような問題なら、教えてやった方が結果的にロスタイムも少ないしな。

77:デフォルトの名無しさん
07/04/26 18:43:19
なぜfopen()が失敗するのか

78:デフォルトの名無しさん
07/04/26 19:02:47
>>76
別に細部まで調べなくても
渡すデータがDLLの仕様どおりで、呼び出し部以外でコケてなけりゃどう考えてもDLLの問題だし

79:デフォルトの名無しさん
07/04/26 19:10:47
下手に全部調べてからDLL担当者に「バグってますよ」というより、
「巧くいかなくて困っているんで、DLL側で助けてもらえませんか」と下手に出たほうが
協力を得やすく労力も減るかもしれない。

80:デフォルトの名無しさん
07/04/26 19:27:43
もしそのDLLが普通に使われてるんなら
仮にバグがあったとしても今まで問題にならなかったということだ。

81:デフォルトの名無しさん
07/04/26 19:47:25
とある事情によりDLL自体に手を入れ難い状況ということは今まで何事もなく使われてたんだろ

82:デフォルトの名無しさん
07/04/26 21:40:04
まあ、ファイル名を引数等で指定して処理させるような形だったら
一度呼び出し側でfopen()して開けなきゃDLLの関数は呼ばなきゃいいんじゃね?
2度手間になるから、もちろんいじれるならDLLいじった方がいいが。

83:デフォルトの名無しさん
07/04/27 08:03:55
VC++ .NET 2003のオプションで指定するインクルードファイルとかのパスって
どこに保存されてるの?

84:デフォルトの名無しさん
07/04/27 11:32:52
デフォルトの設定 レジストリ
プロジェクトの設定 プロジェクトの定義ファイル

85:デフォルトの名無しさん
07/04/27 19:15:31
レジストリ内の場所ってわかる?
レジストリエディタで目的のパスで検索かけてもHitしないんだけどさ・・・

ちなみにオプションのVC++ディレクトで設定する、インクルードファイルとか実行可能ファイルとか指定するとこなんですが

86:デフォルトの名無しさん
07/05/06 14:30:15
VC++2005なんですが
自作のクラスにメンバを追加したり、STLなどの既存のクラスを読み込んだりしたときに
かなりの頻度で、プロジェクトを閉じて開いたり、VSを再起動したりしないと
:: や . や -> などを入力した後の一覧に追加したメンバが表示されないのですが
再起動などせずに解決する方法は無いのでしょうか

87:デフォルトの名無しさん
07/05/06 20:29:25
MSに要望出せ

88:デフォルトの名無しさん
07/05/08 20:40:19
なぜかある場所でメンバ関数呼び出すと
thisポインタを使わないとメンバ変数が使えなくて
thisで指定しないでその変数に行くとランタイムエラーだされるんですが

これはメモリの領域破壊のバグのひとつでしょうか?

89:デフォルトの名無しさん
07/05/08 21:05:01
ある場所をはっきりさせてから質問してください

90:デフォルトの名無しさん
07/05/08 21:09:54
ランタイムエラーが出るんならランタイムに行ってんだろ

91:デフォルトの名無しさん
07/05/08 21:14:06
ランタイムの使い方がおかしいんだろうね。
その辺りのコード晒してみ?

92:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/09 16:19:41
ホームページビルダー作った会社に訊け

94:デフォルトの名無しさん
07/05/09 18:57:27
>>92
ここは「Microsoft Visual C++を使う人」のためのスレです
Microsoft Visual C++を「使って作られたソフトを使う人」はお帰りください

95:デフォルトの名無しさん
07/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です
URLリンク(www.kt.rim.or.jp)
(ページの下のほうの「project package (33 KB)」からダウンロード)

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

ご教示お願いします。

96:デフォルトの名無しさん
07/05/09 21:40:31
全然関係ないけど
P.J. Plaugerが自ら語るVS2005搭載C++テンプレートライブラリ
STL.NET

97:デフォルトの名無しさん
07/05/09 23:36:26
従来のSTLの機能の大半は.NET Frameworkクラスで事足りるのにSTL.NETとはこれいかに

98:デフォルトの名無しさん
07/05/09 23:39:31
>>97
まぁ読んでみれ
URLリンク(www.microsoft.com)

99:デフォルトの名無しさん
07/05/10 20:00:32
なんでこう、バージョンアップするごとにIntelliSenseがバカになってくいんだ・・・

100:デフォルトの名無しさん
07/05/10 20:03:28
新しいものに慣れるのがつらい年頃なのかね。

101:デフォルトの名無しさん
07/05/10 20:19:52
そうか、いくらファイルを保存してもインテリの情報が更新されないのが新しいものなのかw

102:デフォルトの名無しさん
07/05/11 00:49:58
>>99
IMEも98ぐらいの時が一番賢かった気がする。

103:デフォルトの名無しさん
07/05/11 00:55:58
それはない

104:デフォルトの名無しさん
07/05/11 08:08:03
ATOK使おうぜ

105:デフォルトの名無しさん
07/05/11 17:06:10
いやVCのインテリは付いたときから馬鹿だろ
それだけがVBの取り柄

106:デフォルトの名無しさん
07/05/11 19:29:34
>>104
そのあたりは無理に標準でついてるもの以外を使う必要が無いからなぁ

107:デフォルトの名無しさん
07/05/11 23:10:48
Japanist2003

108:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/14 18:22:15
何それ?

110:デフォルトの名無しさん
07/05/14 19:04:09
>>108
文字列の比較方法を調べなさい

111:デフォルトの名無しさん
07/05/14 19:15:58
できました、ありがとうございました。

112:デフォルトの名無しさん
07/05/14 20:03:30
_tWinMain

113:デフォルトの名無しさん
07/05/18 22:31:06
他のC++用IDEにある、IntelliSense同等の機能の方が、圧倒的に性能いいの?

114:デフォルトの名無しさん
07/05/19 02:34:02
他は知らんが
個人的には VS2003 のインテリセンスの具合が好き
2005 はインテリセンスに限らず全体的使えないと思う

115:デフォルトの名無しさん
07/05/19 09:18:05
あー俺も。2003から離れられない。

116:デフォルトの名無しさん
07/05/19 09:57:05
pimplイディオムを使うとインテリセンスも利かなくなるんだけど
これって意図された動作なのかただの偶然なのか?

117:デフォルトの名無しさん
07/05/19 12:09:55
昔VC6.0で作ったプログラムをVC2005に移植したいんですが、
そのままだとビルド出来ませんでした。

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

1から組むのは大変なんで、何とか使い回せないかと思うのですが、
何かいい方法ありますでしょうか。


118:デフォルトの名無しさん
07/05/19 12:12:36
Express EditionでPlatform SDKをインストールしてないとか、
パス通してないとかってオチはないよな?

119:デフォルトの名無しさん
07/05/19 12:16:38
No such file or directoryぐらいの簡単な英語なら理解できるだろ

120:デフォルトの名無しさん
07/05/19 12:23:22
>>117
おいおい初心者の俺でも分かるぜ。

121:117
07/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:デフォルトの名無しさん
07/05/19 14:21:28
VCのインテリセンスは昔からウンコ

123:デフォルトの名無しさん
07/05/19 14:27:05
errno は VC2005 だとマクロになってた気がするよ。
余計な warning が鬱陶しければ #pragma warning(disable:警告番号) で消した方が。

124:デフォルトの名無しさん
07/05/19 14:27:29
こんどはzlibの追加だネ!

125:デフォルトの名無しさん
07/05/19 15:24:53
VC2005についてるSTLとSTLportでは何が違うの?

126:117
07/05/19 15:37:14
117です。

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


2005、全部1から作るには楽なんだろうけど、ちょっと違うコトしようとしようとすると途端に・・

127:デフォルトの名無しさん
07/05/19 15:43:35
初心者の俺でも作れるし

128:デフォルトの名無しさん
07/05/19 17:31:04
VC6使ってたんなら初心者というわけじゃないだろうし
自分で調べてみるぐらいしようよ
ちょっとでも調べてたらそういう質問はないと思う

129:デフォルトの名無しさん
07/05/19 20:10:17
ダイアログの大きさがフォントの大きさによって変わってしまうのですが、
常に設計時の大きさになるようにする設定ってありますか?

130:デフォルトの名無しさん
07/05/19 20:12:03
あ、実行時にフォント変えてもダイアログの大きさは変わらないのかな?
↑は無視してください。

131:デフォルトの名無しさん
07/05/19 20:28:46
VC++.NETとVC++とは違うものなのでしょうか?


132:デフォルトの名無しさん
07/05/19 20:34:45
.NET使わないなら単なるVC7、VC8

133:デフォルトの名無しさん
07/05/19 20:55:23
>VC2005についてるSTL

そもそもそんなものは無い

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

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

VC++6.0で知識が止まってますorz

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

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

と表示されたところでいったん止めてWeb漁ってるのですが、なかなか有効な解放が得られず。。。

136:デフォルトの名無しさん
07/05/19 21:33:02
>>134
JavaのVMに相当

137:デフォルトの名無しさん
07/05/19 21:40:23
VC++.NETという表現は使われなくなりました。

138:デフォルトの名無しさん
07/05/19 21:52:02
>>135
MS的にはサポート外です。

139:117
07/05/19 22:08:00
117です。

何とか解決しました。

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

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


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

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

この辺の仕様も変わっちゃってるのかなぁ・・・

140:デフォルトの名無しさん
07/05/19 22:16:11
ひとりごと

141:117
07/05/19 22:25:25
昔に保存したデータをあきらめて、データ作り直したら行けるっぽいです。めんどいけど。
長々チラ裏に付き合ってもらってありがとうございました。


142:デフォルトの名無しさん
07/05/19 22:45:48
考えられる原因はこんなとこか?
バイナリモード指定していない
アラインメントの指定がおかしい
データ型の大きさが変わった (ex time_t)

143:デフォルトの名無しさん
07/05/19 22:46:43
インスタンスのメモリイメージをそのままをバイナリ保存って無謀すぎ。
普通はシリアライズ用関数とか用意するもんだ。

144:デフォルトの名無しさん
07/05/19 22:47:52
あと、文字列がANSIだったとか。

145:デフォルトの名無しさん
07/05/19 22:57:12
手抜きなんだからしょうがない

146:デフォルトの名無しさん
07/05/19 23:04:21
>>117
vtable の事もたまには思い出してあげてくださいね。

147:デフォルトの名無しさん
07/05/20 06:42:57
どうせ ANSI 文字列をユニコードで表示しようとしてるんだろう。

148:デフォルトの名無しさん
07/05/20 17:31:22
旧バージョンのVisual C++4.0で「コンソールプログラムを作成する」
というような使用条件であれば、十分に活用できますか?
(主にRS232CをWin32APIから使用するのが目的です)

また、当時NT4.0との組み合わせで不具合(多分使用できない機能?)
があるとかの話を耳にしたような記憶があります。
WinXPおよびWin2000での動作はどうでしょうか?
バージョンからして、既に現状に沿った話でなくて恐縮ですが、ご教示下さい。


149:デフォルトの名無しさん
07/05/20 17:37:58
そこまでしてVC4を使う理由が判らない。
つーか、Win32APIからRS232Cを使うというのが何を意味しているのか判らない。
単にシリアル伝送したいだけならmodeコマンドで条件設定してcopyコマンドでもtypeコマンドでもできるだろうに。

150:デフォルトの名無しさん
07/05/20 17:40:38
XP+VC5を使ってる人は知ってるけど、
VC4はわからないなぁ。

151:デフォルトの名無しさん
07/05/20 17:42:38
昔のプログラムでも動くのは動くし、動かないのは動かない
適当なの探してきて動かしてみればいい

152:デフォルトの名無しさん
07/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



153:152(追記)
07/05/20 18:53:27
* Crypto++ Library 5.4
URLリンク(www.cryptopp.com)
cryptopp/sha.h
cryptopp/sha.cpp

展開するとみたいになっていました。これを利用したいです。

154:デフォルトの名無しさん
07/05/20 18:54:15
#include <file-name>
使うならちゃんとpath通しとけよ

155:デフォルトの名無しさん
07/05/20 18:59:35
>>152
相対パスの元は、stdafx.h の場所ではなく
コンパイルしている cpp の置かれた場所なんじゃね?

156:デフォルトの名無しさん
07/05/20 19:13:50
解凍してそのまんまビルド
ライブラリができたらヘッダとlibを適当な場所へ置いて使うだけ

157:デフォルトの名無しさん
07/05/21 21:29:58
C++で普通に関数にするのとクラスのメンバ関数にするのとではとちらが遅いのでしょ?

158:デフォルトの名無しさん
07/05/21 21:38:42
一概には言えない。コンパイラの最適化で、実質的な差が出ない可能性も高い。
速度に関しては、個別に実測する以外は全てただの憶測。

159:デフォルトの名無しさん
07/05/21 22:33:48
オーバーヘットとかは無いの?

160:デフォルトの名無しさん
07/05/21 22:40:45
非仮想関数ならthisを積む程度の差しかないだろうなあ
まぁそんなこと考えるのは時間の無駄だから、コードの見易さ・美しさを考える方がいいよ

161:デフォルトの名無しさん
07/05/22 00:00:15
>オーバーヘットとかは無いの
なんですか? その「オーバーヘット」って。

162:デフォルトの名無しさん
07/05/22 00:06:05
夏塩蹴

163:デフォルトの名無しさん
07/05/22 00:54:16
まあ韓国の文化は冷麺のどんぐり麺?あれだけは評価できるね

164:デフォルトの名無しさん
07/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.'

日本語の警告文の説明を表示させたいのですがどこを設定すればいいのでしょうか?
よろしくお願いします



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

4765日前に更新/109 KB
担当:undef