★初心者にVisual C++を教えるスレ★ Part22
1 :
デフォルトの名無しさん :
2005/11/08(火) 18:48:04
_ ∩ ( ゚∀゚)彡 おっぱい! ⊂彡 _ ∩ ( ゚∀゚)彡 おっぱい! ⊂彡 _ ∩ ( ゚∀゚)彡 おっぱい! ⊂彡
乙
8 :
デフォルトの名無しさん :2005/11/10(木) 19:58:32
VC++.NET 2003 のWindowsフォーム アプリケーション(.NET) で CAsyncSocketを使って通信のクライアント処理を作ろうとしていますが、 CAsyncSocket socket; socket.Create(); で、socket.Create()の返り値が 0(異常終了) で返ってきます。 Windowsフォーム アプリケーション(.NET)では、CAsyncSocketは使えないのでしょうか? また、Windowsフォーム アプリケーション(.NET)の通信の実装は、CAsyncSocketを使う以外に あるのでしょうか? 知っている人がいれば、よろしくお願いいたします。
おまえそれMFCだろうが
10 :
デフォルトの名無しさん :2005/11/10(木) 20:39:55
>>9 VC++.NET 2003 の MFCベースの場合
socket.Create()の返り値が 1(正常終了)でした。
Windowsフォーム アプリケーション(.NET) の標準的なクライアント通信機能の
実装方法のご教示よろしくお願いいたします。
>>10 自分でMSDN調べろや
それでも解らんかったらその時教えてやるよ
12 :
デフォルトの名無しさん :2005/11/10(木) 23:12:48
なんだか、聞くのも怖いですが・・・ 実家にあったMicrosoftVC++6.0 をインストールして、プログラミング勉強してみようと始めたんです とりあえず、dialogを作ろうとしてリソースエディタで新規で作ったんです。 で、コントロールを足していこうとしてるんですけど、 コントロールボックスが出てきません。 解説サイトを見ても、コントロールボックスからbuttonとかeditboxとかを選んでるんですが、 その選ぶボックスがでてこないのは何でなんでしょうか? だれか教えてください。
13 :
デフォルトの名無しさん :2005/11/10(木) 23:23:42
>>12 表示メニューからツール バーをON/OFFする項目を探すか、
ツールバーの開いているところで右クリックする。
メニューが出てくるから必要なツール バーにチェックを入れる。
ボックスみたいになっているが当然ツール バーの一種だ。
ツールバーの上で右クリックして、リストの中にコントロールってあるからそれ選択してみな
15 :
12 :2005/11/10(木) 23:31:16
>>13 >>14 早い反応でありがとうございます。
すぐ↑の質問への殺伐とした反応から こんな初歩(ってかソフトの操作法)を質問したら
どんなこと言われるかと思いましたw
>>14 のツールバー右クリックの方法で無事にボックスが現れました。解決です。
また勉強して、次はちゃんとプログラムについての質問できるように頑張ります。
Microsoftから無償でダウソしたやつでやり始めました クラスとか構造体とかまったくわかりません
タブオーダについて教えてください。 タブオーダって1から順にクリックして決めますよね。 これって途中からできないんでしょうか。 たとえば、100個のコントロールを貼り付けたダイアログで、99と100を入れ替えたいだけの場合にも 1から順に100までぽちぽちクリックするのはあまりにもひどいですよね。 うまいやり方をご存知の方、よろしくお願いします。
いったい何のタブオーダーだ
メニューの 「書式 - タブオーダー」で設定するやつです。
おまえ情報が少なすぎ バージョンも使用フレームワークも書かんで何を察しろと言うのか
Shift + クリック #これくらい察すれば?
23 :
デフォルトの名無しさん :2005/11/11(金) 10:03:15
あるフォルダの中にエクセルファイルが100個くらいあったとして そのファイルの中身を一つ一つ検索かけて「ちんこ」って書いた行があるとしたら その行を抽出して新たにそれをまとめたエクセルファイルを作るような 仕組みにしたいんですが、なにぶん初心者なもんでして どういったあたりから手がけていったらいいのか・・・。 エクセルファイルの中身を見て検索するあたりがどうしたらいいのかが わからんもんでして。便利な関数かなんかがあるんでしょうか?
「ちんこ」でググレ
25 :
23 :2005/11/11(金) 10:17:30
>>24 さっそくのレスありがとうございます!!
il||li _| ̄|○ il||li
>>22 それです。
できました。
どうもありがとうございました。
27 :
10 :2005/11/11(金) 15:05:40
>>11 フレームワークは、全然使い慣れていないので、
フレームワークを使わずに解決いたしました。
28 :
WinXPにて :2005/11/11(金) 15:13:31
#include "stdafx.h" #include <stdio.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { BOOL bRet; STARTUPINFO si; PROCESS_INFORMATION pi; FILE* fpredir; if (( fpredir = freopen("OUTPUT.txt", "w", stdout)) == NULL){ fprintf(stderr, "標準出力へのリダイレクトエラー\n"); } ZeroMemory(&si, sizeof(si)); ZeroMemory(&pi, sizeof(pi)); si.cb = sizeof(si); // コマンドウインドウを非表示にする si.wShowWindow = SW_HIDE; si.cb = sizeof(STARTUPINFO); si.lpReserved = NULL; si.lpDesktop = NULL; si.lpTitle = NULL; si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.cbReserved2= 0; si.lpReserved2= NULL; si.hStdInput = GetStdHandle(STD_INPUT_HANDLE); si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); si.hStdError = GetStdHandle(STD_ERROR_HANDLE); // プロセスを起動する bRet = CreateProcess(NULL, "ipv6.exe if", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); if(0 == bRet){ // エラー} Sleep(1000); fclose(fpredir); return 0; } "OUTPUT.txt"ファイルに"ipv6.exe if"の結果が出力されません。 ご指導よろしくお願いいたします。
29 :
デフォルトの名無しさん :2005/11/11(金) 21:29:23
初心者です。環境はWin2kでVC++6.0proです。 WinAPIプログラミングを誠意勉強中です。 スタティックライブラリを使ってみようとしてるところです。 ライブラリにしたダイアログ(lib_test.lib)とリソース(lib_test.rc)を、リンクしようとしてます。 ヘッダ(lib_test.lib)をプロジェクトにもってきてインクルードして、 VC++のプロジェクトの設定から リンクするライブラリに lib_test.libを追加したんですが、 このlib_test.libとlib_test.rcは どこに置いたらいいんでしょうか? プロジェクトファイルと同じディレクトリに置いたら ・外部シンボルが未解決 ・外部参照が未解決 って出ました。 実行ファイルができるディレクトリ(debug版なので \Debug です)に置いたら ・入力ファイル(lib_test.lib)がオープンできません。 って出ました。 libファイル自体に変な属性(アクセスコントロールとか読取専用とか)はつけてません。 なのでオープンできないってのはリンカが見つけてないのかな・・・ どなたかご指南お願いします
30 :
29 :2005/11/11(金) 22:10:59
ヘッダはlib_test.hでした。 エロイ人降臨期待age
>>29 プロジェクトファイルと同じフォルダにlibなどを置くのが正解だと思う。
入力ファイル(lib_test.lib)がオープンできませんのエラーが出ませんということは、
リンカーはとりあえずLIBファイルを開けたということだから。
> 入力ファイル(lib_test.lib)がオープンできませんのエラーが出ませんということは、
> リンカーはとりあえずLIBファイルを開けたということだから。
言ってることが意味不明。
>>29 は 「入力ファイル(lib_test.lib)がオープンできません。 って出ました。」って言ってるが?
いちいちlibファイルをコピーするのは面倒だから、どこかlibの出力用ディレクトリを決めて、
そのディレクトリを参照するような設定にしとくのがいいかとおもうが。
> 言ってることが意味不明。
>
>>29 は 「入力ファイル(lib_test.lib)がオープンできません。 って出ました。」って言ってるが?
言ってることが意味不明。
「実行ファイルができるディレクトリ(debug版なので \Debug です)に置いたら」って言ってるが?
オープンできませんって言ってるのに開けたとかばかじゃね
>>32 プロジェクトのディレクトリに置いた→シンボル・参照の未解決
debugに置いた→入力ファイルがオープンできません
と29は書いてあるだろ。
俺は入力ファイルが〜のエラーが出なかった前者にLibを置くのが良いと書いたまでだ。
入力が見つからないというのは論外だから。
自分でlib作る前に既存のlibでビルドできるようになれ
>>35 31の書き方がなんかおかしいだろ
> 入力ファイル(lib_test.lib)がオープンできませんのエラーが出ませんということは、
この書き方じゃ質問者が「エラーが出ません」と言ってるように聞こえるぞ
LIBの使い方もしらないのにLIB作ってもしょうがないだろ
>>29 >プロジェクトファイルと同じディレクトリに置いたら
>・外部シンボルが未解決
>・外部参照が未解決 って出ました。
この時点では
>VC++のプロジェクトの設定から リンクするライブラリに lib_test.libを追加したんですが、
この作業をしてなかったということはないよな。
VCの開発環境が無い人でもプロジェクトに使用するデータの改変ができるように 外部のテキストファイル(test.txtとします)に5 7 10と書くと VCプロジェクトのほうで実行時に変数xに5、yに7、zに10を代入するようなコードはどう書くのでしょうか?
( ゚д゚)ポカーン
42 :
島野 :2005/11/12(土) 01:18:08
SN比の求め方がわかりません。 pgmファイルの求め方がわかりませんのでプログラムお願いします。 /* SN比*/ g = 0.0; f = 0.0; for (y = 0; y <= ysize ; y++){ for (x = 0; x <= xsize ; x++){ g = g + a[x][y] * a[x][y]; f = f + (a[x][y] - b[x][y]) * (a[x][y] - b[x][y]); } } h = 20 * log(sqrt(g/f)); printf(" %lf\n",h); exit(0); } まではわかります 急いでます
マルチポストにも程があるw
44 :
29 :2005/11/12(土) 01:49:13
なんか、私の質問で荒れてしまってごめんなさい。
>>38 > LIBの使い方もしらないのにLIB作ってもしょうがないだろ
はい。まさにそのとおりなんですよね。
ライブラリつくるのって、汎用っぽいオブジェクトファイルをまとめたもの って解釈なんですが
まずここが間違ってますか?
>>36 >自分でlib作る前に既存のlibでビルドできるようになれ
既存のlibは、システムの標準ライブラリが入ってるところからリンクするんですよね?
それはビルドできます。
>>39 した後でした。
lib_test.lib自体が間違ってるんでしょうかね・・・
45 :
29 :2005/11/12(土) 01:57:44
というか ネタバレすると
ttp://www7.plala.or.jp/keny01/windows/win32/#sub3-6 ここで順番通りやってみて
ライブラリを作るってので立ち止まってる状況です。
ライブラリを作るにあたってプロシージャが
WM_COMMANDのメッセージ処理で IDC_CHK_1を2回やってるのは違うなってくらいで
あとは一応書いてあるとおりにやってみてるんですが。 著者のコードミスも疑ってみたんですが、
.libがまず動いてみないと どうしようもないです。
実際のエラーメッセージは 以下
LINK : warning LNK4075: /EDITANDCONTINUE は /INCREMENTAL:NO の指定によって無視されます
static_test.obj : error LNK2001: 外部シンボル ""int __cdecl ShowSubDialog(struct tagConfData *)" (?ShowSubDialog@@YAHPAUtagConfData@@@Z)" は未解決です
Debug/statictest.exe : fatal error LNK1120: 外部参照 1 が未解決です。
>>44 libを作るとき.cで。
.cppのやつにリンクとかじゃないよなぁ・・・
えーと、ヘッダのインクルードガードより内を #ifdef __cplusplus extern "C" { #endif と #ifdef __cplusplus } #endif で囲む。で良いのかな?
48 :
29 :2005/11/12(土) 02:38:11
49 :
16 :2005/11/13(日) 00:40:46
C言語すら知らない俺がC++に手を出すのは無謀ですか?
うん
んなこたぁない
たとえばいわゆるベターCの部分だったら実質Cと何も変わらない。
53 :
デフォルトの名無しさん :2005/11/13(日) 11:04:55
質問です。 コンパイルしたexeファイルを実行しようとすると、 それに関連付けられた、テキストファイルなどは、 どうも、探すことができないようなのです。 同じフォルダで実行すると、大丈夫ですが、 プロジェクトを実行していた別のフォルダーで、実行させると、 テキストファイルを探すことができません。 皆さんは、どうされているのでしょうか
54 :
デフォルトの名無しさん :2005/11/13(日) 11:08:58
>それに関連付けられた、テキストファイルなどは 意味不明。 勘で答えるとGetModuleFileName()。
フルパスかカレントディレクトリ
>>53 郵便配達を考えろ。地元の町なら「鈴木さんち」と言えば
場所がわかる。ところがただ「鈴木さんち」と言われても
見当もつかないだろう。だから、絶対パスか相対パスで
指定してやる。例) C:\WINDOWS\programfiles\a.txt
57 :
デフォルトの名無しさん :2005/11/13(日) 12:05:59
>>53 です
>>54-56 さんありがとうございます。
フルパスで、できました。
詳しい説明まであり
皆様どうもありがとうございました。
VC++って日本語のヘルプないの?
アルヨ
60 :
58 :2005/11/13(日) 13:45:01
F1
CreateWindow関数使おうと思って、パラメータヒントを見たら nWidthはあるのにnHeightがありません。 仕様ですか?
IDEのバグ
64 :
58 :2005/11/13(日) 19:45:16
F1押すと英語のヘルプが出る
65 :
デフォルトの名無しさん :2005/11/13(日) 19:48:31
それヒント違っw
ヒント:翻訳する
>>58 ケース1:
日本語版をインストールする
ケース2:
英語版ヘルプのチェックボックスをはずす
ケース3:
志村!それエラーメッセージ!!
69 :
58 :2005/11/13(日) 21:47:42
70 :
デフォルトの名無しさん :2005/11/14(月) 23:27:56
Visual C++でビルドしエラーがある場合は、エラーがある行数を指摘してくれるのですが、 作業画面に行数を表示させてくれることは可能なのでしょうか? あと、特にエラーがなくてもたまにビルドをし続けてそのまま止まってしまうという事が 多いような気がしますがコンパイラ(Visual C++だけ?)とはそのようなものなのでしょうか? 初心者といってもいいわけにしかならない事は十分承知の上ではありますが、最近はじめたばかりという事もあり 自分なりにいろいろ調べてみてもわからないので質問させて頂きました。
>Visual C++でビルドしエラーがある場合は、エラーがある行数を指摘してくれるのですが、 >作業画面に行数を表示させてくれることは可能なのでしょうか? 可能です。しかしエラーメッセージをダブルクリックすると自動的に エラー発生地点にジャンプしてくれるので行数表示してない人が多いようです。 ときたま指定行にジャンプしたいときはCTRL+Gを使うのが楽でしょう。 >あと、特にエラーがなくてもたまにビルドをし続けてそのまま止まってしまうという事が >多いような気がしますがコンパイラ(Visual C++だけ?)とはそのようなものなのでしょうか? そのようなものではありません。今のPCが購入して4年以上なら買い替え時です。
自分は70じゃないですが、行番号を表示させたいけど操作がわかりません。
>>71 >一応可能です。
[ツール]-[オプション]-[エディタ]タブ あたりにチェック項目があると思ったのですが 見当たらないです。
どこから操作すれば表示できるのでしょうか?Ctrl+Gでもいいのですが、そんな大規模なコードじゃないので
行番号を表示させていたほうが、(今のところ)便利なもので。
行番号は可能な場合と不可能な場合が(ry
どんな場合は表示できて、どんな場合は表示できないんですか?
>>71 >そのようなものではありません。今のPCが購入して4年以上なら買い替え時です。
VC++.NETしか知らない人はお帰りください
たぶん
>>70 はVC++6.0じゃろ
Microsoft Visual C++ .NETなんですが、 コンパイルすると c:\Program Files\Microsoft Platform SDK\Include\WinNT.h(222) : error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。 c:\Program Files\Microsoft Platform SDK\Include\WinNT.h(222) : error C2501: 'PVOID64' : 識別名を宣言するのに、型が指定されていません。 c:\Program Files\Microsoft Platform SDK\Include\WinNT.h(5940) : error C2146: 構文エラー : ';' が、識別子 'Buffer' の前に必要です。 c:\Program Files\Microsoft Platform SDK\Include\WinNT.h(5940) : error C2501: '_FILE_SEGMENT_ELEMENT::PVOID64' : 識別名を宣言するのに、型が指定されていません。 c:\Program Files\Microsoft Platform SDK\Include\WinNT.h(5940) : error C2501: '_FILE_SEGMENT_ELEMENT::Buffer' : 識別名を宣言するのに、型が指定されていません。 というエラーが発生します。 どうしたらなおるでしょうか? 再インスコは無しで。
#include <windows.h> してる行より上で あやしいヘッダーをinclude してたり あやしい定義があったりするとか。
再インスコしる
>>75 あなたの意見をみると安定度は
VC++.NET>>>>>VC++6.0
ということでOKなのかな?
実際は同じくらいじゃね?
80 :
デフォルトの名無しさん :2005/11/16(水) 09:57:52
VBから利用できるOLEオブジェクトがVCから利用できません。 VBからは参照設定とか一切しないで下記のコードで動きます。 Dim obj as Object Set obj = CreateObject("Hoge.Document") obj.Property = "test" obj.Function() OLEを提供しているアプリケーションはHoge.exe, Hoge1.ocx Hoge2.ocxといった構成です。 VCで「タイプライブラリからクラスの追加」でHoge1.ocxやHoge2.ocxからスタブクラスを生成しても VBのソースで参照しているプロパティやメソッドが抽出されません。 僕はHoge.exeにこれらプロパティが含まれている気がしてならないのですが VCで「タイプイブラリからクラスの追加」でHoge.exeを選択すると、 「LoadTypeLibでエラーが発生しました。指定されたファイルがタイプライブラリではない可能性があります。」と出ました。 でもVBのソースを実行するとタスクマネージャのプロセス一覧でHoge.exeが立ち上がっているんですよね。 regeditでProgIDが"Hoge.Document"を検索すると下記のエントリが見つります。 マイコンピュータ\HKEY_CLASSES_ROOT\CLSID\{0000-0000-0000} <- 実際はクラスID InprocHandler32 REG_SZ ole32.dll LocalServer32 REG_SZ Hoge.exe ProgID "Hoge.Document" VC付属のOLE Viewで上記のプロパティやメソッドを持つタイプライブラリを探したのですが見つかりませんでした。 なにか別のやり方があるのでしょうか?それともVCから利用することは無理なんでしょうか?
81 :
デフォルトの名無しさん :2005/11/16(水) 18:35:49
GetRTTAndHopCount 関数について教えてください。 以前に作成したソケット関連のモジュールで、GetRTTAndHopCount関数を 使用しているのですが、WindowsXP SP2でそのモジュールを試したところ GetRTTAndHopCount関数でフリーズしてしまいます。 何分待てども帰ってきてくれません。 SP2以前のOSでは、正常に返ってきてくれます。 どうやらネットワーク上に存在しないIPアドレスを指定するとフリーズしてしまうみたいです。 SP2以前の環境では、なんともなかったので、SP2でこの関数に手を加えられたのかと思いぐぐってみましたが、 見つけられませんでした。 環境は、VC++6.0 です。 長いので余計なコードは省略しています。(cHostNameがIpアドレス) IPAddr DestIpAddress; ULONG HopCount; ULONG MaxHops = 64; ULONG Rtt; DestIpAddress = inet_addr(cHostName); GetRTTAndHopCount(DestIpAddress, &HopCount, MaxHops, &Rtt); SP2環境でGetRTTAndHopCount関数を使用してこの現象を回避できないのでしょうか? 使い方が変わったのでしょうか? また、参考になるサイトなどあればお教えください。よろしくおねがいします。
>>80 VBのObject型はC++ではIDispatchに相当するので、
最悪でもIDispatchからプロパティやメソッドを呼び出すラッピングクラスを自分で作れば絶対にできる。
#そこには果てしない棘の道が待ち構える。
>>82 VBでActiveX DLLを書いてVC++アプリとOLEオブジェクトの間のプロキシー役をさせることにしました。これが一番手っ取り早かったので。
本当はVCのみで実現したかったのですが棘の道はイヤだったので諦めました。レスどうもです。
自分の実行ファイルのForm1のハンドルを取得して色々したいのですが、 ↓以外にいい方法はありませんか? SendMessage(GetForegroundWindow(), WM_SYSCOMMAND, SC_MOVE | 2, 0);
吹いた
アホ過ぎる
88 :
81 :2005/11/17(木) 12:35:27
いろいろと検証してみたので報告とまた質問をさせてください。 >ULONG MaxHops = 64; と、書いていましたが実は200でした。 どうやら最大ホップカウントを変えるとタイムアウトに差がでるようです。 しかし、Win2k、XP(SPなし)で行ってみた結果、最大ホップカウントが、30でも200でも 約5秒でタイムアウトしてました。 SP2の場合は、30では約2分半。200では約17分というかなりの差がでました。 この状況はなにが原因でOSで差がでるかまったく検討つきません。 ぐぐってみてもOS(SP2)について書いてあるサイトを見つけられませんでした。 なぜSP2ではこんなに差が出るのでしょうか? また、参考になるサイトなどあればお教えください。よろしくおねがいします。
89 :
81 :2005/11/17(木) 15:08:33
>>81 >>88 自己解決しました〜
DLLのバージョンが違っていたので仕様が変わったのだと判断しました。
スレ汚しすんませんでした
90 :
デフォルトの名無しさん :2005/11/17(木) 17:37:54
質問です。 コンボボックスで、ドロップダウンされたリストから選択した後、 選択したものと異なる文字列をエディットボックス部分に表示させるには、 どうしたらよいですか? リストの中から、「apple」を選ぶと、「りんご」とエディットボックス部分に表示させたいのです
エディットボックスに文字列を設定すればよろしいかと。
92 :
90 :2005/11/17(木) 18:10:12
>>91 リストを選択「CBN_SELCHANGE」のタイミングで文字列を書き換えても、
コンボボックスの制御で、すぐに選択リストの文字列にされちゃうんです・・・
CBN_EDITUPDATEではどう?
94 :
デフォルトの名無しさん :2005/11/17(木) 18:50:10
VK_AやVK_Bってどこかに定義されてないの? VK_TABとかはwinuse.hにあるんだが、VK_0〜9、VK_A〜Zがどこにあるか分からん
95 :
デフォルトの名無しさん :2005/11/17(木) 18:52:45
winuser.hだ
>>94 たしかVB限定。
0〜9、A〜Zの仮想キーコードはASCIIコードの値と同じ。
C/C++では直接'A'や'B'と文字定数を書けば済むので定義されていないのだと思う。
C++Builderから移住してきました。 なんか使いにくいです。 本当にありがとうございました。
>>94 ,96つーか、そのwinuser.hのVKのとこにその旨表記してありますがね
シラネーヨ、つーか常識
100 :
90 :2005/11/17(木) 21:33:07
101 :
90 :2005/11/17(木) 21:41:08
オーナードローしかないですかね・・・><
エディットボックス部分をサブクラス化してWM_SETTEXTメッセージが来た時に 書き換えればいいんじゃない?
>>90 CBN_SELCHANGEでいいと思うが?
104 :
90 :2005/11/18(金) 00:15:10
>>102 エディットボックスにWM_SETTEXTが飛んで来ませんでした・・・
(サブクラス化は知りませんでした)
>>103 void xxx::OnCbnSelchangeComboExpand(){
m_combo.SetWindowText("りんご");
}
じゃ駄目っぽいです。。。
105 :
デフォルトの名無しさん :2005/11/18(金) 01:00:22
はじめまして。
CSimpleStringTのGetLength()とstrlenの動作の違いではまっています。
過去にも
79 名前: デフォルトの名無しさん 投稿日: 2001/05/20(日) 09:11
CStringってstrlenで調べるとちゃんとした値が出るのに、
GetLengthだとたまに変な値が帰ってくるのは何故?
特に400byteとか大きな文字列を入れているとき起こりやすいような。
80 名前: デフォルトの名無しさん 投稿日: 2001/05/20(日) 12:12
>>79 GetLength()がNUL文字までの文字長を返すわけではないからです。
文字列バッファの前方に長さ等を保持しているんですが、詳細は
MFCのソースを読んでください。
と言うのがあったようですが、GetLengthのソースって
int GetLength() const throw()
{
return( GetData()->nDataLength );
}
↑ですか?どうしてこの二つは動作が異なるのでしょうか。
GetLengthを使うのはまずいのでしょうか。
よろしくお願いします。
>>105 その違いが問題になるような最低限のソースを貼ってみるといいかもしれない。
107 :
105 :2005/11/18(金) 01:32:50
すみません。 会社じゃ2chに書き込みできないのでソースを持って帰ってきます。 それにしても普通は同じように動く…。ん。ポインタの問題かもしれないですね。 確認してみます。失礼しましたm(__)m
Win32、これは事件だ!
すみません、CTreeCtrlに大量にアイテムを追加したいのですが、 VBみたいに BeginUpdate 〜 EndUpdateみたいに、高速化でき ないんでしょうか。1000アイテムくらいでも、あまりにも遅くて。 コンパイラはVC6.0です。よろしくお願いします
できます。
どうやってでしょうか?
あ、ありがとうございます。
>>112 まだ遅いけど、前よりはずいぶん早くなりました。
助かりました。
>eMbedded Visual Tool 3.0をインストールすると >次の画像にあるエラーが出てしまいインストールが強制終了してしまいます。 インストールする→インストールしようとする インストールが強制終了→インストーラが強制終了 という解釈で宜しいか?
116 :
114 :2005/11/20(日) 17:13:31
>>116 想像の域を出ませんが、空白を含むディレクトリ名を対象としていませんか?
或いはそのようなディレクトリで作業していませんか?
そうです山脈
119 :
デフォルトの名無しさん :2005/11/21(月) 18:33:01
int a = Int32::Parse(textA->Text); これを実行してtextAっていう入力ボックスから取得した文字列を整数に変換するとき 中身がヌルだとエラー出るんですがどう回避したらいいですかね
何かと思ったら、managedか・・・
>>119 中身がヌルだったらParse()を呼ばなければいい。
中身がヌルかどうかの判定は自分で探してくれ。
122 :
デフォルトの名無しさん :2005/11/21(月) 20:23:53
if ( textA->Text != NULL ) int a = Int32::Parse(textA->Text); ってやってみたけどどうもうまくいきません。 != ""もやってみたんだけどなぁorz
文字列の長さでも判定しる
どうでもいいけど、アンマネードならGetDlgItemIntがあるのにな。
アンマネージドでも関係無いだろそれ
126 :
デフォルトの名無しさん :2005/11/22(火) 07:31:22
直前にブレークしかけて、値がどうなってるのかみてみたら?
128 :
デフォルトの名無しさん :2005/11/22(火) 09:23:22
質問です。Visual studioのテキストエディタにて、カーソル位置から文字を打つと全て上書きされてしまいます。 文字を打ったらきちんと押し出しして欲しいのですが・・ 設定の方法がわかりません。助けて下さい
>>128 上書きモードになってるんじゃないかな。
Insertキーで挿入モードに切り替わるよ。
Visual Studio .net 2003を使っているのですが、 それで作ったhoge.exeを他のpcに持っていって実行すると、MFC71.dllとmsvcr71.dllがないと怒られて実行できません。 仕方がないので、MFC71.dllとmsvcr71.dllをコピーしてやったら実行できました。 こういうのっておそらくうまい処理の仕方があると思うのですが、どうやるのでしょうか? ご教授のほどよろしくお願いします。
いつからここは「ぱそこん」初心者に教えるスレになりましたか。
ずいぶん昔からです
(数値地図から)200×200の数の行列?を読み込まし、iと、i+1と、j、 j+1で四点をとり、その4点の一番大きい値から小さい方へいくプログラムがつくれません 参照できるサイトありますか?わかる人いますか?ヒントください>< もう三ヶ月悩んでます、助けて 馬鹿な為ほんとプログラムわからないんです
>>131 プロジェクトメニュー → プロパティ → MFCの使用「スタティック ライブラリでMFCを使用する」
Standard版にもスタティックライブラリが使えたかどうかは不明・・・
>>134 >その4点の一番大きい値から小さい方へいく
なにが行くのかね。
138 :
137 :2005/11/22(火) 12:56:48
139 :
134 :2005/11/22(火) 16:36:43
矢印(ベクトル↑)をその、四点の一番高いとこから低い所へと次々と書くようなプログラムです、なんか説明するのも下手ですみません。
>>131 135の方法で静的リンクにするのが嫌なら131で言った元の状態で良い。
mfc71.dllやmsvcr71.dllはEXEと一緒に再配布できる(というよりしなければならない)。
(そのままEXEと同じフォルダに置いておくこと)
142 :
デフォルトの名無しさん :2005/11/24(木) 21:59:24
Visual Studioでネットワークプログラミングを勉強しているのですが、 ・Winsock ・MFCのCAsyncSocketクラス の2つがあるとわかりました(違ったらごめんなさい・・・) 初心者はどちらを使用して勉強したほうがよいのでしょうか?
「初心者」なら止めてください
WinInetにしとけ
CInternetSession
CHttpConnection
新しいダイヤログを開く際に、 座標指定をすることは可能ですか?
はい
>>142 WinSock or WinSock2
「初心者」なら止めてください
「初心者」なら止めてください
ちと教えてくださいませ MFCでスレッドを使ったプログラム書いています。 DialogAppを書き換えたものでプログラム自体はWndクラスとAppクラスのみで動いてます。 そいでCXXApp::InitInstance()にてWindowを生成 生成後に m_pThread = ::AfxBeginThread(ThreadProc, this) ; AutoDeleteはfalseに設定 見たいな感じでスレットを開始しています。 呼び出されたスレッドでは UINT CXXApp::ThreadProc(LPVOID pParam) { CXXApp*pApp = (CXXApp*)pParam ; CWnd* pWnd = pApp->m_pMainWnd ; while(pApp->m_isActive == true) { pWnd->SetWindowText(FPSの数値) ; //ここが問題の場所です。 描画処理 } return 0 ; } これでとりあえずは意図した動作はしているのですが 閉じるときにAssertErrorが出てしまいます。 プログラムを閉じる際にExitInstanceにてループしながらスレッドの終了を待つように しています。実際エラーは、スレッドが終える前に起きています。 SetWindowTextをコメントアウトすると出なくなるのでどうやらこれが問題みたいです。 その他の関数は問題ないみたいなんですがこれだけがどうしてもわからないです。 なにか特別な事が必要なんでしょうか?よろしくお願いしまう。
MFCスレへどうぞ
assertというのは何が悪いのか教えてくれるためにあるんだが
>assertというのは何が悪いのか教えてくれるためにあるんだが >153が使うと、常に「あんたの頭」と表示されるとか?
158 :
デフォルトの名無しさん :2005/11/25(金) 23:15:44
質問です。XP、.NET です。 かなり基本的で申し訳ないのですが・・・。 空のプロジェクトを作成し、リソースビューから「追加」→「リソースの追加」→「ダイアログ」としました。 ダイアログ作成画面になったのですが、ツールボックスのダイアログエディタを見ると、 「ポインタ」しかなく、ボタン、チェックボックス、などが全て灰色表示で選択でません。 何か根本的に間違っている気がしますが・・・よろしくお願いします。
そのプロジェクトに限った現象なんだろうか
160 :
158 :2005/11/26(土) 00:08:24
試しに、過去の他の適当なプロジェクトを開いてダイアログを作成すると、 きちんとボタンなどを貼り付けることができました。 プロジェクト作成時に何か設定ミスったのかもしれません。 もういちど作り直してみます。
161 :
158 :2005/11/26(土) 00:12:43
連続ですみません。 新しく空のプロジェクトを作成すると、正常に動きました。 少々気持ち悪いですが、とりあえずはこのまま行って見ようと思います。ありがとうございました。
質問させてください。 使ってるの環境はVC++6.0 SP6です。 #include<stdio.h> int main(int argc, char *argv[]) { printf("引数の数は%d個です。\n",argc); printf("引数の値\n"); for(int i=0; i < argc; i++) { printf("%d %s\n",i, argv[i]); } return 0; } 上のプログラムがコンパイル通りません。 forの中で int i と宣言してるのが嫌らしいのですが、できるはずですよね? ためしにforの外でint i; を宣言して、 int main(int argc, char *argv[]) { int i; (略) for(i=0; i < argc; i++) (略) } としたらちゃんと通りました。forの中でintを宣言するのは今まで何度もやってきたのですが、 今回にかぎってなぜかだめらしいのです。理由を教えてください。
ファイルの拡張子が.cだったら.cppに変更してみる
>>163 Σ(゚Д゚)
それで解決した。
そうか、、、for内で宣言できるのはC++からの仕様なんですか。
C++大学の授業とかでやって、最近Cをやりはじめたんでごちゃごちゃですorz
>>164 forの初期化式での宣言はC99からの仕様
.cのままでやりたいなら、gcc使ってるなら -std=c99 でできる
他はシラネ
VCは対応してない
対応してないどころかfor文で宣言した変数が スコープ外でも使えちゃう親切仕様☆
169 :
デフォルトの名無しさん :2005/11/27(日) 14:18:09
スコープ外で使えるのは仕様。
つ #define for if (0) ; else for
172 :
デフォルトの名無しさん :2005/11/27(日) 16:55:26
ViewプロパティをDetailsにしているListViewで各項目の値を取得するには どうすればよいでしょうか。やさしいお兄ちゃん教えて。
表示形式がなんだろうと全て同じ方法だよ
175 :
デフォルトの名無しさん :2005/11/28(月) 00:54:13
visualC++を学びたいので無償で手に入れられるっぽい Visual C++ 6.0をインストールしようとするのですが、いつも 「インストールは正常に終了しませんでした」 となりインストールが実行されません。 OSはMe、MDAC2.8もインストールして必要なものは 揃っていると思うのですが何が原因なんでしょうか
制限ユーザでインストールしようとしてない?
177 :
175 :2005/11/28(月) 01:13:41
>>176 ダウン元のサイトは一通り目を通してましたが
制限ユーザというのついてはよく分かりません。
6.0でも料金が発生したりユーザ登録が必要なのでしょうか?
それと、「インストールが・・・」ではなく「セットアップが・・・」でした
MEならユーザ権限関係なかったね。 空きメモリは足りてる? そのメッセージが出る一つ前の操作は何をやったの?
179 :
175 :2005/11/28(月) 01:31:07
起動中のものを終了させてセットアッププログラムを起動して 使用承諾契約に同意したあとにいつも終わってしまいます。 再インストールや再起動も何度かしましたが変わりありません。 メモリは足りています
レジストリがあふれてる
Meなんて捨てちまえ
Visual C++ 6.0無償になったの?
初耳だな
>>177 ダウン元のサイトってどこ?
プップクプーwww もうインストゥールできたから おまえらなんかに用はないよ プギャ
ママのおっぱい飲んで早く寝ろ
185 :
デフォルトの名無しさん :2005/11/29(火) 11:42:38
>>184 偶然セブンイレブンでB.Bって漫画読んだけど、大人がママのおっぱいをしゃぶるシーンがあった。
おっぱいはしゃぶるためにあるんだよ
187 :
デフォルトの名無しさん :2005/11/30(水) 10:35:38
生成されたプログラムを実行するときに押す「!」ボタンで 予めリダイレクトするファイルを指定することはできませんか? プロレクトのオプションで引数を指定することはできたのですが・・ 例えば生成された実行ファイルが TEST.exe のとき,「!」ボタンを押すことによって TEST < data.dat を実行したいのです.
あぁしまった; ×プロレクト ○プロジェクト
>>187 VC.NETなら、プロジェクト→プロパティ→コマンド引数に"< data.dat"
>>189 返信ありがとうございます.
できました!
191 :
デフォルトの名無しさん :2005/12/01(木) 09:27:19
int型のデータをファイルに保存したいんですが、 将来、このファイルを64bitOSでも正しく開けるようにしたいんです。 どのように保存したら良いでしょうか?
ネタだろうか? OS変わるとファイルが読めなくなるんだ へー
193 :
191 :2005/12/01(木) 09:47:34
194 :
191 :2005/12/01(木) 09:49:34
保存はバイナリで書き込みたいのです
へー 2000年問題みたいだね へーへー 見ものだね へーへーへー
>>191 OSでintサイズが変わるわけではない。
コンパイラの種類やそのオプションで決まる。
>>194 4バイトintでも2バイトintでも、好きなもので書き込めばいいだろう。
読む方は必要なだけ読むようにプログラミングすればいいだけだ。
何れにしろ、int型のサイズで制限されることはない。
つ<boost/cstdint.hpp>
199 :
191 :2005/12/01(木) 12:31:03
4バイトで書いたら、4バイトで読め って事ですね ありがとうございました
当然のことだし
int32_tとか環境依存しそうな部分はヘッダでtypedefして吸収する
そういうのにint使うな ぼけ
PlatformSDKって何?どうやってつかうの?
必要になるまで無理に使わなくていいよ
>>203 Platform SDKはSDK、インストールして使う。
何回かビルドして実行してると、 ビルドエラーを表示するウィンドウ左下にあるタブ「タスク一覧」を 押しても無反応になるんですが、これMSのバグ?? 環境はWindows2000で.net 2003。 XPの場合は全く起こらない気がする。 再インストール何回かしてるんだけど、しばらくするとこの症状が起こる...
208 :
207 :2005/12/04(日) 02:34:15
訂正) 再インストール → システムのリストア リストア後はもちろん症状治るけど、しばらくすると再発するって意味です。
210 :
デフォルトの名無しさん :2005/12/04(日) 10:59:43
いつもはLINUXでC言語をやっているのですが、WINDOWSにVC++2005EEβを導入してみました。 かろうじてコマンドラインではコンパイルして実行することはできたんですが、VC++本体では操作がさっぱりわかりません。 比較的単純なファイルをコンパイルして実行するだけなので、そこらへんの操作の仕方が書いてあるサイトあれば教えていただけないでしょうか? もしなければ教えていただければ幸いです。 どなたかお願いします。
比較的単純なファイルならコマンドラインでやってろ
ベータは初心者が使うもんじゃないから
213 :
210 :2005/12/04(日) 12:50:19
BCC使うことにします・・・。 インストールする前の状況にしたいのですが、 アンインストールはFramework等も行ったほうが良いでしょうか?
その調子その調子、諦めて諦めて
216 :
210 :2005/12/04(日) 13:29:45
あ、なんとかコンパイルできました。 でも、めっちゃ汚してる気がするなぁ。
スレが汚れたね
218 :
210 :2005/12/04(日) 16:59:56
そんなこと言わないでくださいよ。 初心者に教えるスレなんだからさぁ。
俺Linuxでやってたんだ ベータ版落としたんだけど どっかサイト教えて ↑ こいうのはマジ死んでほしい。 本ぐらい買って勉強しろよ
220 :
210 :2005/12/04(日) 17:15:41
そこまで言われる筋合い無いんですが・・・。
>>220 ここがどこだか理解した上での発言かな?
もうちょっと具体的にやりたいことを提示すればいいんじゃねーの?
223 :
210 :2005/12/04(日) 17:41:42
すみません、アンインストール中です。消すのがいっぱいで大変ですよ・・・。 もしかして超初心者スレで聞くべきだったんですか?
初心者以前の問題だな
質問っす! cout.writeってもしかしてwin32上では使えないんですか?
Windowsでも使えるよ
>>226 あれ?ほんとっすか?
consoleでは問題ないんですけどwinmainで始まる奴だと
空っぽのままです。
ハァ?
コンソールもWin32上ですので悪しからず
あ、すんません、つまり何も値が入らないでwriteが終了します。 LPTSTR lpBuf = _T("") ; std::cout.write(lpBuf, 0) << _T("Test") << std::flush ; Consoleアプリならちゃんと"Test"がlpBufに入ってるんですけど MFC等やその他winmainから始まる奴だとlpBufは空のままで その後SetWindowText(hWnd, lpBuf)やその他いろいろやってみたんですが 文字が所得で来ていませんでした。 なにか別に必要なことでもあるのかと思っていろいろ探してみたんですが やってる人がいないみたいなのでわからんです。
Form1のハンドルを得るにはどのようにすればいいのですか?
232 :
デフォルトの名無しさん :2005/12/04(日) 21:50:24
>>192 CPUが変わるとエンディアンの問題が出るよね。
ファイルが読めなくなるんだ
エンディアンの問題が出てもファイルが読めないわけではないな
>>230 コンソールアプリ以外では闇に葬り去られる。
というのは嘘で,あらかじめ自分でリダイレクトして置けばstd::coutへの出力は捕獲できる。
それは面倒だから普通はstd::ostringstream(std::basic_ostringstream<TCHAR>)を使う。
238 :
コンパイルどーてー :2005/12/04(日) 23:52:01
入門書によって、ウインメインに、メインの部分を書いていたり ウインドウプロシージャに書いているみたいですが どちらでもいいのですか? それとも利点があるのですか? 私の書いてる事じたいが、おかしな事でしたらスルーしてください
スルーする。
WinMainはAPIじゃないと思うが
>>238 自分は、大きいプログラムでstatic変数を
使いたくないときは、メイン部分(非プロージャー部分)に書いて、
テスト用とか、小さいプログラムの時はプロージャーに書いている。
プロージャー
プロシジャー
プロスィデュア
プロ信者って書いてある本があったな
テラアリエナス
249 :
コンパイルどーてー :2005/12/05(月) 22:24:35
>>242 レスさんきゅーでつ
つまり、好みしだいって事かな
入門書また読み直しまつ
250 :
デフォルトの名無しさん :2005/12/06(火) 21:45:06
質問します、 VC6のSP6を使っているのですが、 const float PI = 3.14159; float fHoge, fHuga; 〜略〜 float fPugya = ((2.0f * PI * fHoge / fHuga) / (60.0f * 75.0f)) * 1.5f; みたいなコードを、最適化をかけるとどんなアセンブリコードになってるのか 確認して最適化の勉強をしようと思ったのですが、 デバッグでアセンブリコードを見れるようにして、なおかつ リリースビルドと同じような最適化をかけてビルドするというのが どうやればいいのかわかりません。 実行速度優先の最適化を選択し、なおかつデバッグのオプションをつけた構成で ビルドしようとすると、/GZと/O2を一緒には指定できませんとか言われたので カスタマイズの最適化でグローバルの最適化や最大限の最適化を外すと ビルドできたのですが、アセンブリコードを見ても、上記の部分は最適化無しと 同じものでした。 ビルドのオプションの設定の仕方が悪いのか、それともfloatは最適化がかからないとか そういった理由なのか、よくわからないのでどなたか教えて頂けませんでしょうか。 よろしくお願いします。
アセンブリコードみれるならデバッグビルドする必要ないのでは?
>>250 デバッグのオプションとは別にアセンブリコードをはくだけのオプションがあるはず。
>>251 あ、リリースビルドでも見れるのは見れるんですね、
知りませんでした・・・(;´Д`)
でもブレークポイントの設定等ができないのですが、
これは最初から追っていくしかないということでしょうか?
>>250 デバッグしたいのなら兎も角、アセンブリ出力を見たいだけなら出力の設定だけ変えてReleaseビルドでよかろう。
デバッグ実行させながらアセンブリ出力を見たいのかな? Releaseビルドでもブレークポイントは張れると思うけど。 #但し、最適化の影響で順序は変わるし行は消えるしで、あまり意味はないけど。
なるほど、ブレークポイント置く行が悪かったのですね。 色々試してみます、どうもありがとうございました。
誰もブレークポイントの話なんかしていない。
だからそもそも、なんで実行しながらアセンブリ出力を見たいのかと。
実行しながらアセンブリみたいなら軟氷でも使えばいいんでないかな
260 :
250 :2005/12/06(火) 22:50:38
ゲームのコードなんで、計算が結構大量になったり特に当たり判定なんかは かなりの回数のループになると思ったので、速いか遅いかを完全に無視という わけにはいかないので、今のうちから最適化されたコードを ブレークポイント置いて確認する方法を知りたいと思ったのです。 説明が足りなくてすみません。 問題のコードだけ十行くらいで書いてビルド、というのもありかもしれませんが 恐らくそれでは実際にゲームの中で書いてビルドした場合とかなり異なると 思ったのです。だからブレークポイント置いて、そのコードがどうなるか 知りたいのです。
261 :
デフォルトの名無しさん :2005/12/06(火) 22:50:45
学部で研究しています。 交通工学分野で、料金所混雑について調べています。 料金所利用車を、ETC利用車と人による料金支払いをする車に分けて、後者の車による渋滞にETC利用車が 巻き込まれる事象をシミュレートしたいと思っています。 到着率やETC普及率を変化させ、車の平均滞在時間がどのように変化してゆくのかを調べるために、プログラム を書こうとしているのですが、Visual C++で表現できるのでしょうか? 滞在時間を2次元のグラフィックで表したいのですが。
「〜でできるのでしょうか?」というのは愚問だな。
>>261 出来る出来ないでいうなら出来る
後はおまい次第。研究なら自力でがんがれ
ところで交通工学って学部的には何処になるんだ?
>>260 [リンカ]->[デバッグ情報の生成]を[はい]に。
適当にブレークポイントを設定して実行。
[デバッグ]->[ウインドウ]->[混合モード]で機械語が表示される。
265 :
デフォルトの名無しさん :2005/12/06(火) 23:00:29
1-pの確率で職員が轢かれるのも考慮に入れたいのです
266 :
デフォルトの名無しさん :2005/12/06(火) 23:03:21
工学部3年です。数理工学分野でORを扱ってます。 待ち行列理論を勉強してて、理論構築はできるのですが プログラムが書けなくて、、 確かに、研究なので自力でやるべきです。
専門課程で研究してる人間がこんな所で質問しなきゃなんないなんて よほどの事情があるんだろう
268 :
250 :2005/12/06(火) 23:17:32
>>264 なるほど、出来ました!
どうもありがとうございました。
でも10行くらいブレークポイント入れてみましたが
全部「設定できませんでした」になりました・・・
全然違うコードになってしまうのですかね(;´Д`)
ともあれ色々試してみて勉強します。
教えてくださった皆様どうもありがとうございましたm(_ _)m
混乱しているなぁ。 ・最適化されたコードのアセンブリ出力を読みたい ・最適化されたコードのデバッグをしたい では全然話が違うぞ。 後者を本格的にやりたかったらICEに頼らないといけないと思うし。
>>268 アウトオブオーダーとかやっちゃういまのCPUでは勉学のため
参照にする程度ならともかく、手作業での最適化は難しいでしょう。
どうしても少しでも高速化したいならIntel最適化コンパイラの
導入を検討するか、並列化可能ならばSSE2等を使用するのが
現実的な選択肢かと。
271 :
デフォルトの名無しさん :2005/12/06(火) 23:32:12
float fPugya = ((2.0f * PI * fHoge / fHuga) / (60.0f * 75.0f)) * 1.5f; これに、最適化のしようが無いと思われるが。
定数は全てまとまるべさ。
273 :
デフォルトの名無しさん :2005/12/06(火) 23:45:14
>>267 テーマが見つかったのはいいんですが、プログラム書くのにつまずいて、
先が見えなくなったので、何か助言をもらいたくてきました。
274 :
デフォルトの名無しさん :2005/12/06(火) 23:51:21
>>273 まずは、コンソールアプリケーションから作るのがよいのでは?
275 :
250 :2005/12/07(水) 00:05:29
>>269 誤解されやすかったですね、明確な説明でなくてすみませんでした。
目的は前者です。
デバッグの方は、いつも最適化無しのデバッグビルドでやってますし、
今後もそれで問題ないと思います。
>>270 なるほど〜・・・CPUの高速化技術とかは聞いた程度にしか
知らなかったので、あまり深く考えていませんでした。
なるべく、「意味がわかりやすいけど遅くならない」コードが書ければ、と
常々思っていたのですが、そのためにはそういうことを扱った
サイトを見た方がいいですかね。SSE2等もいずれ使ってみますm(_ _)m
>>272 ありがとうございます!
今回、float fPugya =の行のように書いて、
整数の定数がまとまることは知っていたのですが浮動小数点数でも
そうなるのか不安があったので、調べるついでに高速化の勉強のため・・・とか思って
質問しました。でもそう簡単にアセンブリコードを見てわかるものでは
ないのですね・・・・。アプローチを変えて勉強してみます。
>>268 プロファイラ使って最適化したほうがいいと思うぞ
>でも10行くらいブレークポイント入れてみましたが >全部「設定できませんでした」になりました・・・ まさかCのコードにブレーク設定してるとか
278 :
デフォルトの名無しさん :2005/12/07(水) 00:22:05
>>274 まずは、コンソールアプリケーションから作るのがよいのでは?
Windowsアプリケーションとの違いがあるのですか?コンソールアプリケーション
を用いる利点がいまいち分からないのですが、、
279 :
274 :2005/12/07(水) 00:38:41
>>278 コンソールアプリケーションはCやC++の言語の知識だけで作れる。
WindowsアプリケーションはCやC++の言語、それにWindowsの知識(APIやらMFCやら)
が必要。そういうことです。
まずは、CやC++の言語の知識を取得してコンソールアプリケーションをつくる。
Windowsではコンソールアプリだけでは物足らなくなるでしょうから、CやC++
の言語の知識を習得したら、APIやらMFCやらの勉強をしてWindowsアプリを作るのが
良いのではないでしょうか?
>>278 さんがCやC++の言語の知識をすでに習得しているのであれば、Windowsアプリを
いきなり作っても良いです。
280 :
デフォルトの名無しさん :2005/12/07(水) 01:10:27
VB(Visual Basic)もいいよ!
>>278 >>279 が書いてくれてるように、GUIアプリとCUIアプリじゃ
必要とされる知識レベルが数段違う
282 :
デフォルトの名無しさん :2005/12/07(水) 01:13:56
質問です。 他のプログラムがアクティブになっている状態で Ctrl+Aなどで一定のキーボード操作を自動で行う。 というソフトを作りたいのですが、JavaとC++とどちらが簡単にできそうですかね? Javaで作ろうと試みてみたのですが 「他のプログラムがアクティブになっている状態で」という機能が困難なため C++で作り直すか迷っています。。
283 :
デフォルトの名無しさん :2005/12/07(水) 01:33:22
>>282 >Ctrl+Aなどで一定のキーボード操作を自動で行う。
ここんとこがいまいち不明。とくに「自動」ってところ。
何をきっかけにCtrl+A(=全選択)を自動で行うの?
>>282 Java/C++関係なくフォーカスのないウインドウはキーボードイベント
取得できないでしょ。
本気でやりたいならドライバ書くしかないんじゃ?
285 :
284 :2005/12/07(水) 02:28:04
ああ、C++ならフック使えばできるかな…Javaはしらね。
自分をA、他のプログラムをBとして Bがアクティブになっている状態で、AがBに対してCtrl+Aを 送るってことでは?
287 :
284 :2005/12/07(水) 02:52:25
アクティブなアプリに、ctrl+A等をトリガにして 自作アプリから任意のキー操作を発行するってことだと理解した。
あ、なるほど(;´Д`) APIならWM_SETHOTKEYあたりじゃないかな。自分は使ったことないけど。
ゲームのチートツールでも作ろうってんなら鼬害。
290 :
デフォルトの名無しさん :2005/12/07(水) 08:49:21
初めまして 最近VC++が楽しくなってきました
それはそれは良かったですね。
292 :
282 :2005/12/07(水) 15:38:18
レスありがとうございます。
>>283 別に処理開始のタイミングを決めるだけなんでキーはなんでも良いです。
>>284 ,285
常駐プログラムなら他のアプリケーションがアクティブになっている状態でも
処理開始のタイミングを伝えられるかと思ったんですが、無理ですかね?
>>286 ブラウザで一定の処理をしたいんですけど
ブラウザにメッセージを送っても、ブラウザを変更するほど技術がありません・・・
>>287 そういう事になりますね。
>>288 WM_SETHOTKEYは自プログラムをアクティブにするだけなんで
とあるキーを押したらブラウザで処理というのは難しそうです。。
>>289 NO!
>>290 これからも頑張ってください。
293 :
デフォルトの名無しさん :2005/12/07(水) 19:16:49
CSimpleArrayをwatchしたいんだけど、どうやって記述すれば見れますか? とりあえず、次の条件のとき、 CSimpleArray<CAtlString> strArray ; 配列の3番目をwatchしたいときに、入力フィールドどう記述したらいいですか? strArray[3] こんなふうにしてみましたダメでした。。。
MFCスレ行ってら
一定のプログラムをWhileで無限ループさせる文書いてくれません?
それくらい自分で書け
297 :
デフォルトの名無しさん :2005/12/07(水) 20:46:03
CSimpleMap<LPTSTR,CSimpleArray<LPTSTR>> map ; こんな事したいんだけど、どうやって記述したらいいの?
無限ループ漏れも知りたい( ゚∀゚)
>>297 CSimpleMap<LPTSTR, CSimpleArray<LPTSTR> > map;
>>と書くと現在のC++の仕様上右シフト演算子と解釈されてしまう。
typedefを使って回避する方法もある。個人的にはこっちがお薦め。
typedef CSimpleArray<PTSTR> PTStrArray;
CSimpleMap<LPTSTR, PTStrArray> map;
C++とかオシエレナイテコトナノデスカ
ここはプログラムを教えるスレではありません まる
302 :
デフォルトの名無しさん :2005/12/07(水) 21:39:12
>299 「>>」の演算子疑って「> >」こんなふうにもしてみたんだけど、ダメだったもんで 違う問題化と思ってた。。。 ありがとう!!!
Goto文でnotepad開き続ける文書いてくれよ。
ジャスティスキタ━(゚∀゚)━!
すいません、質問です。
>>187 と同じような質問なんですが、
標準入力のリダイレクトができません。
デバッグで開始すると、
「プログラムを開始できません。
出力をリダイレクトできません。指定されたファイルが無効です。」
と表示されます。
>>189 にあるように、コマンド引数に < test.dat
と書いているんですが、
何か他に設定するべき所とかあるのでしょうか?
>>305 <でのリダイレクトはコマンドプロンプトが行っているのであり、Windowsの機能ではない。
だからコマンドライン引数に指定してもリダイレクトはできない。
だからほかの方法を考えろ。たとえばfreopen(stdinとかさ。
Visual C++6.0でCのコンソールアプリを勉強用に作ってます。 ビルドも上手く行って思った通りに動いているソースがあるんですが これをステップインでデバッグしてみるとfopen.cやfprintf.cなどの 標準ライブラリの関数のソースのパスを入力しろというダイアログが出てきてエラーになってしまいます。 回避するにはどうしたらいいんでしょうか?
crtソースコードも一緒にインストールする
必要もないのにfopen.cやfprintf.cの中まで入らない
>>307 エラーにはならない。
ちゃんとfprintf()の中もデバッグできる。
#ただし混合モードで。
理解しました。 エラーでもなんでもなかった。 関数の中の処理を飛ばしたければステップオーバー使うってことですね。
312 :
デフォルトの名無しさん :2005/12/11(日) 01:37:04
最近C言語を勉強し始めた者です。 卒研のためVC++.NETを研究室で購入してもらう事になりました。 で、VC++.NETでWebアプリケーション(ホームページに載せて動かす)を作りたく、 入門書を立ち読みしたりネットで勉強しようと思ったのですが、どれもWindowsプログラムの事は書かれているのですが Web上で動かす方法については見つけることが出来ません・・・。 ホームページ上でプログラムを動かす勉強をするのにオススメな書籍やサイトがあれば教えていただきたいです。 ちなみに目的のプログラムはコマンドプロンプト上で動くものを作るのは成功し、 あとはそれをWeb上で動かせるようにしたい、という状況です。
コンソールで動いているなら、 apacheとかのサーバープログラムをセットアップすれば 目標が達成される気が…
使えない暇教授なんだな
>>312 CGIってことなら細かいことは忘れたがヘッダはき出すようにすればいいだけだろ
XMLサービスって事ならシラネ。まぁググれば大量に出てくるだろ
つーか卒研するぐらいならこれぐらい自力で調べるとか教授に聞くとか出来るだろ
もし教授がそういうのやってないなら自分所の情報系の学部・学科の教授捕まえるなり
メールするなりして聞くとかさ
俺でも教授になれるような気がしてきたよ
318 :
デフォルトの名無しさん :2005/12/12(月) 19:59:48
VC7ってメモリダンプ見れないんですか?
関係ないけどこの板のアップローダされたときのPASSって決まってるの?
PASSかける必要あるのか?
他スレで放置でしたのでこちらで質問させていただきます。 VC++.NET2003 でVBなどから参照できるクラスライブラリ作成しております。 基本的には機嫌良く動いているのですが、同じクラスライブラリ内のクラスを 継承した派生クラスでデストラクタを記述しようとするとエラーが出ます。 継承関係のないクラスのデストラクタは成功します。 中身を空にしたりvirtual や void を付けたり取ったりしても同じです。 また普通にFormのプロジェクト内で作成したクラスの継承では問題ありません。 error LNK2001: 外部シンボル ""void __cdecl __CxxCallUnwindDtor(void (__thiscall*)(void *),void *)" (?__CxxCallUnwindDtor@@・・・・)" は未解決です。 クラスライブラリ内で継承したクラスにデストラクタをつけるにはどうしたらいいでしょうか?
>>312 VB.NETやC#用の資料を見ろ。それを元にVC++.NETに置き換えろ。
文法が違うだけで、使用するフレームワークは同じなんだから、それで十分だろ。
それも出来ないようなら、中学校からやりなおせ。
323 :
323 :2005/12/13(火) 11:36:07
こちらで質問していいのかわかりませんが
よろしければお願いします。
環境はWinXP・VC++6.0です。
IEコンポーネント(CWebBrowser2)をフォームに表示し
それを編集モードにしたいと思っています。
ttp://www.nitoyon.com/vc/tips/ie_component.htm こちらを参考にしてサンプルソースをDLし、
put_designModeで編集モードに出来ることは確認できました。
自分はMFCAppウィザードで作ったSDIのプログラムで
同様の事を行いたいのですがうまくいきません。
サンプルではWinMainでAtlAxDialogBoxを使ってダイアログを表示していて
どうも自分がこれを使ってないことが原因のひとつに考えられるのですが
WinMainが無いプログラムの場合、AtlAxDialogBox、あるいは
それに変わる処理というのは何処で記述すればいいでしょうか?
よろしくお願いします。
324 :
323 :2005/12/13(火) 11:36:32
こんな感じにしてます・・・ BOOL CXXXXView::PreCreateWindow(CREATESTRUCT& cs) { _Module.Init(0, cs.hInstance); AtlAxWinInit(); return CFormView::PreCreateWindow(cs); } void CXXXXView::FuncA(){ CWnd* pIE = (CWnd *)GetDlgItem(IDC_EXPLORER1); if (pIE == NULL) return; // コントロールのハンドルを得る HWND hWnd = pIE->GetSafeHwnd(); // 使えるかどうかチェック if (hWnd != NULL && ::IsWindow(hWnd) != 0) { CComPtr<IUnknown>punkIE; if (AtlAxGetControl(hWnd, &punkIE) == S_OK){ CComQIPtr<IWebBrowser2> pWB2 = punkIE; if(pWB2 != NULL){//ここにNullが入ってきてしまう CComPtr<IDispatch> pDisp ; pWB2->get_Document( &pDisp) ; CComQIPtr<IHTMLDocument2> pDoc = pDisp ; pDoc->put_designMode(L"On"); } } } }
ダイアログににActiveXコントロールがはっついてるだけだろ
ツリーコントロールのアイテムをドラッグ出来るようにするにはどうすればいいのでしょう? ツリーコントロールの『プロパティ』→『拡張スタイル』→『ドラッグドロップを許可』にチェックを付けたのですが、 ドラッグ出来ず、OnBegindragのイベント内にも入ってきてくれません。 環境は WindowsXP Home VC++6.0 です。 どうかよろしくおねがいします。
MFCのサンプルならあるけど MFCじゃないかもしれないな 気になるけど時間ないからまた来週来ます。
329 :
321 :2005/12/14(水) 17:29:11
ありがたくも元スレの方にレスがありましたので再び移動します。 すいませんでした。 マネージドやってる人、少ないのか・・・orz
あんな思いフレームワーク使うくらいならまだMFC使った方がマシじゃわ
思い× 重い○
どうせフレームワークを使わざるを得ないならC#でやったほうが楽だしな。
333 :
デフォルトの名無しさん :2005/12/16(金) 00:36:45
質問です。XP、.NET 2003 です。 HOGE.h / HOGE.cpp で定義されている関数 Hoge() を、 複数のプロジェクトで使いまわすことを考えています。 ヘッダの方は、HOGE.h を適当な場所に置き、 ツール→オプション→Projects→インクルードファイル でそのフォルダを追加すれば、 後はプロジェクトの適当なソースファイルで #include "HOGE.h" とすればOKです。 cpp ファイルはどうすればよいでしょうか? ツール→オプション→Projects→ソースファイル で、HOGE.cpp をおいたフォルダを指定してみましたが、 プロジェクトをビルドすると、HOGE() の定義が見つからず、リンクエラーが起きてしまいます。 現状では、プロジェクトごとに、ソリューションエクスプローラにて HOGE.cpp を追加しています。 使いまわせているといえば言えるのですが、プロジェクトごとにコンパイルする必要がある上に、 HOGE.cpp のようなファイルが複数ある場合、いちいち全て追加しなければなりません。 #include <stdio.h> とするだけで、printf が定義されている c ファイルを自動的に検索してくれるのを思い、 同じことが実現できるのではないかと思って質問しました。 よろしくお願いします。
HOGE.cpp をプロジェクトに追加する ソリューションエクスプローラのフォルダを右クリックして「既存項目を追加」なり ソリューションエクスプローラにエクスプローラから直接D&Dするなり
335 :
333 :2005/12/16(金) 00:58:41
>>334 ありがとうございます。
>>333 にありますように、現状はその方法で行っていますが、それだといくつか問題が生じています。
他に何か方法はないでしょうか。
336 :
新人 :2005/12/16(金) 01:42:51
333> 汎用化したいプログラムをDllのプロジェクトにしてワークスペースに追加すればいいんじゃないでしょうか? Dllを使いたいプロジェクトの実行ファイルの直下に置けばそのDllを参照してくれます。 もちろんインクルードファイルの参照もしといてください。
>#include <stdio.h> とするだけで、printf が定義されている c ファイルを自動的に検索してくれる これは誤解
>>333 >>336 別にDLLじゃなくてスタティックライブラリで委員で内科医?
デバッグビルド用とリリースビルド用を用意する必要はあるけど。
教えてください。 .Net 2003 WinXP です。 F1キーヘルプでAPIを調べようとすると英語ヘルプが優先されてしまします。 日本語ヘルプをはじめに表示するにはどうしたらいいのでしょう?
341 :
デフォルトの名無しさん :2005/12/16(金) 15:44:02
まるぽ
342 :
デフォルトの名無しさん :2005/12/16(金) 16:52:46
Baseクラスから派生してDerivedクラスを作成したとします。 class Base { public: virtual func(int n){処理} virtual func(int* p){ func(*p);} //オーバーロード }; class Derived : public Base { public: virtual func(int n){処理} //オーバーライド }; 以上のように、派生クラスのオーバーロード元のメンバ関数をオーバーライドしたとき 基本クラスでオーバーロードした関数は派生クラスで呼び出せないのでしょうか? int* p; 〜処理〜 Derived* derived = new Derived; derived->func(p); ↑これでコンパイルエラーが出ます。 やっぱり基底クラスでオーバーロードした関数もオーバライドしなければいけないのでしょうか?
>>342 そんなオーバーロードなんてやるほうがおかしいからやめろ。
一応解決策を書くけどさ。
たとえばこうすればいい。
class Base
{
protected:
func_(int n) {処理}
public:
func(int n) {return func_(n);}
func(int* p) {return func_(*p);}
};
class Derived : public Base
{
protected:
virtual func_(int n) {処理} //オーバーライド
};
ほかにDerivedのpublicなところでusing Base::func;を書く方法でも
一応コンパイルは通るが、これは一時しのぎのつもりで使え。
すまん。Base::func_ももちろんvirtualだ。
345 :
333 :2005/12/16(金) 20:11:03
347 :
342 :2005/12/17(土) 08:46:58
えーどもども。Visual Studio .NET 2003で、 [Nullpo.h] --------------------------- #ifndef ___Nullpo_h #define ___Nullpo_h namespace Nullpo { // 宣言 void Ga(); } #endif ___Nullpo_h [Nullpo.cpp] --------------------------- namespace Nullpo { // 定義 void Ga() { ... } } で、クラスビューにGa(void)が二重に表示されるんですが、なんででしょう。
Windowsプログラミングを始めたところなんですが、アホみたいなところで躓いています… ダイアログバーを使いたいのですが、Createの virtual BOOL Create( CWnd* pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID ); nIDTemplateとnIDがわかりません IDというと、リソースエディタでつけたIDD_DialogBarしかわからないのですが、 どちらがこれに当たり、もう一つには何を与えればよいのでしょうか。
VisualStudio.NETを使っています リソースビュー→Dialog→リソースの追加→Dialogを選択。 OKとキャンセルボタンがついたダイアログが出来ますが、 これをプログラム中から呼び出すと、ダイアログエディタで表示されていたOK,キャンセルボタンとは別に OK、キャンセルボタンがもう一組表示されています。 これはなんでしょうか。また、消し方についてもお願いします。
>>349 どっちも同じIDD_DialogBarでいいんぢゃねーか?
CDialogBar m_wndDBar;
m_wndDBar.Create( this, IDD_DialogBar, CBRS_xxx , IDD_DialogBar );
みたいな感じ
352 :
349 :2005/12/21(水) 22:59:00
>>351 ありがとうございます。とりあえず表示できました。
でも、よく意味がわからないのですが、追々勉強します…
>>350 自前でボタンを生成しているとか、ダイアログIDが混乱しているとか、そういう落ちじゃないよな。
VC++6.0で、リストコントロールで表示スタイルを「レポート」にした場合、 行をドラッグするような事はできるのでしょうか? それとも、「アイコン」スタイルでないとできないのでしょうか?
行をドラッグしても選択範囲が変わるのが関の山。
ボタンを押すと、あるエディットボックスにあるCStringのデータを Ctrl+Cしたいと考えているのですが、可能なのでしょうか? ご教授宜しくお願い致します。 UpdateData(TRUE); CString copydata; copydata = m_text1; このcopydataを自動でCtrl+Cしたいと考えております。
エスパー、仕事!仕事!
>>356 Ctrl+C という「アクセラレータ・キー」に機能を割り振るのは、プログラマの仕事だ。
というわけで、したい事をお好きなように……
クリップボードにテキストをコピーしたいのなら、
1) OpenClipboard(), SetClipboardData() などの標準クリップボードAPI
2) MFC の COleDataSource クラス
3) CLI では System::Windows::Forms::Clipboard クラス
のどれかを使え。
ありがとうございます。 解決しました
スゲエ本物のエスパーを見たお
361 :
デフォルトの名無しさん :2005/12/24(土) 17:46:23
質問です。XP、.NET です。 ダイアログにリストビューを配置しようとしたのですが、 ツールボックスからリストビューを見つけられません。 似たようなものとして List Box、List Control があったのですが、どうも違うようです。 LVM_INSERTCOLUMN を用いてコラムを追加したり、 LVS_EX_GRIDLINES を用いてグリッドを引いてみたりしようとしてみましたが、どちらも無理でした。 Visual Studio 6.0 を使っていたころはあったのですが・・・。 .NET ではインターフェイスが違いすぎて困っています。 よろしくお願いします。
362 :
361 :2005/12/24(土) 17:49:39
ビューをレポートにしたらいけた・・・ 自己解決です。お騒がせしました。
Viewクラスで、GetDocumentを実行すると、 Debug Asseriton Failed Program: *********** File: objcore.cpp Line: 39 とエラーが出て止まってしまいます。 OnDraw関数内にはじめからある CDocumentClass* pDoc = GetDocument(); ではエラーは出ないのですが、 その他の関数中で同様に書くと、上記のエラーが出て実行できません(ビルドは通ります)。 GetDocumentは、OnDrawの中でしか使えないわけではないですよね? よろしくお願いします。
>>363 objcore.cppの39行目を見る気は無いわけだな
365 :
363 :2005/12/26(月) 22:34:09
39:ASSERT(this != NULL); 40:// it better be in valid memory, at least for CObject size 41:ASSERT(AfxIsValidAddress(this, sizeof(CObject))); すいません、見ても意味がわかりませんです…
ASSERTがどういう役割をするか調べる気は無いわけだな
367 :
363 :2005/12/26(月) 22:57:30
それ検索してわかったなら書き込まないよ… 足りない知識で考えると、this==NULLとは、GetDocumentでドキュメントクラスのポインタが取得できなかったと言うことですか? あってます? だとしたら、それが何でかわからないのでお聞きしたかったのですが。 ビューとドキュメントの関連づけは問題ないと思います(OnDraw関数内では使えてる)。
思考停止乙
ぶっちゃけMFCのソース貼り付けは無断転載でライセンス違反だと思うんだが。
>>367 ドキュメントクラスのオブジェクトが作成される前に、GetDocumentしてるのでは?
OnDrawでうまくいくのはOnDrawの段階ではドキュメントクラスのオブジェクトが存
在するからではないの?
追加で、 ドキュメントクラスのコンストラクタ抜ける直前と、問題のGetDocumentに ブレーク張って前後関係確かめたら?
372 :
363 :2005/12/26(月) 23:26:28
>>370 ,371
ビューのコンストラクタから呼んでいたので怪しいかと思い、
ご指摘のブレークポイントを設定してみました。
しかし、ドキュメントクラスのコンストラクタのほうが先に呼ばれているようです。
>>369 以後気をつけます…
CView::OnInitialUpdate virtual void OnInitialUpdate( ); 解説 ビューが初期表示される前で、ドキュメントが最初にビューに関連付けられた後にフレームワークが呼び出します。
>>372 じゃビュークラスのコンストラクタからGetDocumentしてるとか。
この場合のthisがどのオブジェクトのポインタなのか良く知らないで
書いてるもんで・・・
詳しい人のレスを待ったほうがいいかな。
>>372 オブジェクトが完成するのはコンストラクタ抜けた直後だよ。
376 :
130 :2005/12/26(月) 23:45:36
がっ、 >ビューのコンストラクタから呼んでいたので怪しいかと思い って思い切り書いてあった。
377 :
363 :2005/12/26(月) 23:53:28
>>373 つまり、ビューのコンストラクタの段階では関連づけされてなくて、
コンストラクタを抜けて関連づけられた後に
OnInitialUpdateが呼ばれるということですか。
OnInitialUpdateから問題の関数を呼んだらうまくいったようです。ありがとうございます。
レスをくださった皆様ありがとうございました。
質問です。 VC6.0で動的に配列を作ると 時たま破棄するときにエラーになります。 例えば関数内で以下のようなものを書くと Debug Assertion Failed! Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) などと出てエラーとなってしまいます。 delete[] array; を削除すると一応は通ります。 このようなエラーが頻発するのですが、 どのようにすれば解決するのでしょうか? 詳しい方宜しくお願いします… int *array; array = new int[100]; 処理 delete[] array;
>>379 恐らく、その「処理」の間にメモリ管理領域をぶち壊している。
delete[]しないと通るのは、その(ぶち壊していると言う)事実に直面しないで済んでいるだけ。
>>380 ヒント有難う御座います。
これから調べてみます…
リストコントロールから項目をドラッグして、 他のコントロール(リストボックス)上でドロップする処理をつくっているのですが、 ドロップされた場所がリストボックスのどのインデックスか取得する方法が分かりません。 ドロップした瞬間は↓のイベントでわかるのですが、 void CDlg055::OnLButtonUp(UINT nFlags, CPoint point) 引数のpointからリストボックスのどのインデックスか取得はできるのでしょうか? 環境はVC++6.0 WinXP Homeです。
マウスの位置はわかるな
CListBox::ItemFromPoint
385 :
382 :2005/12/29(木) 17:55:57
>>384 そんな関数があったんですね。
ありがとうございます。
double型の精度は何桁ですか?
↑あ、VC++7.0の話です。
<float.h> #define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */ かな?
2003で/GLオプションつけてビルドしたライブラリを使って、 2003で自作アプリを/GLオプション付でコンパイルするとどう見ても ソースが要求する動きをしないコードが出来上がるんだがどういうこっちゃ。
>>392 使うなじゃなくてバージョン合わせろって事だろ。
同じ環境でコンパイルしてるんだからそれは問題ないはずじゃないの?
ランチャを作ろうかと思っています。 他のアプリからリソースを取り出す方法まではわかりました。 そこで、アイコン確認するためダイアログの背景に取得したアイコンを表示してみようと思ったのですが、 その方法がわかりません。 わかる方、御教授お願いします。
>>393 /GLオプションの意味わかってんのか?
>>393 バージョンじゃなくて同一PCでやれって書いてないか?
>>395 わかってるつもりだけど、俺のレスのどこら辺からわかってないと思ったのか教えて欲しい。
何でもいいから問題解決の糸口がほしいんだ。
>>396 プリコンパイル済みヘッダー使った場合だろ?
そもそも使ってないし、同一PCでやってる。
398 :
394 :2006/01/05(木) 10:53:31
CDCクラスのDrawIcon使って自己解決。
MFCerは帰れ
ここはMFCプログラムを教えるスレではありません故 つーかプログラムを教えるスレでもねぇがな
>>399 MFCスレが他にあるけどapiスレもあるし、
それをやるなと言ったらここで何をやれと?
プログラムに関することだけがVC++のことではないと思うがな
上の/GLなんかMFCでもAPIでもないけどVC++のことですが?
ならこのスレは祖父板に立てるべきだな。
「初心者にVisual C++を教えるスレ」だから、 MFC、API、コンパイラ等、幅広く教えるんじゃないのか?
だがMFCの質問はMFCスレへ行けと言ってるこの現状
初心者にコンパイラスイッチまで教える必要ない。 やりたきゃ自分でやれ
何言ってんのコイツ?
>>409 たまにだけど自分の守備範囲外だってだけで拒否反応する香具師いるんだよ
MFCが使えない399とかコンパイラスイッチが苦手なやつとかさ
インラインアセンブラとかやられたら迷惑
結論: (話に加われないから)俺にわからない話はするな ってことだな。
初心者スレだってこと忘れてないか?
コンパイラスイッチはここで良いんじゃ? VC++のスレって事は、環境やコンパイラとか固有の物についてのスレでそ? MFCやAPIは専用スレがあるんだから、そっちでやるのがいいんじゃね?
>>414 とりあえず過去ログぐらい読もう
そんなこと言ってるのお前だけだ
>>414 MFCもVC++固有だけど・・・・・・
>>415 過去がそうだったからといって今後も続けなきゃいけないとは限らない。
へんなやつがわいてきたな
へーんとへーんを集めてー
もっとへんにするのか?
なんでソフトやる奴はこんなのが多いのだらうか。
2chのカキコで判断されてもなぁ
424 :
デフォルトの名無しさん :2006/01/09(月) 03:35:17
すみません。vc++で警告が出てしまい日本語文字が化けてしまいます。すいませんが助けてください。 2005でコンパイルすると上手くいかないのです。 34 wc.lpszClassName = (LPCSTR)szClassName; 警告warning C4133: '=' : 'LPCSTR' と 'LPCWSTR' の間で型に互換性がありません。 34
WNDCLASSEX構造体wcのメンバの型と グローバル変数char szClassName[] = "template";の型に互換性がなくなってるらしいのですが、、
まとまりのない文章ですみません。
互換性がなくなってるんじゃなくて、もともと無いの。
>>427 有難うございます
明日また、考えたいと思います。今日はもうメモリリークしそうなので寝ます
ヒント:雲丹コード
答え:undef _UNICODE; undef UNICODE
>>425 TCHAR szClassName[] = TEXT("template");
リソースってvisual c++上でテキストファイルみたいに編集できないのでしょうか? もし、手書きで編集するにはvisual c++を終了してメモ帳などで別に開くしかないのですかね?
>>432 ソリューションエクスプローラ
右クリック
435 :
デフォルトの名無しさん :2006/01/09(月) 18:01:44
CreateWindowEx()を使って、ボタンコントロールを作ったはいいものの、 複数配置した場合、メッセージを拾うとき、 BN_CLICKED指定だけではどのボタンか特定できませんよね? そこでIDC_xxxxとかそのあたりのIDを使っているのだと思いますが… コントロールのIDってどこで追加するのですか? VC++6.0使用です。ものすごい初歩的な質問で恐縮です。 ダイアログベースならどこかで追加できた気がしますが、 そうでない場合の追加の仕方がわからなくて…。
436 :
435 :2006/01/09(月) 18:30:56
あ…あぁ…もうちょっとで自己解決しそう…。
437 :
435 :2006/01/09(月) 18:39:10
あぁッ…ぁふん…自己解決しちゃったかも。 .rcファイルを開いて手動で追加すればいいのですか? あぁでも書式がわからん…。
リソース使わないならrc関係ないよ
439 :
435 :2006/01/09(月) 19:04:19
あれ?これもしかしてソース内で適当に#defineしちゃっていいものなのですか? #define IDC_BUTTON1 1 #define IDC_BUTTON2 2 のような感じで。 さらにenumなんか使っちゃてもOKですか?
全然だめ
IDで識別しか頭に無いのか
別に特殊なことでも何でもないし サンプル探せば簡単にみつかる
>>435 CreateWindowExの引数でIDを指定できる。
そのIDは439のように#defineやconstやenumを使って名前をつけて良い。
CreateWindowExじゃなくてCreateWindowを調べてみれ
445 :
デフォルトの名無しさん :2006/01/09(月) 21:01:15
>>443 ,444
ありがとうございます。
どうも自分で指定してよかったみたいですね。
予めどこかで、一定の手順に従って定義されているIDを渡すものだとばかり思っていたので、
(でないと重複などが問題になると思ったから)
こんがらがっていたようです。
webで調べてもダイアログベースでプロパティから弄る場合や、
自動的についてる場合などしか見当たらなくて。
失礼しました〜。
446 :
428 :2006/01/09(月) 23:18:26
>>427-431 CreateWindow関数とMesageBox関数の2番目の引数が文字化けします。
447 :
428 :2006/01/09(月) 23:19:55
2003だったら何の問題も無いんですけど。 これは漏れに2005を使うなという意味ですか?
自分で何も調べない奴は、何も使うな
直りました。俺だけ文字化けしてるのかと思った
いままで使っていたソースとリソースを使って新しく同じようなプロジェクトを作ったのですが 'IDC_COMBO' : 定義されていない識別子です。 というエラーが出て困ってます。 'IDC_COMBO'はコンボボックスのIDでIDはきちんとIDC_COMBOになっているし ソースファイルにも #define IDC_COMBO 101 というように定義してあります。 いろいろ調べたのですが、わからなかったのでお願いします。
プロパティウィンドウの簡略ヘルプが出なくなったのですが、 どうやったら元に戻せるのですか?説明にはチェックがついてます
452 :
451 :2006/01/10(火) 02:47:26
すいません、戻りました
453 :
デフォルトの名無しさん :2006/01/10(火) 03:21:28
Visual Basic なんだけど、 Sub ex2() Dim x As Integer, s As Integer s = 0 For x = 1 To 100 s = s + x Next x If x Mod 2 Then End If MsgBox "合計=" & s End Sub ってのに奇数だけの和を求められるようにするにはどう変形すればよいですか?
>>453 禿げ上がるほどスレチガイだが教えてやる。
算数をもう一度勉強しなおせ。以上
456 :
デフォルトの名無しさん :2006/01/10(火) 06:53:04
キショ
457 :
デフォルトの名無しさん :2006/01/10(火) 10:56:19
PostMessageで独自のメッセージUM_UNKOを飛ばし、処理させたく存じます。 PreTranslateMessage関数では、ちゃんとメッセージが飛んできて、処理可能ですが、 メッセージマップで追加設定した関数OnUnko()には、処理が飛んで来ません・・・ なにがいけないのでしょうか?? ちなみに、メッセージはPostMessage(UM_UNKO)で飛ばしております (SendMessageでは、PreTranslateMessageに飛んでこない・・・) BEGIN_MESSAGE_MAP(Cxxx, CDialog) ON_MESSAGE(UM_UNKO, OnUnko) END_MESSAGE_MAP() BOOL Cxxx::PreTranslateMessage(MSG* pMsg) { switch (pMsg->message){ case UM_UNKO: ・・・ // 飛んでくる break; } LRESULT Cxxx::OnBnSetfocusPictEditor(WPARAM wParam, LPARAM lParam) { ・・・ // 飛んでこない return 0; }
458 :
457 :2006/01/10(火) 10:57:29
関数名訂正 LRESULT Cxxx:OnUnko(WPARAM wParam, LPARAM lParam) { ・・・ // 飛んでこない return 0; }
デバッガで追えばぁ〜
461 :
457 :2006/01/10(火) 11:27:09
MFCスレ行ってきますm(_ _)m
ON_MESSAGE ユーザー定義メッセージは、通常、WM_USER から 0x7FFF の範囲で定義します。
現在はユーザー定義メッセージはWM_APPから。
464 :
1/2 :2006/01/11(水) 00:49:59
・環境 XP SP2 Visual Studio 6.0(VC++6.0) ・現象 ExcelVBAから呼び出す収束計算用のWin32DLLを作成しています。 問題の箇所は y = (x - a) / b; 変数はすべてdouble型です。 VBAでマクロを繰り返し実行する際、1回目で当該箇所を実行すると 右辺と左辺は等しくなるのですが、2回目以降では左辺の値が異なっていることがあります。 有効桁数が16桁とごくわずかな誤差ですが、最終的に大きくなってしまうので無視できません。 対処方法(できれば原因も)をご教授ください。
465 :
2/2 :2006/01/11(水) 00:50:34
例 a = 4.047; b = 1.8413; x = 0.052; // 中略 y = (x - a) / b; ウォッチウィンドウにて、以下の値となりました。 【1回目】 a 4.0469999999999997 b 1.8412999999999999 x 0.051999999999999998 (x - a) / b -2.1696627382827347 …右辺 y -2.1696627382827347 …左辺 【2回目以降】 a, b, x 同上 (x - a) / b -2.1696627382827347 …右辺 y -2.1696627382827351 …左辺 ※1 y = (0.052 - 4.047) / 1.8413; を実行した場合は、2回目以降も現象は再現しません。 ただし、y = (x - 4.047) / 1.8413; のように右辺の項のどれか1つでも変数の場合は再現します。 ※2 上の例で x = 0.056; のときは(a、bはそのまま)、再現しません。
466 :
デフォルトの名無しさん :2006/01/11(水) 01:10:27
>>465 念のため、全部明示的にdoubleにキャストして試してみては?
原因:恐らく変換誤差。 対処法: ・doubleの精度ギリギリまで使おうとせずに丸める ・long doubleを使う。 まぁ、ソース晒して味噌。
やっぱり問題の箇所のソース出した方がいいかもね。 その部分だけconsoleで試してみたけど、再現しなかったよ。 #include <stdio.h> int main(int argc, char *argv[]) { double a=4.047; double b=1.8413; double x=0.052; double y=0.; int i; for(i=0;i<=1;i++){ y=(x-a)/b; printf("y =%.16lf\n",y); printf("raw =%.16lf\n",(x-a)/b ); } getchar(); return 0; }
やっぱ精度の問題じゃね? gccの場合そのままだと再現しなかったけどlong doubleにキャストしたら再現したから。 16桁の精度が必要なら、long doubleを使うしかないと思うよ。 (long double) y =-2.1696627382827351 (x - a) / (long double) b =-2.1696627382827349
__int64使え
下2つは個人的な感情でどうでもいいな
> まるめごさ > 丸め誤差 > 【現象】 > ・あ〜恐ろしい。
>>471 折角の用語辞典も下2つを入れてるだけで台無しだよな
別に2進数に限らずとも正しく表現できないと思うのだが。
>>477 いや、等号で結ばれていないから 0 < int < 65535 と解釈するべきだろ。
#どっちにしても蛸だが。
>>477 細かいこと言うと、これはC99の場合だが負数の表現は
・符号と絶対値
・2の補数
・1の補数
の3つの内、どれかである事は規定されてるがどれを使うかは処理系定義な上
例えば2の補数において符号ビットが1、他は0の物をどう扱うかも処理系定義
だから32bit計算機=-2^16<int<2^16-1だとは言い切れないわけだが
480 :
478 :2006/01/11(水) 15:15:13
>>479 いや、>477は-16乗を指摘したいのだろうよ。恐らくは31乗なのだろうから。
482 :
477 :2006/01/11(水) 15:34:31
>>478 あーそうか、確かにw
>>481 判ってたら何で
>>479 みたいなこと書くかなぁ。
2の-16乗って0.00000152587890625でしょうが。
それに、仮に2の16乗だとしても65536だよ。
32ビット計算機でそんなint幅(高々17ビット分)を仮定するようなコンパイラがあったら逆に凄いと思うぞ。
>>482 面倒だったのでその辺は無視した
6行目までからで分かると思うが、下限が2^○とは限らないぞってことが言いたかっただけ
484 :
464 :2006/01/11(水) 19:06:08
会社で聞いてみたところ、「最初にVBAから呼び出したときに、CPUの2次キャッシュにゴミが残ってしまい 2回目以降の呼び出しのときに代入された値が変わってくるのでは」と言われました。 VC++側のコーディングでは回避不可能かも、とのことです… ちなみにP4 2.4Gです。
>>484 いいか、そいつが同僚か上司かは知らんが
そいつを窓から投げ捨てろ
投げ捨てろー!
488 :
464 :2006/01/11(水) 21:22:01
>>487 long double型へのキャストは試しましたが解決しませんでした。
サンプル作ったので帰ったらうpします。
489 :
464 :2006/01/11(水) 23:11:43
サンプルです。 ・Win32DLLを新規作成して以下の関数をエクスポートします。 extern "C" __declspec(dllexport) int __cdecl Gosa() { double a = 4.047; double b = 1.8413; double x = 0.052; double y = 0; y = (x - a) / b; return 0; } (続く)
490 :
464 :2006/01/11(水) 23:23:07
※
>>489 補足 return 0; にブレークポイント設定します。
・関数を呼び出すExcelマクロを作成します。
Excelファイルはdebugフォルダに置きます。
Option Explicit
Public Declare Function Gosa Lib "GosaTest.dll" () As Integer
Sub main()
ChDir ThisWorkbook.Path
Gosa
End Sub
・VC++のデバッグオプションで実行ファイル:Excel.exe、コマンド引数:上記Excelファイルのパス、として
デバッグ実行します。
・Excelファイルが開いたら上記マクロを実行します。
で、結果は
>>465 の通りです。
>>489-490 Debugモードだと確かに再現するね。
Releaseモードだと再現しない(2回目以降も同じ値が出てくる)。
最初
>>464-465 を見たときは最適化オプションの中の/Opの問題かなと思ったけど、
どうやら違うようだ。
なんでだろうね?
EXCELがFPUを拡張精度にしてしまうからだと思う。 何で2回目からかはわからないが。(ウチの環境では1回目から拡張精度で計算の数値) ウォッチの (x - a) / bはVC++側で計算してるので倍精度で計算の結果になっていると思われ。 _controlfp等でで制御してやればいいと思ふ。精度戻すの忘れずに。
494 :
464 :2006/01/12(木) 11:34:22
495 :
デフォルトの名無しさん :2006/01/12(木) 21:30:54
マルチスレッド初挑戦でいきなりはまってしまいました。 _beginthreadで起動した2つのスレッドに対し、 WaitForMultipleObjectsで終了待機させているのですが スレッドの実行が一瞬で終わってしまうケースで WaitForMultipleObjects呼出時点でスレッドが既に 終了していると、戻り値がWAIT_FAILEDになってしまいます。 このような状況に、どのように対処したらよいのでしょうか。 Visual C++ 6.0です。よろしくお願いします。
>>495 _beginthreadexでCREATE_SUSPEND
>>496 CREATE_SUSPENDにしなくても、_beginthreadexならスレッドが終了しても
CloseHandleするまでハンドルが生きてるから大丈夫。
CREATE_SUSPENDじゃなくてCREATE_SUSPENDEDなんだな。 MSDNが間違ってる。 ちなみにCloseHandleするなって書いてあるけど ホントにしなくていいんだよな。
というか、_beginthreadはインターフェースが脳死なので使うな、 ってどっかに書いてあったような。
>>498 begintheadなら本当に要らない。exなら要る。
VC++.NETです DLLを作成するプロジェクトから出力されたhoge.libを 別のプロジェクトで#pragma comment( lib, "hoge.lib")したのですが 『fatal error LNK1104: コンパイラは、ファイル 'hoge.lib' を開くことができません。』 になってしまいました・・・ 環境変数LIBはちゃんと書き換えました、PCの再起動もしました hoge.libのアクセス権が問題なのかと思い同じソリューションで動かしていた DLLを作成する側のプロジェクトをソリューションから削除して再起動しましたが、 同じエラーがやはり発生してしまいます。 どなたかご教示お願いしますです
>>502 絶対パスのときはうまくいきました。
環境変数の書き方は
D:\Hoge_a\Lib\;D:\Hoge_b\Lib\;
見たいな書き方でいいはずですよね…
あ、OSはXPです。
>>503 パスの最後の円マークはいらんようような希ガス
ツール>オプション>project>VC++ディレクトリ>ライブラリファイル でいけました LIB書きかえるだけじゃだめなんですね・・・
classって便利?
>>506 そんなこと聞いてるようじゃ便利には使えない。
>>508 そんなこと聞いてるようじゃ便利には使えない。
ぜな?
ぜ〜な、ぜ〜な、ぜ〜ながっ効くー
ビットマップファイルのRGB値を見るような関数ってあるんでしょうか? 教えてください。
あるよ。
ありがとうございます。 できれば具体的な関数を教えてもらえないでしょうか。 ぐぐってみたり、ランゲージリファレンスを調べてみたんですが、 わかりませんでした。 宜しくお願いします。
ありがとうございます。 グーグルの検索も参考になりました。 本当にありがとうございました。 がんばってRGB値ゲッツします。
常駐するDLLって作れるのでしょうか。 と言うのは、DLLに定義した関数をコールしたときに、 内部でrand()を使いたいのですが、どこでsrand()して よいか分からないので、DLLを常駐プログラムのように できれば解決するのかなと思ったからです。
関数の頭でsrandすりゃいいじゃん
>>518 srand(time(NULL))とかsrand(GetTickCount())とかは
入れてみたのですが、1秒以内や1m秒以内にDLLが
呼ばれるとrand()の値が同じになってしまうので、それを
なんとか回避したいのです。
よく分からんがstatic付けたらどうなる?
>>520 色んなプログラムから呼ばれるDLLなので(?)
関係なさそうです。
つまり複数のアプリケーションから呼ばれるわけ? DllMainでGetTickCountでもして乱数の種を一回だけ設定すればどう?
>>523 やってみました!
結局プロセス毎にDllMainが呼ばれてしまうので、
srand()が1回だけ、というのはムリみたいです。
MMFを使ったりとか別の方法を考えてみます。
>>524 おまえは一ミリ秒毎にプロセスからアタッチするのか?
もうQueryPerformanceCounter()でも何でも好きなもの使え。
>>524 DLLでは全プロセスで共有されるグローバル変数を作れる。
別々のプロセスで同じ乱数系列になるのが不都合な理由がわからん。 そんな変わったことしたいなら自分で乱数関数作れば?
乱数 = 適当な値でありゃいいんだから、 各プロセスが、srand(::GetTickCount()) すりゃ事足りると思うんだが。
#pragma data_seg() SECTIONS SHARED 辺りが肝かも。
なんだ。srandを一回だけしか呼びたくないのか。
>>528 マシンスペックが高くなったら動かなくなるかもしれない
プログラムで満足なあなたは気にしなければいいでしょう。
537 :
534 :2006/01/22(日) 18:45:56
>>535 >マシンスペックが高くなったら動かなくなるかもしれないプログラム
まじです。どうやったら作れるのか教えてください。お願いします。
>>538 使ってみない。
>>537 教えてやってもいいけど、「そんなのこうすればいいじゃん」って
反論はなしだぜ。お前はどうやったら作れるのか、って聞いてるんだから。
ここまでヒントを出してもお前には作れないか?
>>537 アホ?Sleepでムリヤリタイミングずらして動かしてるプログラムとか
srand(GetTickCount())と1ミリ秒以上かかることを前提とした
ロジックの組み合わせとか、考えりゃいくらでもできるでしょ。
>>540 Sleepのほうはなんとなくだが理解できる。
でもsrand(GetTickCount())のほうはやっぱりわからない。
DllMainに置けば十分としか思えない。
そんな頻繁にロード・アンロードされるほうこそ異常だ。
そもそも複数のプロセスで同じ乱数系列になることの不都合が分からん
528の指摘もそれだったんだが、532は真性のアフォなので噛み合わんわけだ もう放置しようぜタコな質問しておいて上から物を言える奴にまともなやつは居らん
std::vector v;の中身をウォッチウィンドウで見るには v._Myfirst,5 とやればいいと知ったのですが、mapやsetも同じように 簡単に見る方法はないでしょうか?
>>541 どしてDllMainに置けば十分なの?
>>543 >>534 のように話をすりかえた人に丁寧にご対応して差し上げているわけです。
あなたはただ単に話しについていけていないようなので、
書き込むのをやめるのは正解です。
547 :
デフォルトの名無しさん :2006/01/23(月) 22:49:56
VCってプロジェクト配下のディスク容量があまりにも大食いするじゃないか。 それにIDEでデバッグ実行できずに固まるし。 自分の会社のOS上の製品なのに、何でこんなぼろい物になるのかね。 他のどのベンダーよりも、OSを開発した会社自身が一番OSを知り尽くしてるから、 一番まともな物を作れて当たり前なのに。
>>547 ここで言っても意味ないですけど。同意すればいいの?
ただの一時ファイルだから気にするな パソコン初心者スレじゃないんだし
>>547 自社のOSを知り尽くしていないと作れないようなソフトを自社で作ると
独禁法的に司法省から睨まれてしまうんだろう。
15年以上前からそう言われている。
MSのソフトはある程度のバグをわざと入れているとしても全く驚くに値しないね。
ステップ実行中にOSごと飛ぶのもわざとか。やるな。
>>546 そりゃそうだよ脳タリンの糞話についていってやる気は無いスキにしろや
>>552 同意しなくていいからC++ BuilderかDelphiに移行すればいいのかも試練。
>>553 書き込むのをやめるのが正解だったのに。本格的な脳タリンさんですねw
VC++.netのダイアログベースで画像を撮影するソフトを作っています。 現在、撮影ボタンを押すとカメラに写っている画像を1枚だけ保存します。 これを、ボタンを押したら1秒毎に自動で保存し、停止ボタンを押したら、 保存するのを終了させたいと思っています。 しかし、ボタンを押して自動保存し、停止を押すと終了のしかたがわかりません。 どうやったら、いいでしょうか?
VC2005Expressでステップ実行にてスレッドを使っているプログラムをデバックすると 高頻度でハングアップしたような状態になります。 解決方法はありますでしょうか? OSはMCE2002sp2です。 コード自体に問題があるのかと思い簡単なものにして見たのですが やはり同じ現状が起きました。スレッドを使用しないプログラムでは まったくその現象は起きないようです。 スレッドは_beginthreadexを使用してます。 解決方法があればよろしくお願いします。
559 :
556 :2006/01/24(火) 04:18:27
言葉足らずですみません。 タイマーを使えば1秒間ずつ、というのはわかるのですが、 停止を押すまで同じ処理を繰り返す方法、および停止させる方法が わからないのです。 whileなどでループさせると、ループしている間はボタンが押せない状態 となってしまいますし・・・・
そのボタンで、タイマの起動、終了をすればいいんだろ。 whileでループさせる必要は無い。
タイマーが解って無い希ガス
>>545 srandは1度だけ呼べば良い。
DllMainはDLLのロード時に呼ばれるからちょうど良い。
564 :
デフォルトの名無しさん :2006/01/24(火) 19:42:34
すみません。今学校でVC.net使ってる房ですが、win32プロジェクトで作った データ上で(画像切り替えとかそんなレベル)Formで作った別のプログラムを 別ウィンドウで起動させたいのですが、呼び出し?とかリンク?の仕方がわかりません 何冊か参考書を見たのですがわからないので詳しい方、ご教授お願いできませんか?
何冊も参考書みてわからない奴に教える自身は無い。
566 :
デフォルトの名無しさん :2006/01/24(火) 20:06:21
何冊か見てわからない。というより、「該当する項目がわからない」 もしくは「そう言った技術が乗ってない(確認できた範囲で)くらい 初級の本」だったりするので、お手数ですが、ご教授お願いします
学校で習ってるんなら先生に聞けよ。
外部プログラムの起動でいいのか? それだったら簡単だから誰か教えてくれるはず。
COM interopと言う話なのかもしれない
アホか って言うのは簡単だけど具体的に何がアホなのかを説明しないのは やっぱりほころびが出るのを恐れてるから?
>>572 この場合さすがに説明するのもアホらしいってだけじゃないかな?
VCの右クリック−>定義位置の表示などで使う、.bscファイルをコピーするプログラムが作りたいのですが、 読み込むことすら出来ません。 普通のテキストとは違うような感じなんのですが、 何かヒントをいただけないでしょうか? やりたいことは、単にコピーの練習なのですが。 間違っているだけで、普通にできるのでしょうか? int c; if ((fp = fopen("E:\\Exercise\\BDDownVer\\Debug\\BDDownVer.bsc", "r")) == NULL) { printf("file open error!!\n"); exit(1); } if((fout = fopen("E:\\Exercise\\BDDownVer\\Debug\\out.bsc","w")) == NULL){ printf("file open error!!\n"); exit(1); } while (c = fgetc(fp) != EOF) { fputc(c,fout); } fclose(fp); fclose(fout); こんな感じでやってみたのですが・・・。
MSDNに加入するとCD-Rが送られてくるけど オンラインドキュメントと内容は違うの??
>>574 バイナリモードで開け。
あと、もしかしたらプロジェクトを開いている間はVC++がファイルを排他アクセスしていて、
他のプログラムは読み書きできないようになっているかもしれない。
>>574 > while (c = fgetc(fp) != EOF) {
これをもう一度確認すること。
ちなみに CopyFile でぐぐると幸せかもしれん。
>>572 「やっぱり」の使い方が意味不明だし、そこまで的をはずしてると
反論しにくいよね。うまい!
>>563 DllMain()
srand(〜)
func()
rand()
しても意味ないでしょ?ってこと。
(゚д゚;;;;;;)
VC++6.0で質問です。 非常に初歩的なことなんですが、VBでフォームに部品を貼り付けていくように VC++でウィンドウに部品(ボタンなど)を貼り付けるにはメインウィンドウの 他にダイアログを作成すれば良いようですが、ダイアログを作成せずにメイン ウィンドウ1枚のみで同じことをするにはどうすれば良いのでしょうか?
メインウィンドウをダイアログで作成すればよい
そんな簡単な方法があったとは・・・ 今メインの環境が壊れてて復元中なので後で試してみます。 ありがとう。
584 :
583 :2006/01/25(水) 15:56:42
駄目だぁ、やっぱりわからん・・・ ネット見ても欲しい情報がまったく見つからない。 Windows3.1+MS-CでWindowsアプリ作った経験が有って VB5〜VB.netの開発環境に慣れてる人間は、どんな本を 読めば参考になるでしょうか? MSDNでは何の役にも立ちそうに無いです。。。
本屋行けよ
>>584 MFCならプロジェクトの作成のときにウィザードでダイアログアプリが(ry
もちろん本屋には探しに行きますが、 近所の本屋にはろくな本が無かったので2時間かけて大きな 本屋に行くつもりですが、似たような境遇の方が居れば どの本が良いかアドバイスいただきたいと思いまして。 最悪、本屋で1日粘ることになりそうですね。
Winmainから直接ダイアログ出すだけ 他になにもいらない
>>586 ありがとう。何とか取っ掛かりが掴めました。
MFCについては本買って読んでみます。
>>588 MS-CではWinmainとイベントループでプログラミングしてたと
思いますが、VBの様にGUI環境で部品の微調整をしたかったんです。
590 :
デフォルトの名無しさん :2006/01/25(水) 17:13:32
excelとかMDIのアプリならアクティブになるだろ MFCでMDIのやつ作ってもなるし
592 :
:デフォルトの名無しさん :2006/01/25(水) 17:23:14
DISC2をいれてみたのですが「現在CDにあるファイル」 とでてでうすればいかわかりません
593 :
:デフォルトの名無しさん :2006/01/25(水) 17:38:01
すいません、わかりました592
594 :
デフォルトの名無しさん :2006/01/25(水) 22:16:38
>>577 今もういちど見てみました。
ボケていました。while( (c=fgetc(fp) !=EOF )ですね。
やってみたところ問題なくコピーできました。
ありがとうございました。
ああ、while( (c=fgetc(fp))!= EOF)の間違いです。
VCのアウトラインを制御したいんだけど、例えばC#でいうところの#regionみたいなやつ。 いい方法ありませんか? あんまりいじらない部分のソースを簡単に折り畳みたい。 クラス毎に折り畳んだりしたいのよ。
簡単に折り畳めるけど C#知らんし何言ってんだか意味不明
クラス毎に折りたたむって普通に出来るだろ まぁ#region使えば便利だとは思うがな
SQLExecDirectで複数行をUPDATEするSQLを実行させて コミットしているのだけど、なぜかDBに反映されない。 デバッグモードだとうまく実行される。 これってコミット完了前にプログラムが終了してしまうと ダメってことなんだろうか。対策あるのかな。Sleep?
602 :
598 :2006/01/29(日) 00:25:39
>>599-600 自分の「好きな範囲で」折り畳みたいんだ。
例えば
class A {
#region
class A(){};
void hoge();
public:
#endregion
// アクセッサ
getA();
setA();
}
という感じで書いて折り畳むと
class A {
+...
// アクセッサ
getA();
setA();
}
という感じで見ることができるんだ。よく使う機能だけを表示させたりできる。
調べた限りではC#とVBにはあるがVC++にはねーな(´・ω・`)
603 :
デフォルトの名無しさん :2006/01/29(日) 00:35:24
プログラマー板から誘導されてきました VisualC++ ExpressEditionをダウソして、本を読みつつ勉強しているのですが VisualC++6.0用の教材なせいかerrorが発生してしまいサンプルソースのビルドができないです。 エロイ人いたら解決法を教えてくださいです <ソース> #include "windows.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SYSTEMTIME tm; char s[80]; int iRet; GetLocalTime(&tm); if ((tm.wHour >= 0) && (tm.wHour < 12)) { lstrcpy(s, "おはようございます"); } else if (tm.wHour < 17) { lstrcpy(s, "こんにちは"); } else { lstrcpy(s, "こんばんは"); } iRet = MessageBox(NULL,s,"MsgBox",MB_OK); return 0; }
604 :
603 :2006/01/29(日) 00:36:31
<エラー> ------ ビルド開始: プロジェクト: Vc, 構成: Debug Win32 ------ コンパイルしています... Msg.cpp e:\program\winapp\vc\msg.cpp(15) : error C2664: 'lstrcpyW' : 1 番目の引数を 'char [80]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 e:\program\winapp\vc\msg.cpp(17) : error C2664: 'lstrcpyW' : 1 番目の引数を 'char [80]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 e:\program\winapp\vc\msg.cpp(19) : error C2664: 'lstrcpyW' : 1 番目の引数を 'char [80]' から 'LPWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 e:\program\winapp\vc\msg.cpp(22) : error C2664: 'MessageBoxW' : 2 番目の引数を 'char [80]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 ビルドログは "file://e:\program\winapp\Vc\Debug\BuildLog.htm" に保存されました。 Vc - エラー 4、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ========== こんな感じです。
>>603 プロジェクトのプロパティで
「構成プロパティ」を選びプロジェクトの既定値「文字セット」を”マルチバイト文字セットを使用する”
606 :
603 :2006/01/29(日) 00:53:55
>>605 即レス感謝です。
無事ビルドすることができました。
本当に親切にどうもありがとう
クラスライブラリをリンクさせようとして 外部シンボルが未解決と言われて エラーになっています。 ライブラリ側が上手く作成されていない為に メソッドがリンクされないと思うのですが、 ライブラリ(.lib)内のメソッドを参照する方法は ありませんか?(unixのnmみたいなの) 環境はwin2k、VC++6.0です。よろしくお願いします。
>>598 -適当に選択範囲を作る
-右クリック -> アウトライン
-選択範囲を非表示
609 :
607 :2006/01/29(日) 11:34:31
追記、ライブラリにダイアログを1つ持たせているのですが、 ダイアログのないクラスライブラリではリンクできています。 ダイアログをライブラリに持たせられないのでしょうか... アドバイスありましたらよろしくお願いします。
つまり自作のダイアログを含むクラスをlibにしてリンクしたら なにやらリンクエラーがでて、ダイアログをはずしてlibを作ってみたら リンクエラーがでないってこと? エラーメッセージを書いたほうがいい。
>>601 みたいな現象って俺だけかな。
ちなみにDBはMSDE2000で
開発環境は
Windows2000、Visual C++ 6.0
>>607 libはリソースをもてない。
dllにしろ。
WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server) って出るんですけどどういう意味ですか? またどのようにwarningを消すのが正しいのですか?
>>613 Windowsプログラミングの際にはWindowsのどのバージョンを
想定しているかを指定してやる必要がある。
それがないのでふざけんじゃねぇデフォルトにあわせっぞゴルァといっている。
怖くてガクブルならwindows.hをincludeする前にWINVERを適切な値でdefineする。
>>614 アプリを動かすターゲットのWindowsのバージョンをコンパイラに教えてあげるんですね。
ありがとうございます。
大変よくわかりました。
2005で作られたMPCを.NET2003でビルドしたらエラーが出ますた MainFrm.cpp(180) : error C2440: 'static_cast' : 'LRESULT (__thiscall CMainFrame: :* )(CPoint)' から 'UINT (__thiscall CWnd::* )(CPoint)' に変換できません。 スコープ内でこの名前を持つ関数でターゲット型に一致するものはありません。 エラーはこれだけっぽいのですがへるぷみぃ
617 :
デフォルトの名無しさん :2006/01/30(月) 17:10:21
共通関数(dll)はどう呼び出すのですか?
>>617 配布されているDLLならヘッダーとインポートライブラリがあるだろ。
自分で作ったのならインポートライブラリはDLLのリンク時に作られているはず。
ヘッダーがなければ__declspec(dllimport)をつけて関数宣言すればよい。
インポートライブラリはリンカに渡してやればよい。
あるいは明示的リンクと言う方法もある。
ActiveXやCOMのDLLなら#import、.NetのDLLなら#using。
これ以上詳しく知りたければお前も詳しく書け。
619 :
デフォルトの名無しさん :2006/01/30(月) 20:10:49
超初心者です VisualC++ ExpressEdition2005のCLRって Common Language Runtimeのことですか? だとしたら.NETってことでつか?
なんか面白いこと書こうと思ったら、
>>620 が素で答えやがった。氏ね
もしかして、SQLExecDirectで実行できるSQL文の長さって 制限ありますか?
Visual C++ Express Edition 2005 クラス"class"のメンバに char string[30+1]; と宣言すると 'string' をマネージ 'class' のメンバとして定義できません。混合型はサポートされていません とコンパイル時に警告が出ます。 何がいけないのでしょうか・・・
バカばかりだな
VisualC++ ExpressEdition2005入れたんですけどコンパイルするとwindows.hがないって怒られます MinGWのwindows.hを引っ張ってきてもいいですか?
根本的に解決しなくても良いならどうぞ。
自己解決しましたPlatform SDK入れればいいようです
629 :
デフォルトの名無しさん :2006/02/01(水) 17:44:35
Visual Studio .NET 2003 で C++ の勉強しているのですが質問です。 System::Stringクラスを使って2つの文字列結合したいのですが やり方がどうにもわかりません。 joinメソッドが臭いのですがMSDNみても難しくてわかりません・・・ ご教授をお願いします。
C++の勉強するんなら.NET Framework使わんと、アンマネージドでやれ
>>629 String.Concat (Object, Object) 指定した 2 つのオブジェクトの String 形式を連結します。
思いっきり書いてあるじゃねーか
つーか、MSDNが難しいなんて言うような奴には向いてないだろ
回線切って首吊って氏ね
×MSDNみても難しくてわかりません ○MSDNみるのがめんどくさいです
それを言っちゃお終いよ
なんで C++ なのに std::string つかわないんだ?
もしかして、 C++ と C++/CLI の区別を理解してないとか。
C♯から適当に乗り換えたリア厨だな
なんでお前らはそんなに必死こいて.netの存在を否定してんだ?w
この内容で.netの存在を否定してると言えるなんてすげーなw
ソフト屋は性格悪いの多いというのは俺の思い込みだろうか
ソフト屋は性格悪いの多いというのは俺の思い込みだろうか
>>631 まず、俺は君みたいに頭が良くないのは確実だが、超低脳というほどではなく、ごく標準的
なレベルだと思っています(思い込みかも知れんが)。
MSDNって一度本や何かで勉強したことのある関数ならば非常に分かりやすいと思うけど、
いきなりMSDNだけで使用方法を編み出そうとすると難解なもの(というか簡単なんだけど回
答にたどり着けないもの)が数多く存在するように感じます。
MSDNってそんなに分かりやすいですか?
>使用方法を編み出そうとすると 何故編み出す必要が?
すごく卑近な例ですが、少し前に下記の仕様の関数を作成する必要がありました。 現在実行されているスレッドの内、ウインドウを持つスレッドをピックアップして表示する。 これをMSDNから得られる情報だけで実装できる人は俺の想像を超えますね。
MSDNはリファレンスだろ? 実装が載ってるわけが無い。 それに、使用してるクラスのメソッドを検索するなり順番に見ていくなりすれば見つかる。 頭なんてつかわない。 オマイはその手間を惜しんだだけ。
>>647 あなたは646の関数をMSDN以外を見ることなく実装できるタイプの人ですか?
もしそうであればあなたはかなり限られた頭のいい人の部類だと思いますよ。
>
誤爆した・・シツレイ
>System::Stringクラスを使って2つの文字列結合したいのですが
なんでこれが、
>>646 になるんだw
∩∩ ( ・(x)・) < 出番?
>つーか、MSDNが難しいなんて言うような奴には向いてないだろ というコメントに対する反論です。 「難しい」という表現が何を意味するかは分かりませんが、普通は やりたいことが先にあって、それを調べるためにドキュメントは存 在すると思います。 やりたいことを実現する関数を知っていて、それのリファレンスを 調べるという意味ではMSDNは分かりやすいですが、やりたいこと を実現するために何が必要かを調べるという意味ではMSDNは難 解だと思います。 俺は629ではないですが、629は「2つの文字列結合したい」というや りたいことがあって、それを実現するには何が必要か分かっていな い状況です。そういう人物にとって「MSDNみても難しくてわかりませ ん」というのは当然だと思うのです。
> Visual Studio .NET 2003 で C++ の勉強しているのですが質問です。 > System::Stringクラスを使って2つの文字列結合したいのですが > やり方がどうにもわかりません。 MSDNみりゃいいじゃん
>>652 もちつけ。
> System::Stringクラスを使って2つの文字列結合したいのですが
これだけわかっているなら、MSDNは有効じゃろ?
>>652 MSDNをいきなり読んでも分からないのは当然。
それを読めるように努力する気の無い奴は、あきらかに向いて無いでしょ。
唯一の公式リファレンスなんだから。
MSDNみても難しくてわかりません
↓
誰か教えて
というのは当然だと?
656 :
644 :2006/02/01(水) 23:37:28
白いものを黒というディベートの練習です。 ちと失敗か・・・
MSDNだけでプロセス列挙できたよ。
>>630 意味が分かりません。筋が通るように説明するか
死んでください。
>>652 既に
>>653 が書いてくれてるのが全てだが
System::Stringを使って2つの文字列を結合したいと分かってるなら
MSDNのSystem::Stringクラスのメンバを見るなんてのは
至極当然の発想だし、またそれをすれば見つからない筈がない
だって書いてあるんだから
メンバ一覧を見るというのが思いつかないならどうしようもない低脳だな
>>658 なんで筋が通らないの?
C++ を勉強したいのに、
C++/CLI のコードを書こうとしているから、
>>630 はそういってるだけじゃん。
>>660 意味が分かりません。筋が通るように説明するか
死んでください。
662 :
661 :2006/02/02(木) 07:17:23
もしレスするなら、どの部分が筋が通っていないかをよーく 考えてからレスしてください。全く的がはずれています。 分からないならレスしないでください。
663 :
デフォルトの名無しさん :2006/02/02(木) 07:44:34
>>662 「Visual Studio .NET 2003 で C++ の勉強している」
って書いているのに std::string を使わずに
「System::Stringクラスを使って2つの文字列結合したい」
って言っているから、
>>630 はそれは C++ じゃなくて
マネージドC++でしょ、って指摘している。
C++ の勉強するならマネージドC++を前提に勉強するのは
あまり賢いとは言えないよ、って親切に指摘してくれているだけ。
それにマネージドC++ はすでに C++/CLI に置き換えられて
いるので、マネージドC++に慣れることにはあまり意味がない。
664 :
661 :2006/02/02(木) 07:51:29
>>663 言ってる事が分かりません。
訳の分からないレスはやめて!
665 :
デフォルトの名無しさん :2006/02/02(木) 08:12:20
>>664 意味が分かりません。筋が通るように説明するか
死んでください。
ようするにSystem::Stringクラスは過去の遺物だし あんまり使われなかったから考古学的な価値もない。
おまいらやさしいな。 よくつき合ってられるな。
669 :
デフォルトの名無しさん :2006/02/02(木) 16:52:15
C/C++のお薦めの解説本ないでしょうか?
スレ違いだ
671 :
デフォルトの名無しさん :2006/02/02(木) 18:17:30
超初心者です。ご教授願えますか? 昔作られたシステムを、新たに作り変える事になりました。 VBで作られた元ソースがあり、なるべくそれ本体には触れずに 呼び出されているOCXやDLLを作り変えようとしております。 VBのソースを見ていると、OCXからユーザが独自で作ったイベントが発行され VBがそのイベントをキャッチして処理が行われている箇所が あります。 VC++(もしくはC)で、OCXをつくり、同様の名称を持つ イベントを発生させて、VB側でキャッチできるようにしたいのですが ネットで調べても、調べきれておりません。 (VBでは、RaiseEventという関数を使って、外側にイベントを発生させておりました) 何かサンプルになるHPなどありましたら ご教授願います。
>>671 超初心者ならそんな作り変えをするべきではない。
673 :
デフォルトの名無しさん :2006/02/02(木) 19:03:32
StyleをWS_POPUP | WS_VISIBLEにして、 CreateWindow()を呼んでいるのですが、 ウィンドウがタスクバーに表示されてしまいます。 CreateWindowEx()の拡張スタイルでWS_EX_TOOLWINDOWをつければ タスクバーに表示させないようにすることは可能なのですが、この方法ですと細いタイトルバーができてしまいます。 タイトルバーを表示させたくないのでポップアップウィンドウとして作りたいのです。 環境はVC++6、MFCは使っていません。
>>674 チラシに向かって何話しかけてんだ?オマイ・・・
676 :
673 :2006/02/02(木) 19:34:39
すみません。肝心な質問が抜けていました。 タイトルバーを表示させずにタスクバーに表示されないようなウィンドウをつくりにはどのような方法があるのでしょうか。 どなたかご教授くださいませ。
WS_CAPTION付けずにCreateWindowしなさい
そのようなウィンドウをつくりにはWS_EX_TOOLWINDOWを指定しなければいいだけでは?
679 :
デフォルトの名無しさん :2006/02/02(木) 20:02:52
hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, szWindowClass, szTitle, WS_POPUP | WS_VISIBLE,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); とCreateWindowExを呼んでみたところ、タイトルバーなし、タスクバーに非表示が実現できました。 お騒がせして申し訳ありません。 レスをくださった方々、ありがとうございました。
なんでWIM32APIを使おうとすると こんなに殺伐とするのか、あぁーマンドクサイ
× WIM32API ○ WIN32API
>>682 ここにもアホがいる。ご教授でもいいんだよ。
本読めよな。
>>683 いや、683が癒されることなど永遠にないだろう
>>687 だって、癒されないのは本人の問題でしかないからね。ここでそんなもん議論する必要は無い。
(しかし、683は粘着を繰り返す、それだけのことだよ)
690 :
デフォルトの名無しさん :2006/02/03(金) 20:32:29
そろそろスタックが溢れそうです
なんだかよくわかりませんが、とりあえずスタックポインタをリセットしておきますね。
>690 ざんねん。末尾再帰が最適化されてしまった。
695 :
デフォルトの名無しさん :2006/02/04(土) 08:49:39
693=689
---終了--- 次の質問者どうぞ
始めまして。 本当に初心者です。 Visual Studio .NET 2003の入門本を片手にVisual Studio .NET 2005の勉強を 本日始めました。 本の通りにやってみたのですが、ビルドするとエラーが出てしまいます。 【ソース】 void Cvcsmp1View::OnDraw(CDC* pDC) { Cvcsmp1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDC->TextOut(0,0,"1111"); if (!pDoc) return; // TODO: この場所にネイティブ データ用の描画コードを追加します。 } 【エラー】 BOOL CDC::TextOutW(int,int,LPCTSTR,int)' : 3 番目の引数を 'const char [5]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照) 【MFCアプリケーション】でプロジェクト作成後「pDC->TextOutW(0,0,"1111");」 以外は一切変更していません。 最初の1歩目ですので自力解決の道筋さえ見えない状況です。 どなたかご教授ください。
L
>>699 "1111"をTEXT("1111")にする。
>>701 ありがとうございます。
解決しましたm(._.)m
ちなみに
>>605 の方法でもうまく動きました。
このあたりの意味合いは、これから勉強してみます。
ありがとうございましたm(._.)m
ダイアログのスタティックテキストに変数を割り当て、 プログラム中でその変数を書き換え、UpdateData(FALSE) を行っています。 一応、書き換えること自体はできたのですが、高速で書き換えると、文字が点滅してしまうのです。 理想としては、ダイアログ上で数値が10000から0までキレイにカウントダウンしてほしいのですが、 書き換えるたびにチカチカして、どうしても汚いんです。 対処法はあるのでしょうか。よろしくお願いします。
>>703-704 DDX使う/使わないに関係なく、SetDlgItemText(IDC_TEXT1,strText);等、
を使っても、画面のリフレッシュレートと非同期に頻繁に描画すれば、
ちらつきが見えてしまうのは当然のこと。
始めまして
>>699 の方と同じように、2003の入門書で2005の勉強を始めましたが、本の通りに
書いていきなりエラーが出ました。・゚・(ノд`)・゚・。
<ソース>
String *name = textName->Text;
<エラー>
error C3699: '*' : この間接指定を型 'System::String' で使用できません
コンパイラは、解析を続行するために '*' を '^' で置き換えます。
textNameというテキストボックスのTextプロパティをnameというポインタに
入れると理解していますが、なぜエラーになるかわかれば教えてください。
Windowsフォームアプリケーションでプロジェクトを作成しています。
本では「.NET」の中の「Windowsフォームアプリケーション」と書かれていましたが
「.NET」が無かったので、「CLR」にあった同名で作成しています。
長文で申し訳ありませんm(._.)m
707 :
デフォルトの名無しさん :2006/02/08(水) 15:50:01
>>706 使いたい言語は C++ ?
それとも C++/CLI ?
まずはそれをはっきりさせないと。
見ている本はおそらく managed C++ の本だと思われ。
この3つの違いがもし分からなければ、
その辺調べてからの方がいいと思われる。
>>703 どうしても実現したければ、
メモリデバイスコンテキストに描画して、それをWM_PAINTのタイミングでダイアログ上にコピー
俗に言うダブルバッファリングという手法です
711 :
706 :2006/02/08(水) 16:23:31
>>707 VC.NETにはネイティブとマネージがあって、今回わたしが使おうとしているのは
マネージの方だと思ってます。
またマネージの方はCLR上で動作すると説明があったので「CLR」からプロジェクト
を作成しました。
Windowsアプリを作成したいと思っているので、マネージの方を勉強して行けば良いのかな?
と思ってますが、間違えでしょうか・・・
712 :
デフォルトの名無しさん :2006/02/08(水) 17:30:58
>>711 間違いです。
managed C++ は C++ の文法に違反しないように配慮しつつ
なんとか CLR 上で動く安全なコードを書けるように
拡張しようという試みです。しかしこれには限界があったため
C++ の文法を変更してあらたな言語 C++/CLI が出来ました。
Visual Studio 2005 からは C++/CLI を使います。
managed C++ はもはや使うべきではありません。
C++/CLI は新たな言語ですから、C++ には無い演算子
やキーワードなどもあります。例えば単項演算子^ や
gcnew がその例です。
というわけで、managed C++ は C++/CLI が生まれるための
あだ花だったと思い、あきらめてその本はポイしましょう。
managed C++ も C++/CLI も、CLR上で動くという点では
「マネージド」なので騙されがちです。
混乱しないようにしましょう。
>>711 ManagedC++ ≠ C++/CLI
オプションでManagedC++も使えるはず。
>Windowsアプリを作成したいと思っているので
NativeでもWindowsプログラミングは可能。
714 :
デフォルトの名無しさん :2006/02/08(水) 17:33:50
715 :
デフォルトの名無しさん :2006/02/08(水) 17:34:32
716 :
706 :2006/02/08(水) 18:00:27
みなさんありがとうございます。
皆さんの説明でよく分かりましたm(._.)m
初歩的な質問で申し訳ありませんでした。
>>714 さんがおっしゃってる方法はきっと手間がかかるんですよね?
それでも将来的に沢山の機能が実現できるのであれば、ネイティブ
を頑張ってみるつもりですが、とりあえず2005の本が出るまではVB
やVC#で勉強することも検討してみようと思います。
717 :
デフォルトの名無しさん :2006/02/08(水) 18:09:59
>>716 なんだ、C# が嫌じゃないんなら、
とりあえず C# で遊んでおけば無駄にはならないよ。
C# で使えるクラスはそっくり C++/CLI でも使えるわけだから。
俺は VB はほとんど使ったことないから
そっちはおすすめも止めもしない。
718 :
706 :2006/02/08(水) 18:20:45
>>717 アドバイスありがとうございます。
VC#嫌いじゃないので、考えて見ます^−^
ちと質問なんですけど ■環境:vc++6.0 SDI ウィンドウ背景色を設定するために OnEraseBkgndとOnDestroyをオーバーライドして 背景色をプライベートで以下のように宣言しました。 といってもあるサイトのコピーなんですけど。 CBrush m_BkgndBrush;//背景色を保持するブラシ HBRUSH m_hOldBkgndBrush;//以前の背景色のバックアップ HELP->キーワードからグラフィック オブジェクトを見たんですけど CBrushとHBRUSHの違いがよく意味わからんですたい。
HBRUSHはGDIオブジェクトのブラシをWin32APIで扱う識別子 CBrushはそれらの関連する(であろう)Win32APIをラッピングして 使いやすく?したMFCのクラス。
VS2003を使用していいます CWindowというクラスを作り、そのメソッドとして下記のようにCreateWindowを定義しました それをコンパイルすると、ヘッダのその定義のところで「error C2059: 構文エラー: '定数'」が発生します 何もエラーになるようなことはしてないと思うのですが、サッパリわかりません virtual BOOL CreateWindow( LPCTSTR lpszClass, LPCTSTR lpszTitle, DWORD dwStyle, int x = 0, int y = 0, int nWidth = 640, int nHeight = 480, HWND hWndParent = NULL, HMENU hMenu = NULL);
あっそ
724 :
721 :2006/02/09(木) 08:21:32
CreateWindow がどう定義されてるか調べてみれ
HWND CreateWindow(LPCTSTR, LPCTSTR, DWORD, int, int, int, int, HWND, HMENU,, HINSTANCE, LPVOID); ですが、それが何か?
727 :
721 :2006/02/09(木) 09:44:52
ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;
CreateWindowって存在しないのな。
関数名変えれば通る。CreateWndとか。
ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;
ほんまや・・・ CreateWindowってマクロだったんか・・・
user32.dll覗いたけどマジでないでやんの。
マクロなら、MSDNにマクロだって書いとけよMSめ・・・
構文エラーならその前にエラーがあるんじゃないの?
ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;
で、本当の721はまだいるの? WinUser.hの中で、CreateWindowはマクロとして定義されているので、 コンパイル時にはCreateWindow[AW]に置き換えられてしまうのがエラーの原因。 だから関数の名前変えなきゃだめ。
CreateWindowEx[AW]に置き換えるための、引数あわせでトラぶってるんじゃないの?
BCBを使い続けてきました Borlandは見捨てるそうです そんな僕に、やさしくVisual C++を教えて下さい 教えてくれるのなら、移行の決心が付きます
まずはExpressをDLしてみては。 今なら1年限定でただだから。
740 :
738 :2006/02/09(木) 15:31:53
ありがとうございます 早速調べてきます
VC6なんですけど、 #define PRINT(...) (printf("%s:%d ", __FILE__, __LINE__), printf(__VA_ARGS__)) こんな感じでデバッグマクロを定義したいんですけど、 「...」の部分でコンパイルエラーになります。 VC6だとマクロに可変長引数は使えないんですか?
>>741 はい。C99対応コンパイラじゃないと使えません。
レガシーなCコンパイラで似たようなことがしたいなら、
PRINT(("%d", 10))のように二重に囲むこと前提で
#define PRINT(x) printf x
とするくらいしかありません。
>>742 そーなのですか。。残念です。
ファイル名、ライン番号入れるのはすっぱりあきらめます。
.netで猫でもわかるのVC++のスクリーンセイバーのプログラムをコンパイルするのに ・scrnsave.lib ・comctl32.lib をリンクした訳ですが。以下のエラーが出て上手くいきません。 エラー1 error LNK2019: 未解決の外部シンボル _DefScreenSaverProc@16 が関数 _ScreenSaverProc@16 で参照されました。screen.obj エラー2 error LNK2001: 外部シンボル "_hMainInstance" は未解決です。screen.obj エラー3 error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。MSVCRTD.lib エラー4 fatal error LNK1120: 外部参照 3 が未解決です。C:\Documents and Settings\Owner\My Documents\Visual Studio 2005\Projects\screen\Debug\screen.exe 環境はVS2005です orz助けてください
猫はいつの間にか、VC2005のマネージドにまで手を伸ばしていたのか・・・
#include <scrnsave.h>
ヘッダファイルをインクルードしても駄目でした
エラー3 error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。MSVCRTD.lib WinMainすらエラーじゃないか アホか
scrnsave.libが正常にリンカに渡ってないような反応だなー。
pragmaかな
#pragma comment(lib, "パス/SCRNSAVE.LIB")
初心者にもお勧めのVC++解説HPはありますか? いろいろググって見たもののいまいちしっくりくるところがありません。 理想としては画像解説付きでVC++の基礎の基礎からサンプルプログラムを交えて解説され、 進んで行くにつれ電卓やテキストエディタ、ブラウザなど定番のアプリを作っていくようなところ。 つまり用語や用法の解説ではなく実際にプログラミングしながら学べるところです。 ちなみに私のスキルはVC++歴数日、解説書に一通り目を通した程度。 C、C++でなら一通りのプログラムは書ける程度です。
本買え
当然本屋は真っ先に探しています。
ん?いや本屋で探し回ったけど良いのが見つからなかったからWEB検索してたのです。(数冊買いましたが) いや、特にそういうHP無いのなら諦めて今あるもので勉強しようと思います。
今は頭が悪いのを、本のせいにするのが流行です。
759 :
質問です!! :2006/02/13(月) 14:28:22
CString ss; wchar_t wc = 'あ'; とある時、wc経由でssの文字列を"あ"としたいのですが、 × ss = wc; × ss.Format("%c", wc); いずれも、上手くいきませんでした。 ssは"?"が入ってる・・・ 他に方法はありますでしょうか? CStrnig::Format()に、マルチバイト文字を明示する方法とか・・・? Unicodeビルドではなく、マルチバイトビルドで実現したいです。
printf 関数の型フィールド文字
>>757 数冊買ったのをまずはやれ。分からなかったら、調べろ。
楽して覚える方法なんてねーからな。
それができなきゃプログラム諦めれ。そっちのが幸せだ。
ss.Format("%C", wc); だと、ss=""になってしまいましたよ・・・
コンストラクタ
CString ss; wchar_t wc = 'あ'; CString ts(wc); ss = ts; だと、ss= "・"になってしまいましたよ・・・
( ・ω・)
>Unicodeビルドではなく、マルチバイトビルドで実現したいです。 >wchar_t wc = 'あ'; この時点でマルチバイトじゃないか?
すみません・・・説明が及びませんでした・・・ プロジェクト→プロパティ→文字セット→「マルチ バイト文字セットを使用する」 でお願いしたいという意味でした。
デバッガでどの段階で思い通りの動作をして無いか追ってみ。
CString ss; wchar_t wc = 'あ'; // wc = 0x82a0 ss = "" ss = wc; // ss = "?" ↑ デバッガで追った時、この部分で ss = "あ"とならず 思い通りの動きになっていません
デバッガをUnicodeを表示にチェック
お前らいつまでマジボケ続ける気なの?
UNICODE使わねぇのにwchar_tかよ
L'あ'
>>761 買ったものは実践してます。
わからないところもありません。
特に問題はないです。
「楽して」ではなく「楽しく」出来たらいいなと思っただけです。
たとえば物理や数学でも演習がなく定義や法則ばかり書いてある参考書よりは
演習問題が豊富でソレを解きながら覚えた方が楽しいと思います。
そういうの(実際にアプリを作りながら解説)を実践しているHPなどご存じでしたら
紹介していただけたらなぁ。と思っただけです。
特にそういうところがないのなら別に良いです。
昔BASICを覚えたのはBASICマガジンなどでゲームプログラムを打ち込み、そしてソレを
弄ってあ〜でもないこ〜でもないやって理解していき、その過程が楽しいかったので
そういうものを求めていました。
wchar_t型の文字からchar型の文字列に変換する自作関数へ投げるから もういいもん!><
そうとうテンパってきてるな 乙
質問です。 現在WinXP ProSP2 + VC++6.0環境下で、 MFCベースにて一定時間ごとに処理を行うプログラムを作っています。 その中で100msecごとに処理を行いたいのですが、 settimer( 1, 100, 0 ) void Chogehoge::OnTimer(UINT nIDEvent){ 〜処理〜 } では、 処理が正確に回らず、1msecずつ遅れ最終的に100msecの単位が飛んだりします。 なので、マルチメディアタイマーを利用しようと思っているのですが、 TIMECAPS timeCaps;//分解能格納 timeGetDevCaps(&timeCaps, sizeof(timeCaps));//分解能取得 timeBeginPeriod(timeCaps.wPeriodMin);//分解能の最小値 FTimerId = timeSetEvent(100, timeCaps.wPeriodMin, TimerProc, (DWORD)this, TIME_PERIODIC ); でタイマーを生成し void Chogehoge::TimerProc( UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2 ){ 〜処理〜 } とやっても、マルチメディアタイマー使用以前と同様、処理が遅れてしまいます。 実際100msec周期で正確に処理を行いたいとき、どのようにすればよいのでしょうか? # 優先度をリアルタイムに変更してもうまく回りませんでした。
最初からchar使えよ
>>777 ラッキーおめ
とりあえずタイマー部分だけをマルチスレッド化して、
100-10〜15msくらいのときに通達すればいいのではないかと。
もしくはただのループ
>>776 もっといい方法あったら、教えて下さい
>>778 wcahr_tが一文字ずつ飛んでくるから、それをCString型にスタックしたかったの!><
>>781 Unicodeじゃダメなの!><
>>782 知りたかったのは、wchar_t→CString & 非Unicode
でしたので、噛み砕いちゃいました・・・
はなしがつうじない ただのちしょうのようだ
Unicode受け取っておいてUnicodeじゃダメなのもないもんだ
受け取るの、Shift-JISだもん><;
787 :
デフォルトの名無しさん :2006/02/13(月) 17:21:39
すんまそん、プリコンパイル済みヘッダについて教えてください。 /Yc プリコンパイル済みヘッダーを作成する /Yu プリコンパイル済みヘッダーを使う というのが有るのですが、毎回 stdafx.h の内容を変更するたびに 一度 *.pch を削除して /Yc に変更してコンパイルして /Yu に戻してビルド、という手順を踏む必要があるのでしょうか? stdafx.h を書き換えたら勝手にそいつから *.pch を作成して 以後それを使ってくれるようにはできますか?
SJISはマルチバイト はい次の方どうぞ
自分で試せばいいだろ なんでわざわざ聞く必要が?
>>786 wchar_t使うのにUNICODEじゃないなんてねぇよ、Windowsでは
>>787 いちいちオプションいじらないでリビルドするだけだろ
おまいらつくづくバカだなぁ
794 :
デフォルトの名無しさん :2006/02/13(月) 17:25:31
>>792 そのとき /Yc にしておくべきですか?
それとも /Yu にしておくべきですか?
>>792 ええ、あなた程度でも思いつくような事はさすがにやってます^^;;;
いえいえとんでもない!
>>793 の逝きっぷりには到底及びもつきませんよ!!!
今後ともよろしくお願いしますね!
じゃぁ氏ね
>>789 だから、マルチバイトって最初っから言ってるじゃないですかぁ
>>791 お兄さん、VS2005でデフォルトがUNICODEなんでしょ?
でも、みなさんありがとう
もういいです><;
( ゚Д゚)
( ゚Д゚)
( ゚A゚ )
(´Д` ゚A゚ ´Д`)
803 :
デフォルトの名無しさん :2006/02/13(月) 17:31:08
>>795 VC++ 2005 です。ヘルプには /YX という
オプションは有りませんでした。
.__ .Z|・∀・| |__|Z / < .図
伸びてくんな こっちみんな キモチワルイ
伸びてくんな こっち(´Д` ゚A゚ ´Д`) みんな キモチ( ゚Д゚ )ワルイ
>>779 レスありがとうございます。
タイマー用のスレッドってどういったものなんでしょうか?
settimerなど使用すればkillするまで、一定時間ごとにメッセージを投げてくれる。
メッセージはOnTimerで自動的に受け取れるという感じだと思うんですが
スレッドで実際やるとしたら…
void Chogehoge::OnOK()
{ 〜前処理〜
AfxBeginThread( TimerThrd, this, THREAD_PRIORITY_NORMAL);
}
UINT Chogehoge::TimerThrd ( void * ){
settimer(1,100,0 ); //?????
}
void CProtDlg::OnTimer(UINT nIDEvent)
{ 〜処理〜
}
これじゃ変わってませんよね…orz
どうすればいいんでしょう?
早めにまわして・・・
void CProtDlg::OnTimer(UINT nIDEvent)
{
SYSTEMTIME st; // 現在時刻
GetLocalTime(&st); // 現在時刻取得
if ( m_mill != ( st.wMilliseconds / 100 ) ){
〜処理〜
m_mill = st.wMilliseconds / 100;
}
}
# m_millはメンバ変数
これだと処理が重くなりますし…。
>>803 VC++2005からは/YXが廃止されたから/Yuでおk
ただし、ちゃんとファイル名を指定するか、#pragma hdrstopを使うこと。
いちいち聞くより、ヒント貰ったら後は自分で調べた方が速いぞ
VC6.0ってアセンブラ使えますか?
>>810 インラインアセンブラのことだったら使える。
ただし拡張命令はSP6だとMMXどまり。
SP5にProcessorPackを当てると3DNow、SSE/SSE2まで。
>>807 100ms毎になにやりたいんか知らないが、きっかり100msやるとしたら
専用ハードが無いと無理じゃないのかな。
そこそこの精度ならスレッド作って、GetTickCount()やパフォーマンスカウンタ見ながらループさせるとか。(負荷かかるけど)
814 :
807 :2006/02/13(月) 18:53:51
100msec周期というのは、そこそこの精度で十分です。 オシロからのデータをもれなく収集を行いたいというプログラムです。 現状は秒単位+msec単位を記述するとこんな感じです。 10.597 10.698 10.799 10.900 ←0.1sec飛んでる 11.001 という感じで間が飛んでしまうのを、何とかしたいというのが本題です。 時間は100msecまでしか、保存を行わないのでそれ以下は問いません。 難しく解釈してしまった方申し訳ないです。 スレッド内でループで時間判定… UINT Chogehoge::TimeThrd( void * param ){ SYSTEMTIME st; // 現在時刻 mill_tmp = 0; while(終了条件){ GetLocalTime(&st); // 現在時刻取得 if ( st.wMilliseconds / 100 ){ 〜処理〜 mill_tmp = st.wMilliseconds / 100; } Sleep(50); // 負荷を下げたいので } } # 上に書いたやつの2番煎じです… これだといやでも負荷かかりますし…orz
> 10.799 > 10.900 ←0.1sec飛んでる ( ゚Д゚)( ゚Д゚)( ゚Д゚) ( ゚Д゚ )
きょうは何かあったの? 大地震のまえぶれだろうか?
>>814 そのデータだと、そこそこの精度がでているが。どこが0.1[s]
飛んでいるんだ?10.799はほぼ10.8だぞ。
タイマーは、別スレッド作られるはず。MSDN読め。
学部か修士ぐらいだろうが、自分で少しは調べろ。ためにならん。
>>814 ms単位の経過時間が欲しければ、わざわざGetLocalTimeせんでもGetTickCount()でいいだろ。
820 :
デフォルトの名無しさん :2006/02/13(月) 19:53:02
ループしまくって RDTSCで読み続けるんだ!
821 :
デフォルトの名無しさん :2006/02/13(月) 19:54:34
こんばんは、 EPSファイルを、GIFファイルに、変更するフリーのDLLないでしょうか。 できれば、EPSを読み込んだあと、GetPixel()とかできるのがよいです・・。
VS2003を使ってます VC++で、MFCのダイアログベースでテスト用のプログラムを作って色々試してたんですが 今しがた突然、デバッグをしようとF5を押すと、 「デバッグを開始できません プログラム 'EXEのフルパス' を開始できません。 アクセスが拒否されました。」 というメッセージボックスが出てデバッグができなくなりました。 プログラムを変更したのがいけなかったかと思い、Ctrl+Zで元に戻してリビルドしたりしても一向に直りません Debugフォルダごと削除してビルドしなおしたりしてもダメでした 解消方法なと、どなたか心当たりありませんか?
825 :
デフォルトの名無しさん :2006/02/13(月) 21:23:03
確かに、リブートはしてません・・・(ファイル送信してるもので・・・) 後でやってみます
828 :
デフォルトの名無しさん :2006/02/13(月) 21:29:38
>>826 ほら、空っぽのディレクトリなのに
削除できなかったりすることあるだろ?
再起動すると削除できるけど。
まぁ、あれみたいなもんだ。
ちょwwwwww 何でこんなに大盛況なの??
VS2005をWin2000SP4で使用しています。 今度DirectXを使ってゲームを作ろうと思い、DirectX9 UpdateSummerをインストールしました。 ヘッダとライブラリのパスは設定したのですが、プログラムでDirectXのメソッドを呼び出そうとすると 外部参照エラーが発生します ----------------------------------------------------------- リンクしています... main.obj : error LNK2019: 未解決の外部シンボル _Direct3DCreate9@4 が関数 _WinMain@16 で参照されました。 D:\Visual Studio 2005\Projects\DXTEST\Debug\DXTEST.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ----------------------------------------------------------- 解決法がありましたら、どなたかお願い致します。
libをリンクしろや
libをリンクしても直らない、に3000点
834 :
823 :2006/02/14(火) 08:23:35
起動時のワンポイントをひょうじするようにしたいのだけどどうしたらいいですか?
そのように作ればいい。
>>834 なんでリブートしたら直ったのかは突き止めたの?
リブートしたら直るようなもん、どうやって突き止めるんだよ
フリーってことでvisual c++のエキスプレスエディションつっこんでみたが、 有名な 1 #include <stdio.h> 2 3 main() 4 { 5 printf("Hello!\n"); 6 } が上手くできない・・・ 新規プロジェクト作成でどこえらんでいいかもわからんしww とりあえずオレにはC++無理ってことでFA???
FAK
>>840 ところでそれはC++ではなくCなんだが・・・
C++でもコンパイル通る
( ゚д゚)
>>840 void main() に汁!または int main() にして最後に return 0; に汁
C++ 風にしたいなら <iostream.h>に汁!
正解はこちら↓
以上が正解です↑
(1) void main()だめ。int main()にする。 (2) <iostream.h>は古い。 #include <iostream>してusing namespace std;
馬鹿よけのためにはint main(void)で。
>>840 まともな解答が欲しければ何がどううまくいかないのか、どこで躓いているのか書け。
VC++7(.net)のデバッガって、開発中のアプリケーションを、デバッガ上ではなく 単体で起動してcrashさせてからアタッチすると、どこからともなくプロジェクトを見つけてきて、そのうえソースまで表示してくれませんか? あれってどうやってるんでしょう?どっかにexeの名前とソリューションの場所のテーブルでも持ってるんでしょうか?
>>853 アセンブリキャッシュにでも書き込まれてるんじゃね?
バイナリにパスがはいってたような
856 :
デフォルトの名無しさん :2006/02/17(金) 09:58:21
Visual C++ で作った(リリース用の)バイナリって、 どこまで情報埋め込まれているか分からないから不安。 例えば何らかのフルパスが入ってるとすれば当然 Document and Settings\俺の名前\Visual Studio Projects\ みたいな情報も含まれているわけで、別に何か 困るわけでもないけど会社のPCだとそこは社員番号だったりして・・・ ちょっと嫌。
(°д ゚)ハァ?
リンカ設定のデバッグ情報の生成をONにしておくと pdbファイルのフルパスがバイナリに突っ込まれるよ。 VC++8は何故かReleaseビルドまでONがデフォルトなので注意。
859 :
デフォルトの名無しさん :2006/02/17(金) 10:16:09
Expr、Negative、Literalというクラスがあります。 Exprはabstract classで、Negative、LiteralはExprをinheritしたものです。 たとえばMainの中で、 Expr* e = new Negative( new Literal(3) ); と表記すると、 e = -3 となります。 質問ですが、この状況でdelete eとやれば、newで作られたNegativeとLiteralもちゃんとdeleteされるんでしょうか? もしされないのならどうすればいいのか教えてください。 Exprのデストラクタをvirtualにすればいいのかと思いましたが、どうやればいいのか分かりません。 よろしくお願いします。
何故そこでeが-3になるのか判らんが、 少なくともそのように設計されているなら、 それでいいだろ。
>e = -3 となります。 ? >Exprのデストラクタをvirtualにすればいいのかと思いましたが、どうやればいいのか virtual ~Expr() ;
862 :
デフォルトの名無しさん :2006/02/17(金) 15:56:45
ぬるぽ
863 :
859 :2006/02/17(金) 16:23:48
>>856 ,858
注意も何も、そんなオソロシイ場所にプロジェクトを作成するヤツが悪い
865 :
デフォルトの名無しさん :2006/02/17(金) 17:01:07
>>864 そこしかいじれないようにIT部門が管理している。
>>865 管理も何も、そんなオソロシイ会社に就職するヤツが悪い
867 :
デフォルトの名無しさん :2006/02/17(金) 17:05:26
>>866 そこまで言われたらもう返す言葉がない。
実際オソロシイな そのIT部門のヤツらはバカ揃いか つーか、おめぇはIT部門じゃねぇのかよ
イット部門
イっとるね
思いついたギャグをすぐ書き込むのは止めたほうがいいよ。 オッサンからのアドヴァイスです。
>>856 そのフォルダの俺の名前は、VCをインストールする時に
入力する名前がフォルダ名になるって事?
>>872 856に書いてある「俺の名前」(Document and Settingsの直下)は
Windowsのユーザー名が当てはまるところ。VC++とは何の関係も無い。
やヴぁい。俺のリリースしたexeにしっかり俺の名前が!?!?! 俺がテストデータに使った得ろ動画もプロジェクトのどっかに残っていて あとで納品後に見つかったらどうしようガクブル
初歩的な質問ですんまへん、今って#include<iostream.h>とヘッダファイルの引用の .h をつけないで #include<iostream>にするのが常識なんですか?
あと
>>851 に書かれているint main(void)と括弧の中にvoidを入れるのも常識ですか?
850,851じゃないけど・・・ <iostream.h>は古い書き方なので、.hつけないのが推奨。 int main(void)は、C++は型にうるさいのでつけた方がいいってことだろう。
僕のはVC6だけど、バイナリエディタで見たが、
Debugは作った位置のパスがあったが、
Releaseの方は何も無い感じだった。
>>873 サンクス。そこで作品を作るとヤヴァイという事か。
デスクトップとか、ドライブのトップ辺りがいいのかな。
だから、人に渡したりするときは、ビルドの設定変えればいいだけだろ・・・
いや、リリースの方で出るって言っていたので。
>>876 ヘッダファイルをインクルードする時のこと全般で言えば別に .h を書かないのが常識なんて無いよ
C++のSTL等一部のヘッダファイルが、そもそものファイル名自体に .h がつかなくなってるだけ
むしろヘッダ名がそのままファイル名そのものであるとは限らないというのが規格の立場。 VC++のヘッダ名 == ファイル名は実装方法の1つに過ぎない。
VS 2005 C++だす × String str = "Hello"; ○ String ^str = "Hello"; いちち^付けないといけないみたいですね、 ^ってどういう意味よ? くだすれVisual C++(超初心者用)で聞いたら 該当スレで聞いてみたら? って言われたんで ここでよかったかな?
↑サンクス
カスが
890 :
デフォルトの名無しさん :2006/02/18(土) 17:36:59
質問させてください。 今コマンドラインからサーバにアクセスするクライアントプログラムを作っていて、 コマンドラインから動かす時にいろんなオプションをつける事が必要なのでgetoptを使っています。 int option = getopt(argc, argv, "p:s:r:f:"); switch(option) case 'f' : filename = optarg; break; の様に使っているのですが、引数が複数ある場合にどうすればいいかわかりません。 例えば、 prog -s 1.1.1.1 80 とコマンドラインから動かした場合、 optargに1.1.1.1は入ってるのですがどうやって80を取り出せばいいのか分かりません。 よろしくお願いします。
getopt()なんて非標準関数を使わなければいいと思うよ。 まぁ、仕様をよく確認しろって話な訳だが。 ・引き数つきオプションの取れる引き数は一つだけ。 ・オプションではないパラメータはオプション処理後にargvから取り出す。
892 :
デフォルトの名無しさん :2006/02/18(土) 17:46:45
ちょっと質問なんですが、通常のアプリケーション製作についてです。 WinMainで渡されてくるパラメータ(特にHINSTANCE)って、どこかに保存してますか? 俺はグローバルにコピーして置いてるんですが、こんなやり方でも問題無いですよね? (↑グローバルはあんまり使うなと言われているので) それとも何かお勧めの方法があったら参考までに教えて下さい。よろしくお願いします。
893 :
890 :2006/02/18(土) 17:53:59
>>891 うーん、やっぱり自分で作らないと駄目かな。
返答ありがとうございました。
>>892 <windowsx.h>のGetWindowInstanceを使えば、
ウィンドウハンドルから関連するインスタンスハンドルが手に入るから、それを俺は使っている。
896 :
デフォルトの名無しさん :2006/02/18(土) 18:13:24
C++/CLIを使っているんですが、 自分のクラスライブラリのシングルトンのクラスにあるSystem::Drawing::Size型のプロパティを変更しようとしたら p->Size = System::Drawing::Size(64, 64); と設定はできるのですが、 p->Size.Width = 64; のように個別に設定しようとしたら必ず0になってしまいます。 どうすれば個別に設定できるようになりますか。
次スレからはタイトルに「非CLI」って入れなきゃだめかな
C++/CLI はマイナーだから特に注意書きはいらんだろ > 637 名前:デフォルトの名無しさん[sage] 投稿日:2006/02/18(土) 17:01:58 > GUI でモノを作りたければ、素直に MFC に進んだ方がいいと思われ > C++/CLI はちと初心者にはお勧めできない。普通の方法では満足できなくなった玄人向け > だから > あとは、635 の進めるとおり、C# でモノを作ってみて満足できなくなったら、またこちらに > 出戻ってくると言うのもいい
必要だとすれば非GUI(コンソール)のスレ 立て逃げでよければ俺が立ててやってもいいけど
C++/CLI スレも初心者は来て欲しくないそうだ
902 :
デフォルトの名無しさん :2006/02/18(土) 19:51:33
そこで、質問。CLIってなんすか?C++は知ってましたが・・・
CommonLanguageInfrastructure
>>903 略された単語をしっかり見ると分かるもんですね
Visual Studio 2005 C++です 秀和システム発行VisualC++逆引き大全 500の極意から 一部抜粋のプログラムなのですがコンパイルできません プログラムの振る舞いとしては,を!に変換するだけの事なのですが .\list_2.cpp(9) : error C2440: '=' : 'const char [2]' から 'char' に変換できません。 この変換が可能なコンテキストはありません。 2005のC++ではchar型の変数を定数として扱っているのでしょうか? #include "stdafx.h" #include <iostream> using namespace std; int main(void) { char buf1[13]="Hello, world"; buf1[5]="!"; cout << buf1 << endl; return 0; }
"!"と'!'の違いをわかった上で言ってるのか?
907 :
デフォルトの名無しさん :2006/02/18(土) 21:09:17
>>905 buf1[5]="!";
↓
buf1[5] = '!';
にしてみてくれ。
上のコードだと、!とぬるぽが入るから2文字になちゃーうよ
908 :
896 :2006/02/18(土) 21:10:40
指定されたスレに行ってまいります。
>>909 うん知ってるw
誰かにガッされたかったんだ。
今は反省している。
>>907 スマソbuf1[5] = '!'; でやっても同じです秀和システムのHPからソースDLしてもやっぱり一緒でしたガ━━(;゚Д゚)━━ン!!
因みそのソース貼らせてもらいます本では
char buf1[13]="Hello, world"; //文字の配列を確保します。
char buf2[]="Hello, world"; //これでもOKです。
でしたが下記の様に変わっていました
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(void)
{
//char buf1[13]="Hello, world"; //文字の配列を確保します。
const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
const wchar_t* buf2[]="Hello, world"; //これでもOKです。
buf1[5]='!'; // 6文字目を!に変えます。
cout << buf1 << endl;
// 6文字目をヌル文字にすると、文字列はそこで終わりになります。
buf1[5]=0;
cout << buf1 << endl;
//文字列を全部1から作成することもできます。
char buf3[10];
buf3[0]='H';
buf3[1]='e';
buf3[2]='l';
buf3[3]='l';
buf3[4]='o';
buf3[5]=0; //最後の0(ヌル文字)を忘れずに
//要素数が余る分には問題はありません。
cout << buf3 << endl;
}
912 :
905 :2006/02/18(土) 21:32:32
Borland C++ではコンパイルできました なんでだろう?
>>911 > const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
> const wchar_t* buf2[]="Hello, world"; //これでもOKです。
全然良くない。
あと、ヌル文字は0でも問題ないが、'\0'が一般的。
たぶんC++スレで質問した方がまともな回答が得られる。 このスレでその辺の低レベルな質問に答えてるのは初心者だから
それっぽいソース探してきたが、(chapter2\p51-2.cpp) const wchar_t* ってどっからでてきたんだw #include <iostream> using namespace std; int main(void) { char buf1[13]="Hello, world"; //文字の配列を確保します。 char buf2[]="Hello, world"; //これでもOKです。 buf1[5]='!'; // 6文字目を!に変えます。 cout << buf1 << endl; // 6文字目をヌル文字にすると、文字列はそこで終わりになります。 buf1[5]=0; cout << buf1 << endl; //文字列を全部1から作成することもできます。 char buf3[10]; buf3[0]='H'; buf3[1]='e'; buf3[2]='l'; buf3[3]='l'; buf3[4]='o'; buf3[5]=0; //最後の0(ヌル文字)を忘れずに //要素数が余る分には問題はありません。 cout << buf3 << endl; }
916 :
905 :2006/02/18(土) 21:49:13
'\0'にしても、VS2005C++ではなんも変わりません .\list_2.cpp(8) : error C2440: '初期化中' : 'const char [13]' から 'const wchar_t *[13]' に変換できません。 この変換が可能なコンテキストはありません。 こんな調子です(;´∀`) Borland C++は #include "stdafx.h" をコメントアウトして const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。 const wchar_t* buf2[]="Hello, world"; //これでもOKです。 ↓ char buf1[13]="Hello, world"; char buf2[]="Hello, world"; こうしたらすんなりコンパイルできました
要するに
>>915 そのまんまなわけだ。
VC++でもそうしたら?
918 :
905 :2006/02/18(土) 21:54:35
わざと間違い探しでもやってるんだろ 気づけよ
920 :
905 :2006/02/18(土) 21:58:40
おや?
>>915 のソースに
#include "stdafx.h"
を足したらデキマスタ
>>905 のソースでbuf1[] = "!"にしとけ
922 :
915 :2006/02/18(土) 22:00:33
924 :
905 :2006/02/18(土) 22:09:18
>>922 解凍して、p51-2.cppのファイルをWクリックしてVisual Studioを起動したら
確かに、
const wchar_t* buf1[13]="Hello, world"; //文字の配列を確保します。
const wchar_t* buf2[]="Hello, world"; //これでもOKです。
に変わっていました、今再解凍して確かめたら、
char buf1[13]="Hello, world"; //文字の配列を確保します。
char buf2[]="Hello, world"; //これでもOKです。
だったYO
>>923 確かにそうですね藁
---------------環境--------------- VC++6.0、WindowsXP HomeEdition SP2 ---------------------------------- 習作でMIDIを解読、線形リストに登録するプログラムを作成したのですが、 データの多いMIDIを扱った場合エラーも無くプログラムが終了してしまうことがあります。 for(int i=0;i<tracks;i++) { printf("[%02d]トラックを読み込み...",i); pnt = trackdata[i].Init(pnt); printf("完了\n"); } 上記の部分で、「〜読み込み...」まではでるのですが、「完了」の文字が出る前に exit() でもやったかのようにプログラムが終了してしまいます。 ファイルサイズの少ないMIDIファイルでは問題なく動作しています。 ひょっとしたらと思うのですが、メモリを使いすぎると勝手にプログラムが終了してしまうということはあるのでしょうか?
ここは初心者が初心者の質問に答えるスレ
927 :
デフォルトの名無しさん :2006/02/19(日) 00:27:40
VC++6.0で自作したアイコンにハンドラを作成する際には「表示」→「ClassWizard」でいけるのですが、.net2003ではどのようにするのでしょうか? 右クリックでも「イベントの追加」が出てこないのですが。
928 :
デフォルトの名無しさん :2006/02/19(日) 01:56:19
>>928 それ以前はC++標準への準拠度が低く、STLすら完全に使えない。
Cを使うのなら別に問題ないだろうけど。
>>929 >STLすら完全に使えない。
なるほど、レスありがとうございました。やっぱす最新版を買い直すかな・・・
メモリダンプで ?? と表示されているアドレスは何を意味しているのでしょうか? ヘルプを読んでみても記述されている箇所が見当たりません。
ゆとりゆとり
933 :
デフォルトの名無しさん :2006/02/19(日) 14:14:52
Win32SDK、VC++6.0で開発しています。 WinMain関数の最後にreturn msg.lParam; を行いますが、この後またWinMainに戻って来るというバグが出ました。 Debugモードだと出ないのに、Releaseモードでだけ出る現象なのでどうやって追えば良いか解らないのですが、Releaseモードでコンパイルした exeをIDE側のソースコードと連動させるにはどうしたら良いのでしょうか。 そもそも、WinMainにまた戻ってくるというのはどういう原因が考えられるでしょうか?
戻り値はwParamの方。
>>933 デフォルトではリリースでもデバッグできる。
>>934 あれ、マジっすか。ポカやってしまいましたか。
>>935 付属してるMSDN見ながらやってるんですが、どうも最適化でぐちゃぐちゃになるっぽくてうまくいかんのです。
コードの実行速度の最適化 だけで出る現象なんですよねぇ。。。。。
サイズの最適化やデフォルトだと出ないと言う。
ぐぐりながらいろいろ施行してみます。
>>936 最適化したコードでブレークポイントを設定しているとデバッガが混乱することがあるけど大丈夫?
BC++より移行中なのですが、コンパイラがBC++かVC++を判定するにはどのようにしたらよいですか?
>>938 VC++は _MSC_VER というマクロシンボルを定義してる
Borlandのが何を定義してるかは知らんが、同じように
何か固有の物を定義してるはず。
それを#ifdefで調べろ
__BORLANDC__
つーか、BC++かVC++かのどちらかだけなら、Borlandのが何を定義してるかとか気にせんでも #ifdef _MSC_VER #else #endif でいいべ?
_MSC_VERは駄目だろう VC++でなくても定義されるはず BOOST_MSVCでいけ
>>942 されてないされてない。
それに生のVC++使ってもBOOST_MSVCなんか定義されないし。
>>943 されているされている
君はもうレスするな。
BOOST_MSVC
Defined if the compiler is really Microsoft Visual C++, as opposed to one of the many other compilers that also define _MSC_VER.
で、生のVC++では定義されないBOOST_MSVCに どれほどの意味があるわけ?
VC以外で _MSC_VER が定義される環境って何処か知っておきたい。
947 :
デフォルトの名無しさん :2006/02/21(火) 07:48:41
BOOST_MSVC ってどこで定義されてるの?
949 :
942=944=948 :2006/02/21(火) 08:55:08
ごめんなさい、俺が愚か者でした
950 :
デフォルトの名無しさん :2006/02/21(火) 12:20:27
無料でwindows DLL作れますか?
BOOSTって思いっきり書いてあるのに どんな思考回路なら素のVCで定義されてると思えるんだろうな
ICCのWin版のIA-32だと定義されてるな<_MSC_VER
INITCOMMONCONTROLSEXと書く時ドキッとします
そういや、InitCommonControlsは何もしない関数だって話があったなー。 あれをみたときはへー、と思ったものだ。
呼び出すことによって、コントロール使用前にDLLが確実にロードされるようにするだけだからな
958 :
デフォルトの名無しさん :2006/02/22(水) 23:41:55
質問です。Windows 2000、SP4 です。 VC++ 6.0 で動いていたプロジェクトを 2005 でビルドすると、libc.lib が見つかりませんというリンクエラーがおきました。 コンパイルオプションでは /ML ではなく /MT を指定しており、他に libc.lib とリンクしている箇所が見当たらないのですが、 なぜか自動的にリンクしようとします。 廃止されたライブラリがデフォルトでリンクされるというのも考えづらいのですが、 とりあえず現在は、「特定のライブラリを無視する」 に libc.lib を入れてエラーを回避しています。 が、何かが間違っている気がします。 なぜ libc.lib にリンクしようとするのか、もっとスマートにエラーを解決する方法はないのか。 よろしくお願いします。
はいはいFAQFAQ
少し重めのプログラムを書いているのですが、最適化のために コードのプロファイルをしたいと思っています。 Visual C++.net standard version 2003を使っているのですが、 そもそも、そんな機能はあるのでしょうか? プロファイラに手をだそうと思ったのがはじめてで、いろいろ検索してみたのですが いまいちよくわかりません。 何か参考になるweb等あれば教えていただければ幸いです。 よろしくお願いします。
961 :
デフォルトの名無しさん :2006/02/23(木) 08:28:42
>>959 お教えいただけないでしょうか・・・。
libc.lib で検索しても、/ML を指定して標準 C++ ライブラリのヘッダをインクルードすれば libc.lib にリンクされる、
2005 では /ML は廃止された、までの情報しか取得できませんでした。
VC++2005を昨日入れたばっかりです。 Cfileでバイナリファイルを扱おうと、afx.hをincludeしたら、エラーが山のように出ました Form1.hの#pragma onceの上に入れたんですけど間違い? 10年以上前にTurbo Cで組んでた時とは環境が全然違うので戸惑ってます
Form1.h そもそもMFCプロジェクト?
964 :
デフォルトの名無しさん :2006/02/23(木) 13:27:21
仮想リストビューでチェックボックスって使えるの?
965 :
デフォルトの名無しさん :2006/02/23(木) 17:30:30
すいません、マルチスレッドアプリでの動作について質問があります。 1CPUのWindows XP Pro環境で、VC++.NET(MFC)にてアプリを作成しています。 A,B,Cの3つのスレッドから参照される、Xというクラスがあります。 Xクラスは、配列構造のデータ領域を持ち、以下の3つのメソッドでその データ領域にアクセスすることができます。 ・Add 配列の次の要素にデータを入れる ・Get 配列の次の要素のデータを返す ・Remove 配列の次の要素のデータを削除する ※それぞれのメソッドは、内部的に次の要素のインデックスを管理して おり、データ領域の前から順に操作を実行します このXクラスは、アプリのメインスレッドでインスタンス化され、スレッド A、Bはそのポインタを使ってアクセスしています(つまり、Xクラスオブジェ クトは1つ)。 スレッドA,Bからは、次々にAddメソッドでデータを投入されます。 スレッドCからは、次々にGetメソッドで要素を取得し、Removeで削除して いきます。 ↓続く
966 :
デフォルトの名無しさん :2006/02/23(木) 17:31:44
このとき、スレッドAでAddメソッドコール中に、スレッドBからのAddメソッド コールは起きうるでしょうか? 気にしているのは、Addメソッドが同時に処理されてしまうと、内部で管理 しているインデックス値が、それぞれの処理で重なってしまい、片方のAdd データが他方のAddで消されてしまうのではないかということです。 CPUが1つで、オブジェクトも1つなので、このような現象は発生しないと 考えているのですが、どうでしょうか? みなさんのお知恵をお貸しくださいm(_ _)m
>CPUが1つで、オブジェクトも1つなので、このような現象は発生しないと スレッドAがAddの途中でCPUの処理が他のスレッドに移ることがあるのは当然。 スレッドAがAddしているときにスレッドBにCPUが移ってAddするのは確率の問題。
マルチスレッドについて全く調べてないに1票。
多分次につまずくのはデッドロック
つか、スレッドをスイッチのときに、オブジェクトうんぬんなんて関係ないだろ。 そんなこと考慮してたら、他のスレッドに切り替えられないだろ!
971 :
965 :2006/02/23(木) 18:31:06
色々とご意見ありがとうございます。 Windowsのマルチタスクは、タイムスライスではないと思っていたので すが、タイムスライス方式なんですか? 処理をOSに戻すまでは、別のスレッド・プロセスに処理が移ることは ないと思っていたのですが・・・ どうやら、私の勘違いだったようで...
>>971 Win95からそうだけど…そうじゃなかったのは、Win3.1だよ。
Windowsは10年前からプリエンプティブだよ。
お前はWindows3.1でも使っているのかと。
975 :
965 :2006/02/23(木) 18:43:54
私の認識は、初期Windowsのマルチスレッドだったようです。 #お恥ずかしいm(_ _)m 969さんの指摘に注意しつつ、セマフォをぶち込むことにします。 ありがとうございました。
>>971 昔の16ビットWindowsはたしかにノンプリエンプティブなマルチタスクだった。
今の32/64ビットWindowsはプリエンティブなマルチタスクになっている。
>>971 なんてAPIで処理をOSを戻してたの?
GetMessageとか。
>>975 わかっているとは思うがスレッドCからGetするときも気をつけるように。
古いインデックスを頼りに範囲外アクセスなんていったら泣きだからな。
掛け算のプログラムだす 配列宣言をこうすれば巧くいきますが int a[9]={1,2,3,4,5,6,7,8,9}; int b[9]={1,2,3,4,5,6,7,8,9}; 向学心から、C++では配列のコピーが出来ないのだろうかと 考え小一時間、答えが出せません コピーの仕方があれば教えてください、 具具ってみたらJAVAにはあるみたいなんですが、C++には無いのかな? // p99.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 //掛け算九九JR━―━―━(゚∀゚)━―━―━― !! #include "stdafx.h" #include <iostream> using namespace std; int main(void) { int a[9]={1,2,3,4,5,6,7,8,9}; int b[9]; a[9]=b[9];//コンパイルは通るが、実行したら、わけわかめのエラーがでる //int b[9]={1,2,3,4,5,6,7,8,9}; for(int j=0; j<9; j++){ for(int i=0; i<9; i++){ cout << a[j]*b[i] << " "; } cout << endl; } }
あぁ? バカかおめぇ? そんな配列要らねぇし 仮に配列使うとして、配列1つでいいし
そんな事は、分かっているんだが っていうか、配列のコピーの仕方教えてくれろ こうだろ↓ #include "stdafx.h" #include <iostream> using namespace std; int main(void) { int a[9]={1,2,3,4,5,6,7,8,9}; for(int j=0; j<9; j++){ for(int i=0; i<9; i++){ cout << a[j]*a[i] << " "; } cout << endl; } }
>>980 a[9]=b[9];
これが何をしているのか理解できないのなら、C/C++の基本がなってないという事。
最初から勉強しなおす事をお勧めする。
こうだよ低脳 #include "stdafx.h" #include <iostream> using namespace std; int main(void) { for(int j=1; j<10; j++){ for(int i=1; i<10; i++){ cout << j*i << " "; } cout << endl; } }
>>980 ・STLのコンテナを使う。
・配列をメンバに持つ構造体を使う。
・配列の要素を一つずつコピーする。
それも、わかってるんだがな ( ・∀・)アヒャ int a[9]={1,2,3,4,5,6,7,8,9}; を構造体宣言すれば、配列bにコピー出来るのも、既に分かっている っていうかもっと、簡単なコマンドってないのかなと 聞いてみる
>>985 ん?
コンテナなるものがあるのか
>>・STLのコンテナを使う。
これ(・∀・)イイ!!
>>・配列をメンバに持つ構造体を使う。
漏れでも使える
>>・配列の要素を一つずつコピーする。
これも使える
どう書くの?
教えて( ゚д゚)クレー
C++スレ行け
そういうな、教えてくれ STLのコンテナ <ノ丶`Д´>ノ マンセー
教えてクン(*´Д`)ハァハァ
やっぱバカの臭いがするな
C++スレ行けばいいのに
memcpyはint型の変数でもコピーできるのかな ちょっとやってみよう、だめだったらC++行きたいが ねもいしな
995 :
964 :2006/02/24(金) 00:04:15
int a[9] = {1,2,3,4,5,6,7,8,9}; int b[9]; memcpy(b, a, sizeof(a)); C言語初心者スレに行ってくださいm(__)m
998 :
958 :2006/02/24(金) 00:44:50
無理ですかね・・・。どなたか分かる方がいらっしゃればお願いします。 /MT、/MTd、どちらにしても libc.lib とのリンクエラーが出ます。(libcd.lib ではない) 何度かフルコンパイルも行ってるのですが・・・。
埋め
\\_ :三ニ=:::::::ヽ :ヽ.ニ=::て.>廴_ 1000 三.ヽ= (⌒ヽ;:;:;,.二) ニ=-ヽ:ヽ、,∠.^^ぅ 〃,べ= ̄ニ二 ̄ /;:ィリ ノノ ,.へヽ ;:ヘ/ ̄ ̄ ̄Vヽヽ ソ ├┤|
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。