★初心者にVisual C++を教えるスレ★ Part34
1 :
デフォルトの名無しさん :
2009/06/19(金) 12:39:29
2 :
デフォルトの名無しさん :2009/06/19(金) 12:40:01
3 :
デフォルトの名無しさん :2009/06/19(金) 12:40:19
4 :
デフォルトの名無しさん :2009/06/19(金) 12:40:37
5 :
デフォルトの名無しさん :2009/06/19(金) 13:46:33
Visual c++ で hello world と表示させる方法を教えてください。 ソースファイルに以下のプログラムを書いてもエラーが出ます。 ヘッダーファイルにも何か書かないとダメですか? #include <stdio.h> { printf ("hello world\n"); return 0; }
本当にこれだけ書いたのか?
9 :
デフォルトの名無しさん :2009/06/19(金) 13:52:34
#include <stdio.h> int main(void) { printf ("hello world\n"); return 0; }
10 :
デフォルトの名無しさん :2009/06/19(金) 13:53:48
>>7-8 #include <stdio.h>
main()
{
printf ("hello world\n");
return 0;
}
これだけ書きました。エラー1です。
11 :
デフォルトの名無しさん :2009/06/19(金) 13:54:57
>>9 エラーでませんでした。みなさん、ありがとうございました。
12 :
808 :2009/06/19(金) 14:14:31
「スレ立てるまでも無い質問スレ」の
テンプレ作成してくれた
>>809-812 さん、スレ立てしていただいた
>>818 さん、
本当にどうも助かりました。このスレは、私の生きがいみたいなもので・・
立てられなくて困っていたので、本当に助かりました。どうもありがとう。
うひゃー。うれしいな。僕の居場所が一つ元に戻った( ´Э`)
14 :
デフォルトの名無しさん :2009/06/20(土) 20:38:54
VC2008(MFC)使ってるんだけど、デバッグが出来るメモ帳位にしか使えてないです。 もっと高度なIDEの使い方を勉強したいので、お勧めのサイトや本があったら教えて下さい。
MFCなのにメモ帳位にしか使えてないんなら IDEを必要としていないと言うことだ。 必要もないのに勉強するだけ無駄
IDEの使い方の解説ってあんまりないな。 人の使いかを見てて「え、こんな機能あったの?」って気づくことがある。
Visual C++のExpressEditionって C#とかVB.bet などと違って .netFrameworkとかいうやつ入れなくても動かせるの?
>>14 >もっと高度なIDEの使い方
具体的にはどんな使い方が君とっての「高度な」使い方になるのかな?
>>19 質問の仕方悪くてすまん。
作成俺が必要かってことじゃなくて
作ったexeを実行するために必要かってこと。
.net必須だとexeネットで配布しても実行できない人多いよね。
C#とかVB.netだとHello World一行表示するプログラムでも.netFramewok必要だったが
C++は必要ない?
>>20 ライブラリをスタティックリンクしてEXEを作成すると、ランタイムライブラリの類は不要。単体で実行できる。
レスしてくれた人ありがとう。
>>18 ほんの一例なんだけど、ウィンドウにCWnd::SendMessage(Postも)とか良くするよね。
その時に、
#define WM_USER_EXAMPLE (WM_USER+1)
LRESULT OnUserExample(WPARAM, LPARAM);
ON_MESSAGE(WM_USER_EXAMPLE, OnUserExample)
LRESULT CExampleWnd::OnUserExample(WPARAM wParam, LPARAM lParam)
{
return 0;
}
こんなの、いちいち適所に書かなきゃ(コピペ)ならなくて面倒ですよね?
何か一つ忘れただけで、コンパイルエラーとかうっとうしいし。
これを一発で(綺麗に)入れてくれる機能とか?低レベルな使い方だったらゴメン。
あくまでも自分にとって高度なだけです。
後は自分が思いもつかないような便利な使い方が沢山ありそうなので、そういうのを
勉強したいと思いました。やっぱりMSDNコツコツ読むしかないですかね。
なんとなくできそうな気もするけど、やり方は僕にもわからない。 >#define WM_USER_EXAMPLE (WM_USER+1) #define WM_USER_EXAMPLE (WM_APP+1) // こっちにしとき。
それはコードスニペットが近い機能だと思う。 そもそも、IDEの支援を当てにするなら、C#とかにしたほうがいい。 C++は、インテリセンスが運良く出て来れば万々歳って言語だから。
25 :
デフォルトの名無しさん :2009/06/21(日) 08:49:37
>>21 初心者ですみませんが、EXEファイルはどうやって作るんですか?
コード書いてビルド
DLLはプロジェクト分けてビルドしないといけないの?
分けなくてもいいよ
ソリューションは分けなくてもいいけど、プロジェクトは分ける
分けなくてもいいよ
具体的にどうやればできるんでしょうか? dllはなんとかビルドできたんですがmainのほうのプロジェクトがビルドできません
具体的にどうできないのかを書かないなら一生ヘルプとgoogle先生とにらめっこしてろよ ここはコミュニケーションが取れる人間のための場所だ
dllのほうのproject [dll.h] #ifdef DLL #define DECLSPEC __declspec(dllexport) #else #define DECLSPEC __declspec(dllimport) #endif void DECLSPEC DLLFunc(); [dll.cpp] #include <iostream> #define DLL #include "dll.h" void DLLFunc() {std::cout << "DLLFunc()" << std::endl;};
mainのほうのproject [main.cpp] #include "dll.h" int main(void) { DLLFunc(); return 0; } ・ソリューションエクスプローラー上でdll.hをコピー ・dllのほうのprojectのプロパティ->構成の種類をDLL ・依存関係でmainの依存先をdllに ・ソリューションのビルド ここまでやったんですが、 ・デバッグで使用する実行ファイル名を指定してください といわれたので、何もいじらずにC:\WINDOWS\system32\regsvr32.exeを選択 したんですが、デバッグなしで開始したら ・DLLが指定されていません と表示されてなにも実行されません なにが問題なんでしょうか
書き忘れましたdll.hは実ファイルの方もmainのprojectにコピーしました
>>34 2つは同じソリューションだよね。
mainのほうをスタートアッププロジェクトにしている?
あと、regsvr32はこういう普通のDLLには無関係。
スタートアッププロジェクトをmainに設定したら期待通りに動きました どうも有難うございました
39 :
デフォルトの名無しさん :2009/06/22(月) 10:50:52
>>38 どうやったらその画面になるの?
ソースコードの画面から切り替えられないよ。
横レスすまん。
スレ勃てるまでもないスレでシカトされてしまったんでこっち来ました。 思いつきでこんなクラス書いてみました。 class CLocalTime { private: char buf[32]; SYSTEMTIME SysTime; public: CLocalTime() { } operator char *(); }; CLocalTime::operator char *() { GetLocalTime(&SysTime); sprintf_s(buf, 31, "%04d/%02d/%02d %02d:%02d:%02d", SysTime.wYear, SysTime.wMonth, SysTime.wDay, SysTime.wHour, SysTime.wMinute, SysTime.wSecond); buf[31] = '\0'; return buf; } これで、例えば printf なんかで使うときに、 printf("通過![%s]\n", (char *)CLocalTime()); ときちんとキャストすればちゃんと表示されるんですが、 printf("通過![%s]\n", CLocalTime()); だけで表示させるにはどうすればいいんでしょうか。operator CLocalTime &() を 追加してみましたがダメでした。CAtlStringA なんかは後者できちんと表示されています。
C++言語の質問だったらC++スレへ
>>40 「ダメ」だけだから無視される。エラーが出たならエラーメッセージ、そうでないならどうダメだったか書くのが常識。
>>40 CStringの定義を辿ってみろ。
メンバ変数が文字列へのポインタ1つしかない。
だから、可変個引数でもconst char*を渡したかのような振る舞いが可能になっている。
素直に class CLocalTime::ShowTime() 関数作る
private メンバ変数への値を返すのはいかがなものかと
>>40 キャストなしで可変長引数の関数にクラスを渡したら、
どのメンバ関数が呼び出されるんだろうと思って、MFCの
CStringで確認してみたら、クラスがそのまま値渡しされてる
だけだったな。
CStringの場合、クラスのメンバ変数がchar*だけだったから、
結果的にchar*の変数を渡したのと同じ動きになってた。
(const char*)でキャストすると、operator char*()が呼ばれて、
メンバ変数のchar*の変数を渡してた。(可変長引数の関数に
渡される値は結果的に同じ)
そのCLocalTimeは、メンバ変数が二つあるから、それが二つとも
スタックに詰まれて、おかしな動きになってるんだろうな。
ひょっとして1project 1クラスが基本なの
VC2008EEを使っています。 デバッグ中にアサートで停止した時に、実行したコードを1行ずつ巻き戻す事ってできないでしょうか?
>>48 巻き戻し自体はできない
しかし、現在の実行行(正確には次に実行する行)はアセンブラレベルではは eip レジスタに格納されているので、
逆アセンブラウィンドウを開いて、このレジスタの値を書き換えることで、
実行済みの行を含む任意の箇所にジャンプできる
この機能を使うことで、変数の値を書き換えながら、実行済みの行を無理やり再実行させたりできる…はず(うろ覚え)
当然、レジスタやメモリの値も自分で書き戻してやる必要があります
>>49 thx
レジスタやメモリいじるのは大変そうだ・・・。
ソリューション内でStdAfxを共有したい場合はどう設定すればいいんでしょうか?
どこのお店でしょうか?
普通のプログラム(hello world出力のみなど)をつくりたいときは、どのプロジェクトの種類を選んだらいいのですか?
コンソール アプリケーション
空のプロジェクト
58 :
デフォルトの名無しさん :2009/06/26(金) 18:18:00
C:\Documents and Settings\maria15\My Documents\Visual Studio 2008\Projects\aab\Debug と C:\Documents and Settings\maria15\My Documents\Visual Studio 2008\Projects\aab\aab\Debug があるんだけど、なんで? C:\Documents and Settings\maria15\My Documents\Visual Studio 2008\Projects\aab\Debug にだけ、aab.exe があります。 これだけを配布すればいいんですか?
aab\Release\aab.exe を配布します。 Debug版はランタイムライブラリがないので動きません。
60 :
デフォルトの名無しさん :2009/06/26(金) 18:34:57
>>59 ありがとう。
aab\Release
のフォルダがありません。
どうすればファイル作成できますか?
aab\aab\
ツールバー or 構成マネージャを使って、アクティブを Debug から Release に切り替えろ。
63 :
デフォルトの名無しさん :2009/06/26(金) 19:00:57
>>61-62 \aab\Release
ができました。
フォルダの中に
aab.exe
aab.pdb
が作成されました。
両方ZIPでまとめて配布ですか?
exeだけ
65 :
デフォルトの名無しさん :2009/06/26(金) 19:08:27
(^^)<ホイミン!!
67 :
デフォルトの名無しさん :2009/06/26(金) 19:43:41
ねえ、今VC6で しこしこMFCやってんだけどそろそろ 買い換えようと思うんだけど、VC6からVS2008に あくまでMFC使用しかしないということで移行する価値ってある?
VS2010がもうすぐ出る
そういうために評価版がある。
71 :
デフォルトの名無しさん :2009/06/27(土) 03:11:33
いくつかのCソースファイルとヘッダファイルとmakefile(よく分かりません) が入ったフォルダを落としたんですが こういう形であるソースコードをvisual studio 2003で コンパイル、実行するにはどうすればいいですか?
コマンドラインで設定用のバッチファイルを呼んでからnmake
73 :
デフォルトの名無しさん :2009/06/27(土) 03:21:02
#include <stdio.h> int main(void) { char a; int x; printf("数字は?"); scanf_s("%d",&x); printf("文字は?"); scanf_s("%c",&a); printf("数字は%dです。\n",x); printf("文字は%cです\n",a); return 0; } 正常に動作しません。エラー、警告ともにでませんが、デバッグで異常がでます。 「 数字は?(:8と入力する)8 文字は?数字は8です。 文字は です。 」 と出ます。文字の入力ができません。どうしてでしょうか?
74 :
デフォルトの名無しさん :2009/06/27(土) 03:22:05
>>72 すみません。
設定用のバッチファイルを呼ぶってどうすればいいんですか?
>>73 scanf()は使わんから細かい挙動を知らんけど、
表示から考えると、8のあとの改行が%cでよまれてるっぽいな。
76 :
デフォルトの名無しさん :2009/06/27(土) 03:33:39
>>75 本当ですね。
「
数字は?(8gと入力)8g
文字は?数字は8です。
文字はgです
」
と表示されます。やっぱり謎です。
スレ違いくさいけど scanfは、標準入力から直接受け取らないで、バッファに一旦入力した文字を格納する。 8を入力したとき、バッファには"8","\n"が格納される それをscanfが読み込んで、バッファには"\n"が残っている で、次のscanfでは「入力待たなくてもバッファの残りを代入すればよくね?」と考えて改行を読み込んじゃう 8gと入れたときは\nをgに置き換えてるだけ
scanf関数は、罪作りな関数だと思うよ。 入門しか使わないくせに、癖が強すぎて入門者殺し 実用的なプログラ身ではscanf関数はまったく使わない
すいません。VC初心者です。 Visual Studio 2008 Express Edition と platform SDK で Win32プログラムを 作りたいんだけど、普通のC言語で作れますか?
>>78 どうせ初心者にはおまじないと大差ないレベルなんだから
安全な方法をブラックボックスとして与えればいいのにねー
なんでscanfなんだろう
C言語ができた当時はアセンブラレベルが当たり前だったから scanf程度でも十分初心者に優しかった。
vc++がc++0xに対応するのはいつごろなんですか? template typedefとか使いたいんですけど
こんなところで日本語で質問しても誰も見てないと思うが
アラビア語じゃないとね
いちいち文字参照で書き込まないといけないから面倒臭いんだよね、2chだと
VC++2008EEでWin32アプリを作ってます。 ウィンドウに配置したコントロールのDisabledの値を変更するにはどうすればいいでしょうか?
他人の作ったWindowsアプリのメンテナンスをすることになりました。(製作者は行方不明です) が、最初のところでいきなりつまづいてしまいました。 プログラムのエントリポイントがどこにあるのかわからないのです。 ソースのあるフォルダ全体に対してgrepをかけてみたのですが、mainもWinMainも見あたらず、 リンカのオプションにも/ENTRYは使われていませんでした。 プロジェクトファイルにもEntryPointSymbolの記述がありません。 私はこれ以外にエントリポイントを指定する方法を知らないのですが、 あとはどこを見ればいいのでしょう? 環境はVisual Studio 2008です。
言語がC++なのは確かなことだと思うが、MFCで作成されたものならどちらのエントリポイントもソース中には存在しない。
>>90 MFCならプロジェクト名.cppにInitInstance()があるからその辺りがほぼエントリポイントだが、
そのレベルだととてもじゃないがメンテナンスは無理。
先ずはMFCアプリの解説本を読んで簡単なMFCアプリを作れるようになってからだと思う。
# 逆に言えば、エントリポイントなんて意識する必要ないことを知っていれば簡単なんだけどね。
すいません。書き忘れていましたが、InitInstanceもgrepで探したんですが存在しませんでした。 で、Visual StudioでF11を押したら、とりあえずエントリポイントっぽいところが出てきました。 恥ずかしいことに、ステップ実行にはブレークポイントが必須だと思い込んでいました。 いきなり頭からステップ実行できたんですね。 そのあと順にステップ実行していったら、別のDLLの中でインスタンスの初期化をしていました。 どおりで、ソースをいくら見てもわからないわけです。 とりあえず「MFC」でぐぐったら、どういう物なのかわかってきました。 ありがとうございました。
で、MFCなの? .netだったりしてないよね?w
>>89 ありがとうございます。
もう一つ質問です。
2008EEのWin32アプリでは「クラス追加ウィザード」というのは使えないのですか?
使えない場合、自前でやる方法があれば教えてください。
質問です input関数で.txtのデータを読み込むのですが 読み込んでTextBoxに表示させるとvbTabで空けた空白の長さが整わないのです どうすれば整いますか? FileOpen(1, fname, OpenMode.Input) TextBox4.Text = "クラブ名" & vbTab & "男子部員数" & vbTab & "女子部員数" & vbCrLf & vbCrLf Do Until EOF(1) Input(1, club) : Input(1, dansi) : Input(1, josi) TextBox4.Text = TextBox4.Text & vbTab & club & dansi & josi & vbCrLf Loop FileClose(1) 環境はVisual Basic 2008 Express Edition Windows Formでやりました
98 :
デフォルトの名無しさん :2009/07/07(火) 21:31:26
>>98 VBのスレを知らんから誘導できん。すまんな。
すいません、スレタイちゃんと読んでませんでした Visual まで読んで あっVB とか思い込んでました
連番のjpegファイルからmotion jpegのaviファイルを生成したいのですが、 そういう機能を持った商用の良いライブラリはないでしょうか。 PIC Video codec等はアプリケーションに見えるのですが、 ライブラリとして使えないものでしょうか。
OpenCV
103 :
デフォルトの名無しさん :2009/07/08(水) 20:27:55
vc++eeでwin32apiアプリケーションを作る勉強をしてるのですが CppUnitを導入しようと思いまして、テストの出力を出力ウィンドウなどに送りたいと思います。 TRACEマクロはMFCじゃないと使えないようですし、何か方法あるのでしょうか? コマンドプロンプトを起動してcoutしても出ないようですし。 よろしくお願いします。
104 :
103 :2009/07/08(水) 20:34:31
すいません 見つけました OutputDebugStringですね 散々探して見つからなくて、書き込んでちょっと探すと見つかる・・・ このパターンが多いな 失礼しまいた。
2日前にVS2008EEを入れてC++の勉強を始めました。 テンプレートの一番最初にあるWindowsフォームアプリケーションを選択して フォームにボタンを置いてネットのサンプルをそのままコピペしたのですがコンパイルできません。 書き足したのはこの1行だけです。 (前略) private void button1_Click(object sender, EventArgs e) { HWND hWnd = FindWindow("無題", null); //←追加 } (以下略) どう直せばいいんでしょうか?
>>105 その1行自体は<windows.h>をインクルードすればいいのだが、
フォームアプリケーション(というよりCLRプロジェクトすべて)は、
<windows.h>ベースの仕組みではないから、お前が見ているであろうサンプルすべてが参考にならないぞ。
たぶんそれVC用のソースじゃないから VC用のソースを探すかVC用に修正して使う。
>>106 ありがとうございます。
VC++でぐぐっても、対象となるコンパイラのバージョンが明記されてないサイトが多くて困っています。
今のところVC++6.0やVS2005のサイトが多いでしょうか、
ある程度知識が付けば、ソースを見て判別できるようになると思うのですが。
最初に選ぶプロジェクトのテンプレートを変えれば、ヘッダの追加をしなくてもそのまま動く環境になりますか?
それとも2005用のソースを2008でコンパイルするには、毎回手直しが必要になってしまうものなんでしょうか。
>>109 いや、大抵のことはバージョン問わず使える。
VC++で作れるアプリには、ネイティブアプリとマネージアプリと2種類あって、これがまるで別物。
Windowsフォームアプリケーションのプロジェクトは後者。<windows.h>を使うのは前者。
VC++のプロジェクトの中では、Win32アプリケーションなどが前者に属する。
自分が何を使って作りたいのか決め、それについての解説だけを追わないと混乱する。
>>110 わかりました。
つまり、昔ながらのstatic xxx main関数があって、ソースの先頭に#include hoge.hが並んでいるような物が
今はネイティブアプリと分類されている、という解釈でよいでしょうか?
それは標準C/C++
あまりにも自分が無知すぎるので少しぐぐってきました。 「新しいプロジェクト」でテンプレートが5つのグループに分かれていますが、 CLRのグループに属しているのがマネージドアプリなんでしょうか。 すると一番下のWin32というのが、昔SDKと呼ばれていたものに相当するのかな? 古いサンプルを動かしたいときはMFCかWin32を選べばよさそうに思えます。 こんな理解で合ってますか?
その5つぐらい全部試してみたって1時間もかからないだろうし、 自分の目で確認したほうが人に聞くよりはるかに理解しやすい。
なんか初心者以前の質問が多いけど 最近はVCの入門書売ってないのか?
VS2008でC#を使う、みたいに特定の環境に向けた本ならたくさんあるけど、 移植とか移行とか処理系の世代間の差異を解説したものは少ないと思うよ ライブラリの比較とか、ソースの記述方法の変化みたいな話はCマガジンとかでよく見る
いや、だからまず自分の環境用のそういう本買って初心者になれよって話だろ。
ここは入門者もOKのスレじゃん
初心者ですが質問いいでしょうか? officeファイル(ppt,pptx,doc,docx)からファイルの情報(テキスト)を取得できる プログラムは作れますか? できればofficeの入ってないPCで実行したいです
スレ違い
どこのスレにいけばいいでしょうか?
>119 現実にそういうプログラムが存在するか調べる。 存在するならどうやってるか調べる。
>>122 初心者に優しくないのなら書き込むな。
立ち上げるな
ここは子供電話相談室か? 小学生なら小学校の教科書の範囲を勉強すればいいし 初心者なら入門書の範囲を勉強すればいい 教科書の範囲外は卒業してから
このスレ終了
>>119 取り出したい情報による。
ファイルサイズとか更新日時なんてのはOfficeとか関係ないし
作者名や会社名は文字列がそのまま入ってるから、それっぽいデータなら
なんとか取り出せないこともない。
ちゃんとしたBuiltinDocumentPropertiesなんかの情報が欲しいんだと、
Officeのインストールされてないマシンではちょっと難しい。
それこそファイルのヘッダから構造体のポインタを追っかけるような
プログラムになると思う。初心者スレで質問してるレベルでは無理。
OOoでテキスト出力すれば良いんじゃね?
次レス予測 「会社のマシンなのでOOoとか勝手にインストールできないんです」
「OOoって何ですか?」ではないかと
132 :
119 :2009/07/10(金) 20:54:14
お返事ありがとうございます
OpenOfficeで開けばいいのですがそこを自動化するプログラムを作成したいです。
>>126 具体的には以下の情報です
docファイル 本文、作者、更新時間
pptファイル 使われているテキスト、ノート、作者、更新時間
>>131 2週間ほど勉強してdocx,pptxはそのzip展開して情報を取り出すことまでできました。
docファイルとpptファイルがどうしようか悩んでいます。
バイナリ仕様が公開されているようですがどうも理解できません
>>126 さんにあるようにヘッダから構造体、ポインタを勉強。
又は、利用できるライブラリ(フィルターでいいんでしょうか?)を探す。
この方法でいいんでしょうか?
>131 そんなのとっくの昔にやってるってさ
134 :
デフォルトの名無しさん :2009/07/10(金) 21:23:49
>>132 XDOC2TXT 呼び出せよ 割と使っているのは多い
135 :
デフォルトの名無しさん :2009/07/10(金) 21:29:37
フィルタ活用事例
GoogleXdoc
Namazu for Win32
Hyper Estraier
Meadow2
MiGrep
VxEditor
smoopy
Transwise
EBView
サーチクロス
xdoc2txtはPDF,WORD,EXCEL,一太郎などの各種バイナリ文書から、テキスト要素を抽出する汎用テキストコンバータであり、
Windowsのコマンドラインで動作します。
xdoc2txtは各種文書の構造を直接解析しているため、単独で変換できます。
WORDや Acrobatなど、作成元のアプリケーションをインストールする必要はありません。
高速に動作するので、各種全文検索エンジンのフィルタに最適です。
ワープロ文書の種類は、拡張子から判別します。次の拡張子のファイルに対応しています。
リッチテキスト Microsoft WORD 2007(OOXML) Microsoft Excel 2007(OOXML) Microsoft PowerPoint 2007(OOXML)
.doc Microsoft WORD ver5.0/95/97/2000/XP/2003 Microsoft Excel ver5.0/95/97/2000/XP/2003
.ppt Microsoft PowerPoint 97/2000/XP/2003 OpenOffice.org Open Document
一太郎 ver5 一太郎 ver6 一太郎 ver7 一太郎 ver8/9/10/11/12
OASYS/Win 新松/松5/松6 Lotus 123 Windows3.1 Write Adobe PDF Webアーカイブ HTML
OutlookExpressのエクスポート形式
http://www31.ocn.ne.jp/~h_ishida/xdoc2txt.html
どうみてもVCとは全く関係ない展開なんだが
結局VC全然使う必要なかった
xdoc2txt調べてみます ありがとうございました。 こういう質問はどこでするのが適切でしたか?
さすがにそれぐらい考えろや… officeでもプログラムでも、いくらでもキーワード出るだろ
#pragma once ってプリプロセッサですよね? どうやってプリプロセッサで インクルード1回だけ ってのを実現しているのでしょうか?
>>140 一般的なインクルードガードの手法はご存じない?
142 :
デフォルトの名無しさん :2009/07/11(土) 22:45:41
質問です。 タスクトレイにアイコンを表示する方法を調べています。 調べてみたら、Shell_NotifyIconという関数を 使用すればいけることが分かりました。 とりえず、コンパイルだけ通してみようと試しましたが、 うまくコンパイルが通りません。 どうすれば、コンパイルを通せるようになるでしょうか? エラーメッセージが error LNK2028: 未解決のトークン (0A00000F) "extern "C" int __stdcall Shell_NotifyIcon・・・・で参照されました。 error LNK2019: 未解決の外部シンボル "extern "C" int __stdcall Shell_NotifyIconW・・・・で参照されました Shell_NotifyIconを使用している関数の中身は NOTIFYICONDATA notif; Shell_NotifyIcon(NIM_ADD, ¬if); しか書いていません。 環境はVC++2008 Express EditionのWindowsFormで作成しています。 よろしくお願いします。
143 :
140 :2009/07/11(土) 22:49:33
>>141 存じ上げています。
#ifndef ***
#define
本ソース
#endif
ですよね。
プリプロセッサは
コンパイラに引き渡す前の字句の置き換えを行うものだと
いう認識なのですが、
そうだとすると
#pragma once
ではどうやっているのか不思議だなぁということです。
>>140 ようするにプリプロセッサが特別扱いで処理している。
字句の置き換えはやることの1つに過ぎない。
>>142 プロジェクトのプリパティのリンカの「追加の依存ファイル」のところにshell32.lib追加してみたら?
>>144 なるほど。
ファイル名を利用しマクロ化しているなどの実装が考えられるというわけですね。
ありがとうございました。
>>142 #include <shellapi.h>
#pragma comment(lib, "shell32.lib")
148 :
142 :2009/07/11(土) 23:22:17
本屋に行ったけどCたすたすの本は少なく #が多いんだけど どっちで勉強してもいいんだろうか MFCとかCOMとかAPIっていまさら何ですかね
>>149 そりゃ両方できた方がいい
MFCが必要かどうかは作りたい物によるけど、COMとAPIは知らんと話にならんぞ
ありがとうございます じゃあ、その二つは早急に習得します 一か月ぐらいでかな
152 :
142 :2009/07/12(日) 12:36:29
質問です。 前回と同じで、タスクトレイにアイコンを表示する方法を調べています。 今度はLoadImageという関数を使用している部分でコンパイルエラーになります。 エラーメッセージが 未解決のトークン (0A00000B) "extern "C" void * __stdcall LoadImageW ・・・・で参照されました error LNK2019: 未解決の外部シンボル "extern "C" void * __stdcall LoadImageW ・・・・で参照されました。 fatal error LNK1120: 外部参照 2 が未解決です。 ソースは HINSTANCE hInst = GetModuleHandle(NULL); NOTIFYICONDATA icn; icn.hWnd = hwnd; icn.uID = 100; icn.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; icn.uCallbackMessage = WM_USER + 1; icn.hIcon = (HICON)LoadImage(hInst, MAKEINTRESOURCE ( "IDI_ICONTRAY"), IMAGE_ICON, 16, 16, 0 ); Shell_NotifyIcon ( NIM_ADD, &icn); 環境はVC++2008 Express EditionのWindowsFormで作成しています。 前回と同様、何かをインクルードすればいいのでしょうか。 現在はwindows.hとshellapi.hをインクルードしています。 よろしくお願いします。
Formだったら.netのみでやった方が簡単な気がする
俺にはFormアプリケーションを作った経験はないんだが、Formアプリケーションって APIを使う場合は必要なLibをいちいち全部自前でリンクしなきゃならないのかい?
俺もFormアプリは詳しくないけど C言語系では必要なLIBは自分で指定すんのが基本だからな 宿題スレなんか見てると、よく数学ライブラリをリンクしないで コンパイル通りませーんって泣いてる初心者がいるよなw
どんな形かは判らんが大抵使うよ宣言が要るんじゃないか
158 :
142 :2009/07/12(日) 13:56:11
>>153 教えてくださったページで、無事コンパイルが通りました。
ありがとうございます。
>>149 C#はC++とは全く別の言語だぞ。名前がよく似ているだけで。
>>149 C#はクソ言語
・・・とまでは言わないけど、
Javaと同じでC++より楽に習得できる。
C++はバカには使えないほど高度(変態)な言語だが
使いこなせるヤツはもう本当にすごい。
ちなみに俺はまだまだまだまだ使いこなせてません。
つか、MFCくらいが一番面白い。
じゃあ三つとも覚えればいいんですね API 始めたばっかだけど
visual C++2008を使っているのですが、cppファイルを開こうとするとメモ帳が表示されて、バイナリー表示?されてコードが見れないのですが 改善方法を教えてください。DirectX SDK November2007が入ってます。OSはXPSP3です。
>>163 cppはテキストファィルだが、どこからどうやって開こうとしてる?
たとえばエクスプローラーからcppファイルをダブルクリック、とか
IDEからcppを右クリックしてコードを表示、とか。
>>164 レス遅れましてすいません。
ソリューション開いてソースフォルダにあるcppファイルをダブルクリックで開こうとしてます。
ダブルクリックの代わりに右クリックからファイルを開くアプリケーションの選択でどうか うまくいったら規定値に設定で
>>166 うまくいかないです・・・。VC上で開くことは出来たのですが文字化けしててダメでした。
VC入れなおしても直らないし、ウイルスに感染してるので設定がめちゃくちゃになったのかもしれません。
なのでOS入れなおすことにしました。お騒がせしてすいません。レスありがとうございました。
文字化けは最初の質問とは別の話だな
CLRプロジェクトの中で書かれたコードは、.NET Frameworkのライブラリを使わなくてもマネージドコードという扱いになるのでしょうか?
そうだよ。 C#でclass C {static void Main() {}}のような何もしないプログラムを書いても .NET Frameworkが実行に必要なのと同じようなことと言えばいいかな。 そうではなくて、ネイティブコードを混ぜたいという意味なら、 #pragma unmanagedなどで切り替えできる。
>>170 よくわかりました
ありがとうございます
VC++のC++で、現在のスタック領域の大きさを取り出す方法ありませんか? スタックが少なくなったらエラー処理がしたいので、お願いします。
>>172 スタックオーバーフローを回避したいならヒープ領域を使えば?
いや、再帰処理のプログラムにエラー処理を組込みたいので。 現在は異常終了してしまうし。固定値で検査は出来るけど、 固定値は入れたくないし。
ESP見るとか
>>174 スタックオーバフローチェックのコンパイラオプションではダメなの?
そもそも、スタックオーバーフローになるような組み方をしている再帰処理に問題があるんじゃないか?
離散数学の問題を解くようなプログラムだと簡単にオーバーフローしちゃうから その辺はプログラムを作るときに工夫するよう、自分で考えたほうがいい。 あれは簡単には解けない、ってことを確認するのも勉強のうちだから。 学生じゃなかったら的外れな回答でごめん。
まあ、たしかに、スタックオーバーフローするようなプログラムにしない、 と言うのは正しい。しかしまあ、出来るならば再帰の中で検査をしたいと 思っています。今現在は#define STACKSIZE 1000000 で固定値で 検査をしているのですが、コンパイルオプション変えるたびにプログラム 修正もいやだなーと。しかし、調べた限り簡単では出そうに無いですね。 あきらめて固定値で行こうと思います。
ありがとうございます。でも今やってみたのですが。 コンパイルスタック指定 1000000で下記のような出力に。 [00130000 00126000] p=0012FF60 dat p=001177DB dat p=000FF047 dat p=000E68B3 dat p=000CE11F dat p=000B598B dat p=0009D1F7 dat p=00084A63 dat p=0006C2CF dat p=00053B3B dat p=0003B3A7 <−ここの次でスタックオーバーフロー プログラムは、下記ですが、出力が納得できない… NT_TIB* getTIB(void) { NT_TIB* pTib; __asm { mov eax, dword ptr FS:[18H]; mov pTib, eax; } return pTib; } void testp() { char buf[100000]; char dat; printf("dat p=%p\n",&dat); testp(); } int _tmain(int argc, _TCHAR* argv[]) { NT_TIB* pTIB = getTIB(); printf("[%08x %08x]\n", pTIB->StackBase, pTIB->StackLimit); printf("p=%p\n",&pTIB); testp(); return 0; }
行数オーバーで圧縮しています。 [00130000 00126000] のStackBase,とStackLimitの範囲が1000000も無い、 スタックオーバフローは約1000000でオーバーしているので正しい なぜなんだろう?
文字列の処理について教えてください。 VisualStudioでC++のプロジェクトを作ると、以下のようなグローバル変数が自動的に宣言されますが、 TCHAR szTitle[MAX_LOADSTRING]; // タイトル バーのテキスト ここにTCHAR型のローカル変数と同じ方法で文字列を代入しようとすると コンパイルエラーになってしまいます。 TCHAR test[MAX_LOADSTRING] = _T("これは大丈夫"); szTitle = _T("エラーになる"); 同じ型の変数を宣言しているつもりですが、結果が違ってしまうのはどうしてでしょう?
185 :
181 :2009/07/14(火) 19:36:01
う〜〜ん、他のHPで、わざとスタックオーバーフローさせて、サイズ検出が あったが、それしかないのか? ちょっとやってみる。
189 :
181 :2009/07/14(火) 20:07:36
>>188 コミットのサイズ変えても、出力は変わらず。
う〜〜ん、例外検出がなかなかうまくいかず。
それにわざとエラー出して、サイズ検出もなんとなく納得できないし、
結局、固定で持ったほうが早そうな気がしてきました。
どうせコンパイルするんだし…
皆さんありがとうございました。
190 :
181 :2009/07/14(火) 20:18:00
補足。testp()の中にスタック情報出すのを入れた場合下記のよう。 やはりコミットで増えるようですね。最大値は相変わらず不明ですが。 [00130000 00126000] p=0012FF50 [00130000 00117000] dat p=001177B7 [00130000 000fe000] dat p=000FF003 [00130000 000e6000] dat p=000E684F [00130000 000cd000] dat p=000CE09B [00130000 000b5000] dat p=000B58E7 [00130000 0009c000] dat p=0009D133 [00130000 00084000] dat p=0008497F [00130000 0006b000] dat p=0006C1CB [00130000 00053000] dat p=00053A17 [00130000 0003b000] dat p=0003B263 この後オーバーフロー
>>184 馬鹿だから答えられないのですね。
書き込むな!クズ!
>>191 その一言でキミの相手するやつは激減したよ。
いつもそんな調子だから人に相手されなくなるんだよ。
>>183 文字列もどきの処理は、型によってケースバイケースでわかりにくいからねえ。
もうちょっとマクロとか関数が整理されてたらよかったんだけど。
そういうのの一覧が載った本を見たほうが早いと俺も思うよ。
さもなくば、文字列がもうちょっと簡単に使えるC#あたりに乗り換えるか。
その場合は
_tcscpy_s(szTitle, _T("てすと"));
ただしコピー先のサイズは固定で自動的に拡張してくれないから
文字列の長さがコピー先の容量を超えてると代入に失敗する。
コンパイル時か実行時か、どちらか容量オーバーが発見されたタイミングでエラーが出る。
そういうのも代入と言う? 馬鹿がうつった?
父ちゃんに言われなかったか? やらないのはできないのと一緒だって 早くハロワ行けよ
総合開発環境の下部のメッセージ部分に出力するにはどうすればいいんでしょうか? デバッグ用に使ってるのを見かけたんですがやり方が書いてありませんでした
ありがとうございます!
CLRだとSystem::Diagnostics::Debug::WriteLineだけどな
C++のCLRってVBやC#より処理早いの?
おなじ NETのアセンブラにするんだろ
強いて言えば、VB.NETやC#と違って 標準でSuppressUnmanagedCodeSecurityAttributeが付くので、 ネイティブコードの呼出はC++が速いらしい。 (もちろん、C#やVB.NETでもSuppressUnmanagedCodeSecurityAttributeを使えばその点は同じになる)
205 :
デフォルトの名無しさん :2009/07/19(日) 04:41:53
普段2003を使ってるんだけど Visual Studio 2008 Express を使ってみたんだ インテリセンスがすごくよくって 関数を使おうと書き始めると候補が出てきて途中でエンター押すと 全部書いてくれてすごく良いんだ この機能って2008になってから出来たの?
2005も有るけど、新しい方がいいらしい
着実にVer.Upしてるよ。 VC6のインテリセンスのガリガリガリガリはまだ記憶に新しい。
2008のインテリセンス、マジキチすぎ。 キーボード5つぐらいしか押してないのに50文字ぐらいの長い命令文がいつのまにか入力できてる。 プロパティとメソッドの区別も一発でわかるようにアイコンが付いてるし、自分で作ったクラスまで 自動的に登録されてるし。
しかし、C#やVBはさらにその上を行くのであった。 たまに触ると本当に羨ましく感じる。
おかげで命令のスペルうろ覚えの時がある。
C++にもっと力入れてほしいな webは作れないんだよね
212 :
デフォルトの名無しさん :2009/07/19(日) 14:04:43
VS2008を使っているのですが、 クラスビューでプロパティを選択して、 イベント、オーバーライド、メッセージを選択しても 全く表示されなくなりました。 どうしてなんでしょうか? 新規作成時、直後は問題ないのですが、開発途中で、 表示が消えるので、新たに関数などの追加ができなくなって困っています。 直し方はあるのでしょうか?
>>212 うっかりプロジェクトファイルとか消してない?
鯖に共有フォルダ作って共同開発とかしてると、たまに誰かか勝手にファイルを移動しちゃうことがあって困る。
Subversionお勧め EEじゃなけりゃAnkhSVNも
216 :
デフォルトの名無しさん :2009/07/19(日) 20:01:26
212ですが、 自己解決?しました。 正しい、やりかたではないと思いますが、 ソリューションファイル等があるフォルダにある VC++ Intellisense Database のファイルを削除して、もう一度、VS2008を起動させて、 ソリューションファイルを開くと、自動的にもう一度、 VC++ Intellisense Databaseファイルが作られるので、 それで、直りました。 正しいか不明だけどね。 お騒がせしました。
それならよくあること。気にするな。
public: がダメ、総てアクセッサー付けろは OOP原理主義者。
こいつは何を言っているんだ?
std::tr1:: などと打ったときに最後の::の後を自動補完する候補が出るときと出ないときがあるんですが これを毎回出すようにするにはどうすればいいんでしょうか?
インテリセンスは気まぐれだからなぁ。 一応CTRL+SPACEを押せば強制的に候補一覧(候補がひとつしかないときは一気に確定)できるけど 必ずしも成功するとは限らないところがVC++のいいところ。 これがVBやVC#、今はなきVJ++ではほぼ100%確実に候補が出る。 で、開発者いわく、インテリセンスは結局のところ「コンパイラそのもの」なんだそうで、 リアルタイムコンパイルしながら候補を絞り込んでるわけだけど、 C++は言語が複雑すぎてちゃんとできねーんだとさ。
ほとんどは、その前の文にエラーがあるとインテリセンスは動かない。
質問します 環境は「VC2008ExpEdition + .net」です Bitmap^ abcimg=gcnew Bitmap(300, 400); Graphics^ abcgraf=Graphics::FromImage(abcimg); abcgraf->FillRectangle(Brushes::Black, 0, 0, abcimg->Width, abcimg->Height); pictureBox1->Image= abcimg; で作られた画像の真ん中にナスのような形のグラフが書き込まれます。 そのグラフを白で塗りつぶして面積を求めたいのですが、塗りつぶしがうまくいきません 別のやり方があれば教えてください Color abcclr; for(j=0;j<400;j++){ for(i=0;i<300;i++){ abcclr=abcimg->GetPixel(i,j); Byte r=abcclr.R;Byte g=abcclr.G;Byte b=abcclr.B; if(r>1){ if(mode==0){//最初の境界を発見した! bforx=i;bfory=j;mode=1;//フラグを立てて管理 //↓は最初境界の終わりを探す while(r==0){abcclr=abcimg->GetPixel(i+1,j);r=abcclr.R;g=abcclr.G;b=abcclr.B;i++;} }else{//フラグ立ってるので現在値まで塗りつぶしのために白い線を引いてフラグを消す abcgraf->DrawLine(Pens::White,bforx,bfory,i,j);mode=0;} }// (R>1)節の終わり abcclr=Color::FromArgb(r,g,b); abcimg->SetPixel(i,j,abcclr); }//iのforループの終わり mode=0; }//jのforループ終わり
単にロジックの問題なのかapiの使い方の問題なのかはっきりしろ
223 です 途中まではうまくいくが、グラデーションのように黒い線(塗りつぶしの失敗)が入ります ###### ###### ######## # # # # ########## のような感じに。下手な説明&AAですみません。
すまんが、まったくわからん。 画面キャプチャしてUPするなり、他人に伝える工夫と努力が必要。
何かまったくの思いつきで作ったとしか見えないんだが それ仮に動いたとして使いものになるのか?
全くの初心者なんですが、VC++2008を使った教本でお薦めのものってありませんか?
本屋で実際に手に取って見るのがお薦め。
最低限C/C++は知ってる前提だから そうじゃなくてC/C++から勉強したいならVCというよりC/C++の入門書だし C/C++スレで質問した方がいい。
VC++2008の初心者じゃなくてC++の知識がないってことかな?
まあ
>>230 の言う通り過ぎて付け加えることがない。
C++の本はたくさんあるけど IDEの基本から上手な使い方みたいなことが書いてある本ってないよね プロパティとかどう弄ったらよくなるのかとかいまいちわからない
>>230 >>231 なるほどVC++の初心者に使いかたを教えるスレだったんですね気づきませんでした
C/C++の知識が無いプログラミング初心者なんです
それでVC++インスコしてネットや本屋で教本の類を幾つか読んでみたんですけどVC++を使って教えてるのが見つからなかったんですよ
全くの初心者なので用語の意味とか全然分からないし本で言っている事がVC++の機能のどれを指してるのか、どこにあるのか分からなかったりと
なかなか先に進まないのでVC++2008を使った解説本が無いかと思ったんですがお勧めの物ありませんかね?
それともやっぱりC/C++スレで聞いたほうが良いですかね?
CかC++をやって、言語の仕様をしっかり理解してからVCやることをオススメする Cを理解する頃には意味不明なところがしっかりわかるようになるはず
>>234 そういう意味でのVCではなくて、プロジェクトの作ってビルド・実行するとかデバッガの使い方について知りたいんだと思う。
そーいうのはヘルプ見りゃわかるだろ。 ただし、C/C++の用語がわからんと理解できんだろーから、必要なのはC/C++の入門書ということになる。 したがってスレ違い。
237 :
223 :2009/07/23(木) 10:35:21
223です。説明が足りないといわれたので、追記に来ました
http://upload.jpn.ph/ にUPしました
u44616.jpg というファイル名です
左が線だけの状況。実は点なんですが、DrawLineで繋げてます。
閉鎖空間であることは確認済みです
右が223のプログラムで塗りつぶそうとした結果です
どうみても失敗してます。原因がわからなくて悩んでました
>>237 画像のアドレスはこういうふうに書けば回答者がすぐに確認できる
ttp://upload.jpn.ph/upload/img/u44616.jpg それからソースが汚すぎる。
ちゃんと式の終わりごとに改行して演算子の前後にスペースを入れて
インデントをつければ「forの終わり」とかコメントをいちいち
書く必要がなくなる。たとえばこんなふう
int i, j, k;
for (i = 0; i < 10; i++)
{
for (i = 0; i < 10; i++)
{
k = i + j;
printf("%d ", k);
}
}
ちゃんと調べたわけじゃないけど、whileの中で変数 i をいじってるのが
原因じゃないかって希ガス
うちで試してみたら、ちゃんと動いたじぇ 追加したのは、変数宣言と、DrawLineでテスト用の画像をてきとーに作る部分だけ int i, j, mode; int bforx, bfory; 個人的には、いちいちRGBに分解した意味がわかんなかったけどもな
そのアルゴリズムだと、境界線の角度が浅くて横に2ドット以上 白いピクセルが続いた時におかしくなる 白いピクセルの連続が偶数個だと、そのラインは塗られないから 黒く残ってシマシマになる
あ、白じゃなくて赤か。
シマシマ節子さん
243 :
223 :2009/07/23(木) 13:08:23
回答ありがとうございます 一応、白が続いた時用にwhileで境界線である白の終わりを判断して飛ばしてます。 while(r==0){abcclr=abcimg->GetPixel(i+1,j);r=abcclr.R;i++;} >240 さんの言うところが調子悪かったのですね。いじってみます。 RGBに分けたのは、今後の発展を考えてでありまだ何も実装してません。
244 :
デフォルトの名無しさん :2009/07/23(木) 13:30:05
LNK2019とLNK2001のエラーがどうしても消えないのですが、 何が原因のものなのでしょうか
>>244 ヘッダのインクルード忘れ。
ライブラリのリンク忘れ。
>>243 だから、改行とインデントはちゃんと入れろと言ってるのに
while (r == 0)
{
abcclr = abcimg->GetPixel(i + 1, j);
r = abcclr.R;
i++;
}
VC6でCDiaLogを基にしたCTestクラスを作って void CTest::OnButton1() {処理} void CTest::OnButton2() {処理} 上のようなプログラムはクラスウィザードで出来ますが void CTest::OnButton1() {関数();} void CTest::OnButton2() {関数();} void 関数() { 処理 } 処理にUpdateData()などCDiaLogクラスの関数(メンバ)を使ってるから エラーになります。ボタンを押す、などのイベントがあるなら関数を 作れますが、CTestにアクセスできる空の関数を作るにはどうしたら 良いですか?
>>247 void CTest::関数() // CTest のメンバ関数にすれば、処理にUpdateData() してもアクセス違反にならない。
{
処理
}
>>248-249 クラスウィザードでのやり方がわからないので最初に249の方法
試したら出来ました。サンクス。
directxを使ったコードを書き、フォームを追加してみたのですが 「1>cl : コマンド ライン error D8016 : コマンド ライン オプション '/MTd' と '/clr' は同時に指定できません」 と出てコンパイルエラーが出ます。この二つは併用できないと思っていいんでしょうか??
>>252 ありがとうございます
C++ややこしいですね><
/clrということはC++/CLIだからC++ではない
255 :
デフォルトの名無しさん :2009/07/27(月) 16:37:52
Visual Studio2008で ソースの文字検索時に該当箇所を一括で強調(色が変わるとか)して表示するような設定ってありますか? 次を検索・・次を検索で見ていく方法が使いにくいです
>>255 VS2008内蔵エディタには、検索した文字列に一括で色を付ける機能はないので、
外部エディタを何か設定して使うといい。
あとは、行単位になっちゃうけどブックマークぐらいかなあ。
Visual Studioはバージョンアップごとに進化しても、Visual C++はまったく進化しないな。
バージョンが上がるたびにコマンドの位置や名前が変わること… それがMicrosoftの考える「進化」。
>>257 2010のインテリセンスは進化しているって。
クラスのメンバ関数がよくわからないのですが、詳しく解説してる本とかありますか?
MSDN
MSDNって小難しい上に時々間違ってない?
詳しく解説してる本ほどじゃない
俺詳しくないから、MSDNで調べてその意味を調べるためにネットを徘徊する羽目になる
msdnってある程度知識がないと読めないのがネックだな
VCの特定のクラスの特定のメンバ関数じゃなくて メンバ関数そのものがわからないならMSDNじゃなくてオブジェクト指向か言語の本
そっちか
質問させてください。 Form1からForm2を呼び出すことはできたのですが、その後 Form2からForm1を呼び出すべく、Form1をForm2にインクルードすると どちらでも定義が見つからない旨のエラーが出てしまいました。 どのようにすれば相互に見つけられるでしょうか?
>>268 インクルード命令ってのは、インクルート先のファイルをその場所に展開する命令。
頭の中で、展開されるとどうなるのか想像してみれ。
あと一応インクルードガードでググっておくこと。
C++じゃなくて、C++/CLIの悪寒。
おおおおそろしや
今日ビルドしたら急に他のPCで動かなくなりました 29日に公開されたランタイム入れたらできたんですが これって新しくランタイムいれなくてもいいようにできますか?
旧版(の、ActiveX関係?)には致命的なセキュリティホールがあるので絶対に使わないこと。
ほかのPCでもWindows Updateで新しいランタイムが自動的にインストールされるはず。
268 Form1はmeで呼び出せると思うけど
アンカー忘れてたw
>>268 Form1はmeで呼び出せると思うけど
a
Visual C++ 6.0を使用しています。 プロジェクト→プロジェクトへ追加→ファイルを選択すると、 「動作を停止しました」と出てきてしまいます このせいで複数のファイルのビルドができなくて困っています どなたか教えてください
そうやってそんなエラーでた経験ないし、 複数のファイルのビルドができなくて困ったこともない。 どこか違う世界にお住まいの方ですか?
すんません。visual c++ 2008をインストールした後で特定のページを閲覧すると フォントが擦れてしまうバグってどう解決するんでしょう。 ググッても出てこなくて困っとります。以前同じような状況に陥ったときは たしか何かフォントを削除すると直った気がするのですがさっぱり忘れてしまいました。 どなたかわかる方教えては頂けないでしょうか。すみません。
281 :
デフォルトの名無しさん :2009/08/02(日) 09:43:51
すんません。 printfが表示させる関数ってぐらいしか知識無いんですが、 ミクミクダンスを作るみたいにプリグラムできるようになるのは どのくらい勉強したらなれるんでしょうか? さすがに70時間勉強したら作れるとかなんて思ってません。 2年ぐらい毎日1時間ぐらいやってたら作れますか?
人に理解して貰いたいならそれ相応に推敲しろよ プログラム以前の問題だぞ
283 :
281 :2009/08/02(日) 14:51:43
初心者の僕が毎日1時間2年勉強し続けたらミクミクダンスをつくるぐらいのスキルが実につきますか?
もっと短くてもいいと思うけど1日1時間じゃ、前の日のおさらいだけで終わっちゃいそうだな
VisualC++2003で開発されたフリーソフトを使ってるんですが、
同封されてるビープ音のwavファイルが再生されません
作者さんのサイトにはサウンドにDirectSoundを利用していると書いてあるので、
一応DirectX診断ツールを使ってDirectSoundのテストをしてみましたが、
「このサウンドカードはハードウェアによるバッファの使用をサポートしていません。
サウンドはソフトウェアバッファから再生されます。」
と注意は出るもののテストは全て成功しました。
作り手側の方たちから的確なアドバイスがいただけるかと思い質問させてもらいます。
フリーソフトはこちらになります
ttp://www.musenken.net/project/denken/ OSはXP SP2です
よろしくおねがいします。
コピペかな 作者に聞いてください WindowsUpdateはちゃんと実行しましょう
よくあることなのかと思い気軽に質問してみましたが、確かにそれが一番確実ですね。 時間のある時にでも作者さんにメール出して一度聞いてみます。 ありがとうございます。
290 :
286 :2009/08/02(日) 18:23:58
さっそくメール送ってみたらエラーで返ってきてしまった…
VC++2008で開発してます。 大容量のファイルをC++で作成するとき、ちょっとずつ書き込んでいくと、 ディスク内にフラグメントが出来そうなので、先行してディスクの領域を 確保した上で書き込みたいなと思っています。 これは考え方は正しいでしょうか?正しければ、やり方を教えてください。 よろしくお願いします。
ofstream outfile( "filename.txt" ); outfile << data1; outfile << data2; outfile << data3; ... びっくりすることに、C++のファイルストリームはバッファという仕組みがあったのです!
特権必要だしその用途にSetFileValidDataは全く必要ない
Solution Project Main Main.cpp Project Hoge (class Hoge) Hoge.cpp Hoge.h Project Fuga (class Fuga) Fuga.cpp Fuga.h MainはHogeとFugaに依存 includeパスにソリューションディレクトリを追加 Mainからは#include "(Project)/(Header).h"で参照 という風にやってるんですが これだとプロパティを変更する時にいちいち全部のプロパティを変えないといけません ソリューション全体で共通のプロパティを一発で適応させる方法は無いんでしょうか?
win32APIがあるってことはwin64APIもあるのかな?
ひとりごとです
>>297 あるけど大差ないのでまとめてWindows APIと呼ぼうぜという雰囲気。
>>299 レスありがとう
へーやっぱりあるんだ
勉強になった
>>296 VisualStudioスレで聞くといいと思います。
>>302 本来ならそのページの主に訊くのが筋なんだが・・・
>ウィンドウを動かすとそれらのコントロールが置き去りになってしまいます
タブに貼り付けているダイアログのスタイルを「子」にしていないだろ?
>>303 その他にある Control は True にしてましたが
Styleは書かれてなかったのでホップアップのままでした
指摘された通り子にしたところちゃんと描画されました
ありがとうございます
>環境はVS2008 Proで 宝の持ち腐れ。
VSのToolBoxにある各アイコンを 抽出する方法ありませんか? ResHackerで色々なexeやdllを調べたのですが どこにも見当たらなくて
MSに著作権があると思うのだが、無視して使うのか?
VS2008であれば VS2008ImageLibrary.zip に同様な画像のリソースが付属している。
VS2005のVC++で、Wizard生成のMFCアプリケーシュオンプロジェクトの質問です Debugをアクティブにした状態でビルドしたguiアプリケーションって他のosでも動きますか? osはxpでビルド→2000で実行なんだけどReleaseでビルドしたものだけ正常動作したのでちょっと疑問に思った
うごく
Debugのランタイムはどうした?
312 :
デフォルトの名無しさん :2009/08/09(日) 18:25:54
Visual C++ 2008 Express Edition を使っています。 デバッグ中にステップ実行でmain関数を抜けるときに、「現在の場所のソースコードを表示できません」 というエラーが何回も出るのですが、これはなぜなのでしょうか。 また、このエラーが出ないようにする方法はあるのでしょうか?
基本的に、main関数の外は我々プログラマが関知してはいけない混沌の領域だから。 慣れてくるとそこも見たりするようになるけど。 デバッグビルドでそのエラーが出るなら、基本的にどうしようもない。
>>312 俺も毎回そのエラーが出るけどなんでかわからない…
「main関数を抜けた後のソースコード」を誰も書いていないから。
スタートアップルーチンのソースを教えてないからでしょ エラーでもないし気にしないでいいよ
317 :
デフォルトの名無しさん :2009/08/10(月) 11:35:52
Microsoft Visual Studio 2008 Professional Edition プロジェクトのプロパティなどを開こうとすると、 「Failed to create .Net Frameworks PropertyGrid component. Please verify that the Common Language Runtime and .Net Frameworks are properly installed.」 と表示されます。 レジストリなどで調べましたが、.Net Frameworkは2.0、3.0、3.5すべてinstalledになっています。 他のツールでもインストールされていることが確認できました。 一体何が原因なのでしょうか? Microsoft Visual Studio 2008 Professional Edition はフルインストールしたはずなんですが。 原因がお分かりになられた方は、回答のほどよろしくお願いします。
SP1あてた?
使用OS:WindowsXP SP3
使用ソフト:MS VisualStudio 2008 Professional Edition
症状:デバッグ時に、"MSVCP90D.dllが見つからない"と表示される。このとき、ランタイムライブラリは"マルチスレッドデバッグ DLL(/MDd)""
試した対策:
(1)ランタイムライブラリを"マルチスレッドデバッグ(/MTd)"にして、デバッグ ⇒ 正常に開始。
(2)(1)をした後に、/MDdに戻して、デバッグ。 ⇒ 正常に開始。
(3)MSVCP90D.dll があるか、検索してみる。 ⇒ 見つかる。(正常に開始したほかのパソコンと同じような場所にあった。)
(4)
http://support.microsoft.com/kb/962219/jaの方法を試してみた 。
⇒ インストールできない。既にインスト済みか、ほかの条件が原因。
質問:
1./MDd でデバッグできない原因はなんでしょうか?その解決方法はあるのでしょうか?
2.C++のコンパイラーの設定で、/MTd を標準にできないでしょうか?
よろしくお願いします。
317です。 なぜか、二重投稿になっています。すみません。 >318 当ててなかったみたいです。自動更新で当たっているとおもっていました。 現在ダウンロード中です。解決したらまた報告します。
見間違えました。 320 は 319 です。
VC2008EESP1なんですがデバッガでXMMレジスタの中を見るには どうすればいいんでしょうか
322レジスタで右クリックするだけでしたごめんなさい
Visual C++ 2008 EEを使っています プロジェクトにソースファイルを次々に放り込んでいったら ソースファイルの置いてある実フォルダが、大分カオスに散らかりました。 VCを開いてソリューションエクスプローラを開くと、そこではフィルタで整理されています。 VCのソリューションエクスプローラ以外からもソースファイルを開くことがあるので 実フォルダとソースファイルを整理したいのですが、そうするとVCがソースファイルを 見失ってしまいます。それに今後ソースファイルを追加する度にフォルダと フィルタを手動で整理しないとダメになるので面倒です。 何かいい方法はありませんか?
がんばれ☆
>>324 先ずファイルを整理してから、ソリューションエクスプローラで追加しちゃいけないのか?
俺も使い始めてまもない程度だから正しいかわからんけど1プロジェクト1クラスを心掛けてる 追加インクルードにソリューションディレクトリを追加して 新しいクラスと関連の関数とかを一まとめにしたプロジェクトを作る プロジェクト構成でEXEではなくLIBに変える そんでクラスを利用するコードには #include "ProjectName/HeaderName.h" を追加 これで一つのクラスに対して一つのフォルダが割り当てられて、IDEのほうも混乱しない でもこれだとプロジェクトつくるたびに構成を弄らないといけないのでそこが面倒
1プロジェクト1クラスはねーよwww
どんだけモノリシックなクラスを書いているのか、と。
じゃあどう管理してんだよ
管理人さんを雇えよ。未亡人で若い奴を。
デバッグすると プログラム 'c:\Users\○○\Documents\visual studio2008\projects\test\debug\test.exe' を開始できません。 アプリケーション構成が正しくないため、このアプリケーションの開始に失敗しました。マニフェスト ファイルを参照してエラーの原因を調べてください。 アプリケーションの再インストールをすることで、この問題が解決する可能性があります。詳細については、アプリケーション イベント ログを参照してください。 と表示されてデバッグできません、ログにエラーは出てません。 表示されているフォルダにtest.exeは入ってます どうしたら良いでしょうか?
あーっと 使ってる環境はVS2008でOSはWindows7 32bitです
>ログにエラーは出てません。 ちゃんとアプリケーション イベント ログを見た?
アプリケーション構成が正しくないため、このアプリケーションの開始に失敗しました。 に一致する日本語のページ 約 58,700 件中 1 - 50 件目 (0.28 秒)
>>334 "c:\Users\○○\Documents\Visual Studio 2008\Projects\test\Debug\test.exe" のアクティブ化コンテキストの生成に失敗しました。
従属アセンブリ Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" が見つかりませんでした。
詳細な診断を行うには sxstrace.exe を実行してください。
って出てました
あとビルドログに
LINK : 前回のインクリメンタル リンクで C:\Users\○○\Documents\Visual Studio 2008\Projects\test\Debug\test.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
と出てましたがサッパリで・・・
あ、リリースにしてからデバッグ開始を押したら問題なく動きました でもデバッグで動かないって何でだろう・・・
埋め込みマニフェスト無効にしたりするとうまく行くこともあるかもしれない
>>336 ,337
要は「msvrcr90d.dllが見つからない」と言っている。
もっとも、正式リリース前のOS上で動かしているのだから
何が起きても不思議ではない。
デバッグ開始をするとプログラムを実行して勝手に閉じてしまうんですけどこれってどうにかなりませんか? デバッグ無しで開始をするとちゃんと何かキーを押すまでウィンドウが残るんですけど プログラムの内容は多分一番簡単なハローワールドのプログラムです
>>341 なりません。
デバッグしてるのに途中でとめない場合ってどんな状況?
止めたけりゃ最後にブレークポイント置くとか。
>>342 何かキーを押さないと終了しない っていうプログラムにしないと勝手に終了しちゃうって事ですね
ありがとうございました
345 :
デフォルトの名無しさん :2009/08/18(火) 17:53:13
質問です エディットボックスのフォントがTerminalで、「電」や「j」を入力すると、下の部分が切れて表示されません フォントサイズはCreateFont()で13を指定しています フォントやフォントサイズを変えることなく、行間?を広げて、文字をすべて表示させることは可能でしょうか もし可能であれば、方法を教えてください お願いします 環境はOS:XP、バージョン:6.0です
346 :
デフォルトの名無しさん :2009/08/19(水) 01:58:35
ただのCからVC++に移行中なのですが、 フォームプロジェクトのmainの初期に自動で作成される引数の変数の宣言時に array<System::String ^> ^args と宣言されていますが、 <>内はarrayの型と予想がつきますが ^ にはどのような意味が有るのでしょうか? ぐぐってもでてきませんorz ぐぐるワードでもいいのでご伝授お願いします
>>346 VC++の中にもいろいろある。
フォームを使うのはC++/CLIだけど
それをわかって使ってるのでなければやめといたほうが・・
ちなみに.NETアプリ作るわけじゃないならC++/CLIを使う必要はないぞ>< Cから移植らしいので一応いっとく
VC++ってGUI作り易い?
うん
まぁ一番自由だよな
Microsoft Visual Studio 9.0のVC++を利用して コマンドプロンプトで cl /EHsc aaaaaa.cpp とコンパイルしているのですが、 そのまえに毎回毎回 C:\○○○\VC\bin\vcvars32.bat としないと動きません。 環境変数でパスを通すと解決するのかもしれませんが、 どうすればパスが通るのでしょうか?
>>346 gccとVC++は両方とも併用して挙動を覚えると良いと思うよ。
>>353 「Visual Studio 2008 コマンド プロンプト」を使う
>>353 .\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat の中身を覗いておみ
357 :
353 :2009/08/21(金) 17:54:51
>>355 ファイラで作業中に、そのフォルダを現在のディレクトリとして
開いた一般のコマンドプロンプトで作業したいのです。
>>356 見てみました。
@SET VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 9.0
などのような記載が見つかりましたが、
ありすぎてどれを通せばいいのか分かりません。
お助けいただけますでしょうか?
それ用のバッチファイル作れば良いんじゃね?
359 :
355 :2009/08/21(金) 18:37:37
>>357 >ファイラで作業中に、そのフォルダを現在のディレクトリとして
>開いた一般のコマンドプロンプトで作業したい
だから、「Visual Studio 2008 コマンド プロンプト」のショートカットをコピーして、
コピーしたショートカットのプロパティで「作業用フォルダ」を好きなフォルダに変更すればいいだけの話なんだが。
360 :
356 :2009/08/21(金) 19:12:08
361 :
357 :2009/08/21(金) 21:22:33
>>359 ありがとうございます。
しかしその好きなフォルダは毎回変わりうるため
決め打ちはできないんです。
>>360 ありがとうございます。
そのリンク先のとおりにやってきます。
皆さんありがとうございました。
362 :
デフォルトの名無しさん :2009/08/22(土) 13:27:24
main.cppとmain2.cppにファイルを分けてコードを書いています 二つのファイル両方でvecter関数などを使いたい場合は、両方のファイルでvecterをincludeする必要があるのでしょうか?
ある。 というより、二つのファイルに共通なヘッダ(例:main.h)を作成して、インクルードするほうが良い。
364 :
デフォルトの名無しさん :2009/08/22(土) 13:57:18
おお、なるほど。そうします。ありがとうございました
ベクテー
class A{ public virtual func(); } class B : public A { public func() } vector<A> list; list[0].func(); ってやるとAのfuncが呼ばれるんだけどBのを呼びたい場合は vectorはポインタを入れるしかないの?
参照を入れてもいいぞ。
>>367 参照ってvector<A&>ってこと?
コンパイルエラーになるけど
Java使いですが、最近C++始めました 平山尚氏の「ゲームプログラマになる前に覚えておきたい技術」で #include "GameLib/Framework.h" namespace GameLib{ void Framework::update(){ unsigned* vram = videoMemory(); static unsigned i; vram[ i ] += i * 100; i += 9973; //1万以下最大の素数 i %= ( width() * height() ); } } というプログラムをサンプルソースのプロジェクトからデバッグ実行したところうまく動作しました ところが、自分で新しく作ったプロジェクトで同じソースを書いてデバッグ実行したらリンクの時点で問題発生 これじゃ自分で新しくプロジェクトを作り出せないよー。 1>msvcprtd.lib(MSVCP90D.dll) : error LNK2005: "public: class std::locale::facet * __thiscall std::locale::facet::_Decref(void)" (?_Decref@facet@locale@std@@QAEPAV123@XZ) は既に GameLib_d.lib(Manager.obj) で定義されています。 1>libcpmtd.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) は既に msvcprtd.lib(MSVCP90D.dll) で定義されています。 1>libcpmtd.lib・・・について更に10項目 1>LINK : warning LNK4098: defaultlib 'LIBCMTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 1>C:\Documents and Settings\デフォルトの名無しさん\My Documents\Visual Studio 2008\GameLib\TestGame05\Debug\TestGame05.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。 C++は初心者用の参考書(270ページ)を一冊読んだのですが、例によってエラー処理について何も解説してくれてないので途方に暮れています なにが原因と考えられるのでしょうか? 一行目のライブラリの設定は本の指示通りやってるので大丈夫だと思います(だからこそサンプルは動いたはず)
サンプルソースのプロジェクトをコピーして使いまわせばいいだけ どうしてもプロジェクトから作りたかったら プロジェクトの定義ファイル、その他のファイルの構成を見て同じにするだけ
#pragma onceとかの2重定義防止がヘッダにないんじゃないか
Microsoft Visual C++ 2008 Express Edition SP1 ですが LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。 というエラーが出ます。 VC++の再インストールを解決しません。 どうしたらよいか、ご教示ください。
環境は? ツールのオプションのプロジェクトおよびソリューションのVC++ディレクトリの Win32のライブラリ ファイルのディレクトリに該当ファイルはあるか? EEだけだとどこになるか覚えてないが、 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib あたりにありそうだけど。 その場合、$(WindowsSDKDir)\lib の指定とか。 ファイルがあるなら、ツールの設定のインポートとエクスポートのすべての設定をリセットでどうか。
375 :
373 :2009/08/25(火) 10:54:41
ありがとうございます。 環境はWindows XP SP2です。 C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\Kernel32.Lib というファイルは見つかりました。 おそらく環境変数がどうかしているのだろうとは思うのですが、 ツールの設定のインポートとエクスポートのすべての設定をリセットでは 解決しませんでした。 もう一度、完全にアンインストール作業などを行った後 再インストールして見ようと思います、
376 :
373 :2009/08/25(火) 11:07:43
だめそうです。
プロジェクトをリビルドさせると
'cmd.exe'
でエラーが発生しました
と言われます。
これが
>>373 のコマンドプロンプトからコンパイルしたときのエラー
LINK : fatal error LNK1104: ファイル 'kernel32.lib' を開くことができません。
に対応している物と思われます。
環境変数が死んでるだけだと思うのですが何故か改善できません。
(なお、環境変数の変更を反映させるためにWindowsの再起動は行っています。)
cmd.exeとリンクエラーはあまり関係ない気が
まあ共通点はたしかに環境変数だけど。
>>374 のVC++ディレクトリのとこの実行可能ファイルとライブラリファイルの内容はどんな?
cmd.exeは実行可能ファイルの$(PATH)が関係する
378 :
デフォルトの名無しさん :2009/08/25(火) 15:28:26
zlibのリンクでエラーが出てしまうのですが原因が分かりません error LNK2019: 未解決の外部シンボル @crc32@12 が関数 "int __fastcall WritePNGChunk(struct _iobuf *,unsigned int,char const *,unsigned char const *)" (?WritePNGChunk@@YIHPAU_iobuf@@IPBDPBE@Z) で参照されました。 ライブラリのパスは通してあり、ランタイムライブラリはマルチスレッドで統一してあります。 環境は、XPSP3、VC2008EE、Win32アプリ、zlib1.2.3です。 解決するにはどうすればいいでしょうか?アドバイスお願いします。
ちょっとググったけどファミコンのエミュレータか。 libはパスの指定だけじゃなくて、libファイルそのものも直接指定する必要があるよ。
380 :
デフォルトの名無しさん :2009/08/25(火) 15:37:54
ファミコンじゃなくてNDSですね 勿論libファイルは指定してあるのですが、他に原因分かりませんか?
libpngはどうやってビルドした? そっちに問題がある気がするが
あと複数のconfigヘッダーがあるとかかな
383 :
デフォルトの名無しさん :2009/08/25(火) 15:49:13
>>381 ちょっとまだよく分かってない部分も多いんですが
これはlibpngは使ってないと思います。
PNGの処理はNDSSystem.cppってとこに書いてあるようなので
>>382 configヘッダーってなんでしょうか?
zlib.hの事ですか?
384 :
デフォルトの名無しさん :2009/08/25(火) 15:50:16
あ、zconf.hって方ですか?
そういうやつ。 そもそもスタティックリンク用のヘッダになってんじゃないの? __stdcall の関数をリンクしようとしてるが、libは__cdeclとか__fastcallとか
>>385 すみません、ちょっとよく分かってないのでググって調べてたら
一応リンクは通るようになりました。
@crc32@12のような関数の修飾子は__fastcallって事みたいなので、
__fastcallでリンクしようとしてるが、LIB側は__cdeclになってるのでエラーに
なっているようなのでzconf.hの# define ZEXPORT となっているところを
# define ZEXPORT _fastcall と書き換えてzlibをビルドしたらエラーが出なく
なったんですが、こんなやり方でいいんでしょうか?
なんか違うような・・・
たぶん、Config作る時にDLLかスタティックLIBかで切り替えるDefineがあって その時にZEXPORT を書き換えてるか差し替えてるんじゃないかと思うよ。
388 :
373 :2009/08/26(水) 00:40:52
もしくは、複数個所にzconf.hがあったりしないかね
>>388 そういやこないだのWindowsアップデートから挙動があやしいのがいくつかあったんだった
スタートメニューのVC++のとこのToolsからコマンドプロンプト開ける?エラーでないかな
ってXPは64bitだったりする? うちはVista64だけど、VC++の設定にSysWow64出てきてないけど こないだのアップデートでバッチファイルがかわって、Program Files (x86)の括弧綴じがうまくないようなんだよね・・・
392 :
デフォルトの名無しさん :2009/08/26(水) 05:17:17
visual studio C++ 2008で勉強している者です。
>>5 の訂正が
>>9 >>10 だと理解しました。
(コピペして実行していないけど…)
細かい質問なのですが、
私は
#include
main{
std::cout << "Hello World" << std::endl ;
return 0;
}
って習いました。
printf(""\n); も std::cout << "" << std::endl; も
手法が違うだけで同じという事でしょうか?
もしそうならどちらが正しい文なのでしょうか?
>>392 お前それ本当に習ったコードそのままなのか?
C++でそんなコードを教えるような奴はおでこにPentium4を貼り付けてアッカーマン関数を解かせる刑に処してやりたいんだが。
>printf("\n"); も std::cout << "" << std::endl; も
>手法が違うだけで同じという事でしょうか?
そうです。
C++言語はC言語とほぼ完全な互換があるのがウリなのですが、
C言語で提供される機能の多くは、C++の流儀にのっとった別の形で提供されています。
あなたの例では、printfがCの機能、coutがC++の機能です。
どちらも、C++としては正しい文です。
394 :
388 :2009/08/26(水) 07:02:03
>>390-391 Visual Studio 2008 コマンド プロンプト
Setting environment for using Microsoft Visual Studio 2008 x86 tools.
C:\Program Files\Microsoft Visual Studio 9.0\VC>
と出て来ました。
XPは32bitで搭載メモリ3GBです。
うーん、どうしてでしょう。。。
395 :
デフォルトの名無しさん :2009/08/26(水) 07:51:01
>>393 早いレスありがとうございます。
改めてVisual Studio c++ 2008で試してみました。
両者とも文字列は問題なく表記されたのですが、
""で囲わないで数や変数(int x;など)を表示させようとするとエラー(バグって表現すべきでしょうか?)が発生します。
printf("おまんこ\n");も
std::cout<<おまんこ<<std::endl;も大丈夫なのに
printf(0100005\n);
std::cout<<0100005<<std::end
だとprintf();だけ上手くいきません。
これはそういうもんだと割り切って次のステップに進むべきでしょうか?
VC++のbeginthreadはVB.NETのスレッドのように メインプロセス終了はワーカースレッドの終了を待ってくれますか? それともメインプロセスが終了するとワーカースレッドを ぶちぎりして終了してしまいますか?
>>395 printfで整数を表示させる方法は書式指定子でぐぐれ
それぞれの道具(printf, cout)には道具なりの使い方がある。 ちゃんと解説書を読めってことだ。
398 :
デフォルトの名無しさん :2009/08/26(水) 10:01:17
>>397 氏
解説書買いましたが、
http://www.nicovideo.jp/watch/sm5044927 がわかりやすいので先にこっちで勉強してました。
前の解説本の冒頭に書いてあったのですが、道具なりの使い方というと
包丁の使い分けみたいなものだと理解しても平気でしょうか?
と、書いて気づいたけど、なんか話が脱線してきた・・・orz
とりあえず、このスレに頼りっぱだったので
ググってみます。
ありがとうございました!!
ありがとうございました。
だいじなことなのでにどいいました。
400 :
370 :2009/08/26(水) 11:20:29
>>371 うまくいきました。
ありがとうございました。
ランタイムライブラリを
「マルチスレッドデバッグ(/MTd)」にすべき所を
「マルチスレッドデバッグDLL(/MDd)」にしてたのが原因でした。
ご指摘を受ける前にもソリューションのプロパティをうまく行く奴版と全部比較してたんですが
テキストエディターで読めるとは思わなくて一々VCで開きなおして見てたんでもうイライラしてました
結局見逃してたんですね
エディタで見てやっと発見できました
>>392 すごい釣りだ。^^;
printfは組み込み型にしか使えない。
coutはユーザー定義型(クラスとか構造体とかうにおんとか…)にも使える。
402 :
386 :2009/08/26(水) 11:42:08
実は、このソース公式から落としたtarballを解凍した奴だったんですが、
なんか色々足りないファイルとかもあったので、もしかしてと思ってsvnから
直接引っ張ってきたら、予想通り必要なファイルが全て揃っていて、何の
問題もなく一発でビルドできました。
あの苦労は何だったんだって感じですが、呼び出し規約とか今までおざなり
にしてたことが少し分かったので勉強になって良かったです。
因みにこのサイトが凄く分かりやすかったです。
ttp://ray.sakura.ne.jp/asm/9.html これで、やっと目的の開発に取りかかれそうです。
レスくれた方々ありがとうございました。
403 :
デフォルトの名無しさん :2009/08/27(木) 05:05:52
>>392 です
ふと気づいたのですが、
return 0;ってなんの役にたつんですか?
# include<iostream>
using namespace std;
int main()
{
cout<<"問題。カッパの好きな食べ物は?"<<endl;
cout<<"半角で選択肢を入力"<<endl;
cout<<"1.トマト"<<endl;
cout<<"2.きゅうり"<<endl;
cout<<"3.りんご"<<endl;
int k;
cin>>a;
switch(k)
{
case 1: cout<<"トマトじゃないよ"<<end;break;
case 2: cout<<"正解!カッパはキュウリが好き。"<<endl;break;
case 3: cout<<"果物じゃないです。"<<endl;break;
default: cout<<"半角数字で答えてください"<<endl;
}
// return 0;
}
あってもなくても正常に動くのですが・・・
>>403 どんな本買ったのか判らんが、キチンと一度読み通せ
406 :
デフォルトの名無しさん :2009/08/27(木) 17:15:10
ある現行ソフトウェア(A)が存在するとします。 そして今私はこのAというソフトウェアのソースコードのプログラム言語などに依存せず、 まったく関係のない独立したソフトウェア(B)というものを開発しようとしているとします。 ここでAとBを連携させたいと考えた場合、COMプログラミングなどというものがあります。 そこで質問です。 もし、Bのソフトのあるボタンを押したときAが起動するように設定するだけでもCOMプログラミングは 必要なのでしょうか?もしくは絶対パスなどをいれたソフトを起動させるようなWin32APIはありますか? ご存知のかたがいらっしゃれば回答よろしくお願いします
>Bのソフトのあるボタンを押したときAが起動するよう ::CreateProcess
409 :
388 :2009/08/27(木) 23:08:06
環境変数LIBに追加する部分 @set LIB= に C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib; を追加したらコマンドプロンプトからコンパイル&リンクは出来るようになりました。 ありがとうございました。 しかし、未だ プロジェクトをリビルドさせると 1>プロジェクト : error PRJ0003 : 'cmd.exe' の起動中にエラーが発生しました。 1>ビルドログは "file://c:\*************\Visual Studio 2008\Projects\sample program\Debug\BuildLog.htm" に保存されました。 というエラーメッセージが消えず、リビルドできません。 ここはどの環境変数をどう修正するのが正解なのでしょうか。 どうかお知恵をお貸しください。 よろしくお願い申し上げます。
410 :
デフォルトの名無しさん :2009/08/27(木) 23:26:57
ビルドログうp
411 :
388 :2009/08/27(木) 23:38:01
412 :
デフォルトの名無しさん :2009/08/27(木) 23:38:57
#include <iostream> using namespace std; int main() { class map { public: int data[3][4]; int DataAt(int x, int y) { return data[x][y]; }// or return data[y][x]; }; map F1; F1.data[3][4]={ {2,12,0,4}, {0,5,4,13}, {0,3,11,9}, }; cout <<F1.DataAt(2,3); return 0; } すいません、最後に教えて下さい mapクラスのF1のメンバが配列で、それを関数で呼びたいだけなんです C++なのにクラスが使えないとかなきそうです
>>411 環境変数PATHに
%SystemRoot%\system32
が入ってないとか
>>413 ありがとうございます。
%SystemRoot%\system32を環境変数に追加してそれで試してみます。
>map F1; >F1.data[3][4]={ {2,12,0,4}, {0,5,4,13}, {0,3,11,9}, }; ・・・こんな代入の仕方があるか。初期化じゃないんだぞ。
416 :
デフォルトの名無しさん :2009/08/28(金) 02:47:20
デスクトップ画面上にアイコンや文字だけを出すにはどういう風なプログラムにすればいいのでしょうか? つまり、ウィンドウすらなく、字や絵だけをデスクトップの特定の位置などに表示させたいのです
>ウィンドウすらなく 無理。Windowsはウィンドウの集まりだから、ウィンドウズ。 背景透過のウィンドウを作成して、そこに描画すべし。
418 :
デフォルトの名無しさん :2009/08/28(金) 04:41:47
>>417 背景透明にしてみた
TextOut関数ってどうやってテキスト更新するの?
呼び出してもテキストの表示位置をかえたりできない…
個人的にニコキャスト(ってわかるかな?)をさらに改良した
ニコニコ動画みたいな文字がデスクトップに表示されるツール開発したいんだ
419 :
デフォルトの名無しさん :2009/08/28(金) 05:13:17
つねにウィンドウ上のテキストを再描画したいときって CALLBACK関数のWndProc内で最初にInvalidateRect関数呼び出すってことで正しい?
420 :
デフォルトの名無しさん :2009/08/28(金) 05:33:21
>>415 すいません・・でもやり方がわからないんです
クラスのメンバを配列にしてそこに代入したい場合、
あらかじめ配列を作っておき、fornextなどを使って数字を代入していくしかないのでしょうか?
array[3][4]={ ・・・ }
F1.data[i][k]
421 :
388 :2009/08/28(金) 07:04:35
>>413 出来ました!!
環境変数PATHに
%SystemRoot%\system32
を追加するのが正解でした。
どうもありがとうございました。
>>420 map F1;
int data[3][4] = { {2,12,0,4}, {0,5,4,13}, {0,3,11,9}, }; // これは代入ではなく初期化
for ( int i = 0; i < 3; i++) for ( int j = 0; j < 4; j++) F1.data[i][j] = data[i][j];
424 :
デフォルトの名無しさん :2009/08/28(金) 12:26:06
VisualC++6.0で、満足にプログラム組んでるんだけど、VisualC++2008にするといいことあるかなあ? そっちのほうが便利なら、買おうと思うんだけど。
>>424 インテリセンスが賢くなってるよ。
それ以外の部分も色々進化してるんだけど、VC6で満足してるならまぁ好きにすればいいと思う。
ただBoostとかテンプレートを本気で使いだすとVC6はそびえ立つクソ状態になるけど。
VS2008無料版でも十分便利 タダなんだし使ってみては?
427 :
デフォルトの名無しさん :2009/08/28(金) 14:26:16
visual C++でたとえば関数の戻り値を調べたいときがあります そういうときにいちいちitoa使ったあとにMessageBoxなどで確かめるのが面倒です 出力画面などに簡単にシステムコールで出力する方法ありませんか? 皆さんはどうやって戻り値や変数の中身をチェックしていますか?
>>427 ::OutputDebugString() でデバッグ出力する
>>421 そもそもそれが入ってないのがおかしい
インストーラ関係なしに手動で何かやらないと消えないと思うが
特定のファイル操作などに用いる構造体の中身のメンバがすべてintで予め定義されていたとします。 この構造体のメンバにdoubleでどうしても代入しなければいけないときはどうすればいいのでしょうか? キャストしてもうまくいきません。
入らない。
>>416 >ウィンドウすらなく、字や絵だけをデスクトップの特定の位置などに表示させたいのです
GetDesktopWindow関数でデスクトップのハンドルを取得してデスクトップに直接表示することができる
(デスクトップもウィンドウ)
>>418 TextOut関数には表示位置を指定するパラメータがあるじゃん
表示位置を変えたいなら元の位置の文字列を消して新しい位置に文字列を表示するとか
いろいろ方法あるでしょ
「ぴたすちお」のようなプログラムって便利だと思うのですが この手のソフトは、それほど数が多くないです。 やはり個人で自作して公開されない物が多いんでしょうか? 無ければ、制作を考えているのですが、 C++で作るには、かなりのスキルが必要ですか?
>C++で作るには、かなりのスキルが必要ですか? C++のではなく、Windowsプログラミングについて相応のスキルは必要。 API、フック、サブクラス等々。
>>433 どのくらい現在知識はあるのだい?
他言語の経験者?
>>424 つーかC++に準拠して書いたテンプレートを含むコードが
VC6に蹴られるとぶち殺したくなる。
VC6はC++に似た別言語だと思いませう。
>>435 いえ、言語についての知識はないです。
ネットでC言語の入門サイトを見ながら勉強し始めた所です。
>>438 やっぱそうですか。
趣味なので時間制限はありませんが。
とりあえずやればいいじゃん
今はまだ無理ですね。 イメージだけですが遠い道だと分かっただけでも収穫です。 ありがとうございました。
>>436 今となっては懐かしい。
複雑なテンプレートだとコンパイルどころかVS自体が落ちてたからなあ。
Visual C++で、左下のCtrlとかAltとかの当たりを適当に押したら、 コード中のTab部分に「→」、スペースに「・」と表示されるようになりました。 オプションあたり見ても直し方がわからず非常にうっとうしいので、どなたか直し方教えてください。
編集→詳細→スペースの表示
>>441 ものすごく遠い道だ。
数学系が得意で、後は根気が数年以上続く性格ならいけるよ。
個人的にはC++は質問しやすいからお薦め。
言語仕様的にはC++は落とし穴が多いから薦めづらいが。
いやいや、それほど遠くはない。 いくらなんでも、冥王星が太陽を一周してくる間にはマスターできるだろ。
447 :
445 :2009/08/29(土) 12:16:12
プロジェクトに高々100位のファイルが含まれたフォルダをドラッグして渡すと、 Visual Studioが2〜3分応答しなくなるんですが、どうしたもんですか?
>448 プロジェクトファイル手で書き替えてもいいし、 自作スクリプトや自作プログラムでやってもいいし、 面倒くさかったら終わるまで待ってればいい。
>>444 助かりました
まさか二つのコマンドを入れてしまっていたとは
間違えたとしたらメニューじゃなくてショートカットだろ
[プロジェクト]→[プロパティ]の[C/C++]→[全般]の追加のインクルードディレクトリにフルパスでディレクトリを指定したいんですが、 include ファイルを開けません。というコンパイルエラーが出てしまいます。 該当行のインクルードファイル名を右クリックして、ドキュメントを開こうとすると、ソースファイルのディレクトリにも、システムパスにも見つかりません というメッセージとともにインクルードパスの一覧が出ますが、そこにも設定したパスが表示されていません。 追加のインクルードディレクトリで設定したパスを使いたい場合には何か別にする必要があるんでしょうか。
ぱっと思いつくのはWin32/x64での設定が別であることに気づいていないということ あとはパスの綴りをミスってるぐらいしか思いつかん。
ぱっと思いつくのは、デバッグ用の構成プロパティで設定してリリースモードでビルドしている。あるいはその逆。
456 :
デフォルトの名無しさん :2009/09/01(火) 17:54:17
クラスの練習を兼ねて、こんなプログラムを打ちました。 エラーは出ないようになりましたが、 数値がおかしい・・・正の値しか出ないようにしたはずなのに・・・ 何が間違っているのでしょうか? #include<iostream> using namespace std; class Osake{ int nakami;//飲むお酒の量 int yoi;//どれだけ酔っ払ったかの度合い public:Osake(int z){nakami = z;} void nomu(){ cout<<"nakami"<<endl; while(nakami>0){ nakami -=2; yoi +=3; } cout<<"お酒が無くなりました。"<<endl; cout<<"現在レベル"<<yoi<<"くらい酔っています。"<<endl;} void nomido(){ if(yoi==15){cout<<"ほろ酔いです"<<endl;} else if(yoi<15){cout<<"飲み足りません"<<endl;} else if(yoi>15){cout<<"飲みすぎです"<<endl;} else{cout<<"エラーが発生しました。"<<endl;} }};
457 :
デフォルトの名無しさん :2009/09/01(火) 17:55:26
int main(){ cout<<"お酒を飲みます。酔いすぎに注意しましょう。"<<endl; cout<<"どれくらいのお酒を用意しますか?"<<endl; int a; cin>>a; Osake liqueur(a); liqueur.nomu(); liqueur.nomido(); cout<<"晩酌を終了します"<<endl;}
yoiはどこで初期化してんだ?
>>456 「nakamiが0より大きい間、ループする」と書いたのだから、停止条件は
「nakamiが0より小さくなったのでループを脱出する」なのは当然。
>何が間違っているのでしょうか? int yoi が初期化されていないので、 you+=3 は未知数。 Osake のコンストラクタで初期化すべし。
・・・かぶった。
462 :
デフォルトの名無しさん :2009/09/01(火) 18:30:43
やはり変数yoiとwhile文でしたか・・・ もうちょいいじってみます。 てか皆さんすごいっすね・・・ なんでそんなに早くバグがわかるんですか?
>>462 慣れでしょ
本をたくさん読めば文章をすらすら読めるようになるようなもの
これも練習の内だと思って、今度からは自力でバグ取りするようにしたほうがいいと思う
464 :
デフォルトの名無しさん :2009/09/01(火) 18:57:28
>>463 ですよね。・・;
でも一応ドン詰まりになるまで粘ってから
質問してるつもりではいるのです…
せめてプログラマーの端くれレベルになりたいorz
判ってないと思った時点で本読みなおしてみ
VisualC++2008Proでの質問です MFCのツールボックスからエディットコントロールを選択しました そしてそれを配置して右クリックをしたのですが、「変数の追加」というものが半透明になって選択できません そのため、ここに代入された文字の取得なのができなくなっています なぜ半透明になるのでしょうか? 変数の追加を有効にする方法を教えてください
467 :
デフォルトの名無しさん :2009/09/01(火) 20:11:40
>>456 です。
遅くなりましたが報告です。
void nomu(){
cout<<"nakami"<<endl;
yoi=0;//今はシラフだと宣言
while(nakami>0){
nakami -=2;
yoi +=3;
}
したら、イイ感じになりました。
感謝です。
今までint main(){}の中に色々詰め込む形でソース組んでいたので、
classの便利さにちょいちょい気づいてきました^^;
private、public、voidの詳しい意味とか理解していませんが、
『解説をじっくり読むより、さっと読んで、サンプルをコンパイル・実行してみてください。』
と
http://www.asahi-net.or.jp/~yf8k-kbys/ に書いてあったのと、
前回勉強した時、難しく考えすぎてドツボにハマったので
とりあえず次に進みます。
>>466 VCダイアログフォームの変数とクラスの追加はダイアログクラスに対してやるものだと思ったが
そのフォームリソースのダイアログクラス作ってある?
469 :
デフォルトの名無しさん :2009/09/01(火) 21:50:39
471 :
デフォルトの名無しさん :2009/09/01(火) 22:01:28
>>467 そうするのもマチガイではない。
が、class のメンバ変数なら、コンストラクタで初期化するクセをつけとくべき。
public:
Osake( int z)
{
nakami = z;
yoi = 0; // ここで初期化
}
好きなだけC++刷れでやってくれ
Visual C++スレは、言語のスレとは別物だからね
ダブルバッファリングについて質問します。 変数の宣言やhMemDC = CreateCompatibleDC(hDC);などの部分は行数の関係で省略します。 今、下のようなソースがあるとします。今hMemDCのメモリデバイスコンテキスト内で描画を段階的に行い、 そこの描画が完成すると、hDCに転送して画面に描画するということをやりたいと思っています。 ところが、このソースでは画面に何も表示されてません。@の部分を仮にhDCではなくhMemDCとしたところ 問題なく画面が表示されるため、転送部分やなんらかのメモリデバイスハンドルの扱い方の部分で間違いがある気がします。 どなたか解決方法がわかるかたがいらっしゃれば教えてください。もしくはこのソースがわかりにくい場合は、 何かソースを提示して、ダブルバッファリングの解説などしていただけませんか。よろしくお願いいたします。 case WM_PAINT: hDC = BeginPaint(hWnd, &ps); //@ hBrush = CreateSolidBrush(RGB(255, 255, 0)); InvalidateRect(hWnd, NULL, TRUE); SelectObject(hMemDC, hBrush); ExtFloodFill(hMemDC, 1, 1, RGB(255, 255, 255), FLOODFILLSURFACE); SetBkMode(hMemDC, TRANSPARENT); GetTextMetrics(hMemDC, &tm); GetClientRect(hWnd, &rt); DrawText(hMemDC, EndBuf, -1, &rt, DT_CENTER); BitBlt(hDC, 0, 0, 640, 480, hMemDC, 0, 0, SRCCOPY); DeleteObject(hBrush); break;
hMemDC = CreateCompatibleDC(hDC); hBitmap = ::CreateCompatibleBitmap( hDC, , ,); SelectObject( hMemDC, hBitmap); ・ ・ ・ EndPaint( hWnd, &ps); break;
BeginPaint と EndPaint の間にbreak入ってる意味わからん
479 :
デフォルトの名無しさん :2009/09/02(水) 22:31:42
条件付きブレークポイント貼る時に条件にenumとか使う方法ないですか? たとえば i > MY_ENUM_VALUE みたいなの。MY_ENUM_VALUEはヘッダファイルで定義されてる。
480 :
デフォルトの名無しさん :2009/09/03(木) 02:59:27
Visual C++ってどの製品使えばいいんだ?
まずは無料のExpressではじめて、不満を感じたらStandardやProfessionalを買えばいい。 DreamSpark対象者ならそん中のVS 2008 Proを使うのもありだな。 自分が上位エディションで魅力を感じる機能はここらへん。 Standard以上: ATL/MFC、リソースエディタ、x64、1ソリューション内での複数言語プロジェクトの混在、マクロ対応など Professional以上: モバイル対応など Team Suite以上: プロファイラ、あと知らん
482 :
デフォルトの名無しさん :2009/09/03(木) 05:45:10
すみません あるサイトのサンプルコードを動かすとエラーも警告も出ないのですが 一瞬ウィンドウが開いて、即閉じてしまい内容を確認できません。 コンソールアプリケーションでは無い方(Win32アプリケーション)なのですが WinMain()ではなく_tWinMain()となっている事が気になるのですが 何かが関係しているのでしょうか? メッセージループやWindowProc()に何か追記すれば 勝手に閉じずにストップできたりしますでしょうか?
普通は閉じるメッセージがくるまではずっとループさせるような メッセージループになってるはずだから 元からそう作ってあればわざわざ閉じないような追記は必要ないだろ
484 :
482 :2009/09/03(木) 08:18:47
>>483 いえ、そのサンプルコードと一緒に、
出力結果が表示される様の画像が添付されているので(コンソールではない画面で)
そのサンプルの内容を画面で確認できる・・するべきなんだと思うのですが・・
メッセージループに入る前に処理を全部終わらせる形なので
無理やりにでも止める方法があれば、よろしければ情報を教えて頂けると助かります;
本当に止める必要が無いのかもしれないのですが、できれば結果を確認したいので;
Sleep(5000);
486 :
デフォルトの名無しさん :2009/09/03(木) 10:04:17
ブレークポイントでぐぐれ
487 :
482 :2009/09/03(木) 10:34:13
>>485-486 ありがとうございます。
どうやら正規の失敗処理が呼ばれて閉じている事が解って解決できました。
488 :
デフォルトの名無しさん :2009/09/03(木) 20:59:25
490 :
デフォルトの名無しさん :2009/09/03(木) 22:01:45
>>489 さん
あっ!そう言うことなんですね。
ありがとうございました。
VC++.NEt2003での質問です。 クラス作成する時、クラスビューの右クリックからクラス追加すると自動的に hファイルとcppファイルが生成され、コンストラクタとデストラクタは初めから用意されています。 そしてクラスビューの右クリックからメンバ関数を追加すると、宣言がhに自動的に作成され、 内容を書く枠組みが自動的にcppに作成されます。 しかし、手動でソリューションエクスプローラの右クリックでhファイル、cppファイルを個別に追加した時、 同じ名前にしているのですが、それが対応しているものとVSが認識してくれません。 もちろんcppはhをインクルードもしています。 またそうやって作ったクラスに右クリックでメンバ関数追加するとhファイルの中に関数の内容記述する{}までが 作成されてしまい、cppファイルが無視されます。 この対応付けは一体何処に設定されており、どうやって設定すればよいのでしょうか?
VisualC++2008を使っています。 コントロールパネルにあるシステムのプロパティの CPU 情報を取得する方法はありませんでしょうか。 PentiumIII以前の物だとレジストリのにProcessorNameStringがありませんし、 拡張CPUIDのプロセッサ・ブランド・ストリングもありません。 なのでシステムのプロパティの物が取得出来たら手っ取り早いかと思いまして。
493 :
デフォルトの名無しさん :2009/09/04(金) 15:28:57
WindowsのAPIに用意されてたはず。 Win32のGetSystemInfo当たりで取得できるんじゃね?
システムのプロパティはレジストリ見てる
>>493 GetSystemInfoは旧世代の遺物。386 or 486 or Pentium くらいしか判断できん。
Debug/Releaseモードの他に構成を増やしたい場合って、どうすれば構成を追加できますかね。
>>496 [ビルド]メニュー - [構成マネージャ] - <新規作成...>
できました。ありがとうございます。 でもこれって、空かRelease or Debugのコピーでしか作れないんでしょうか。 ソリューション内に、8つのプロジェクトがあるんですが、新しく作った構成の雛形みたいなのを編集したいです。
既存の構成から作れるけど
個々のプロジェクトではすぐに既存の構成のコピーから作成できたのですが、 ソリューションの構成を新規作成した際に、全てのプロジェクトに一律に設定される構成を たとえばProjectAのDebug構成と同じにするといった方法がちょっとわからないです。
501 :
デフォルトの名無しさん :2009/09/04(金) 20:09:41
ActiveX の Web browserコントロールで、現在の表示しているページのURLを取得したり 前のページに戻ったりの関数を知りたいのですが、ドキュメントとかはあるのですか? ちょっとどこを調べればいいかわかりません。教えてください。
MSDN
503 :
デフォルトの名無しさん :2009/09/04(金) 20:47:20
MSDNにあるんですね(><;) ActiveXコントロールは内科と思っていました(><;) どうもありがとうございました(^人^)
VC10 beta1のインクルードディレクトリ指定ですが、 個々のプロジェクト別でなくて、以前のような全体で共通の設定をしたいのですが、 どこに行ったのでしょうか?
>>500 ソリューションもプロジェクトも中身はどうせxmlなんだから雛形くらい自分で編集したら?
すごい初心者じみた質問で悪いのですが、
VisualC++2008をインストールして、実際に
>>5 をやってみたら、LINK2005と1169のエラー
がでてしまったのですが、改善するには
どうすればいいんでしょうか?
エラー内容は
LNK2005: _main は既に ***.obj で定義されています。
LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
です。
>>9 でやっても
error C2449: '{' を見つけました (関数のヘッダーがないかもしれません)。
error C2059: 構文エラー : '}'
とでたんですが。
構成プロパティ見ると .NET Framworkがなんとかかんとかruntimeがどうたらこうたらってでて選択できないんだけど リンカの設定するにはどうすりゃいいの>
最初から状況をきちんと書いて、なんとかかんとかもちゃんと全部書けば 何をしようとしてどこが間違ってるのか指摘できるんだが。
VisualStudioのシリアルナンバーや個人情報、それがProかExpressでつくられたかなどの 情報はプログラム本体にコンパイルしたときに保存されるんですか? ツール作って公開したいんですが、それから身元割れしたくないんですが もちろんウイルス作ったわけじゃないですが
ワレザー乙
514 :
512 :2009/09/06(日) 20:54:54
へえ…今の時代はExpressまで割る人がいるのかぁ 無料で配布されているのに(笑)
>>514 ._,,,,,,。,,、 广'x、 ,,、._ 」'゙''i、
,,,,,_.,,,,、广゚┐ .,,,v―冖"~゛ ゙'i、 .ト ,|,_ riゃ .} .,i´ '冖i、
.] ` f゙,l° ,i´ .゙l_ .y-┐ 'や'゙"゙’ _,,,vr" .゙ト.゙'x,,,,广 ィ・'''゙~ .._,,v・゚ヒ''''・x、
入、rУ ,iレ-v,,,、 .,r°."'''l゙ ,|√゙゚'i、 匸 ._ .y・'゙゚,,,v―-, .:゚ーa .√ ._,rll_ :}
.,r''y|゛゙゙l..,i´ ,i"゙l, .゙ト ,r°,,, .., ._,,vぐ .`√ .,i´l广._,,,,,,,,i´ ,,i´ ,i´ ,「 .:| .~''''″
.r″ .|゙l、 “ .,i″.yi入-イ il∠i、.` .,メ| | 」'ト .,,i´ .,i´ ,, ̄ .[ .,i´.,,,,,,! .]_
.゙l_,i´,レ .'?_,,,,レ ~''┐ .,r°.,i´.| .| ,l゙ :゙l、 ,,i´ ,i´ l゜.゚L__ .:―ヤ゚″_ :~''=、
.,r″.,x=,, .,i´ ,x'".,,x'″ .゙l、 ゙冖''″ .] | .,i´ .゙l, .~1 .゚L '゙〃 ,n, .,,}
.,l彡'''″ .゙~"''''''''''"゜ .テ''~゛ .:゚'―---―・° ―″ .~''¬―'″ .:゚=_,r
JPEGを直接壁紙に設定するにはどうすればいいですか? XPでVC++2008EEを使っています。
>>514 「へえ…」
「かぁ」
「(笑)」
この辺、ぼろが出てますよダンナwww
>>512 初期設定だとリリースビルドでもデバッグ情報の埋め込みが有効になっている。
この状態だと、EXEファイルにPDBファイルへのフルパスが書き込まれる。
例えば、マイドキュメントの中にプロジェクトがあったとすると、
C:\Users\ユーザ名\Documents\プロジェクト名\Release\Hoge.pdbって具合になるので、ユーザ名がバレてしまう。
対策としては、出力フォルダの場所を無害なところにするか、デバッグ情報を埋め込まない設定にすること。
DLLの作成の勉強をしているのですが、クラスをエクスポートするDLLを作る場合、 メンバ変数やメンバ関数をヘッダに追加するたびに、 そのクラスを使っているアプリもすべてリビルドしないといけないものなのですか? DLLのありがたみが感じられない上に、うっかりリビルドし忘れて 「アプリが正しく動かない」状態が簡単に発生しそうなのですが。
>>519 メンバ変数やメンバ関数を削除したなら、それを使っているアプリのリビルドは当然必要だが、追加なら必要はない。
DLLを更新するたびにアプリのリビルドが必要だとすれば、Microsoft Update をするだびに
使っているアプリのバージョンアップが必要になる。
>>519-520 メンバ変数の増減は、リビルド必要。
仮想的でないメンバ関数の追加はリビルドしなくても動く(が、リビルドするほうが安心)。
だから、pimplとかCOMとかのような
クラス実装が変化してもアプリ側に影響を及ぼさない技術がもてはやされるわけ。
>>505 逆に言えば、その方法しかないということなんでしょうか。
方法はあるかもしれないが、ここはサポートセンターじゃないからな。 普通のユーザーは自分が必要な機能だけ使ってるわけで、 すべての機能を知りつくしてる必要はないだろ。 サポートが必要なら公式のサポートまたはマイクロソフトの関係者がいる場所で聞けばいい。
Visual Studio 2005(C++)で作ったソフトを他PCに配布するために、
DependencyWalkerでどのDLLを使うかを調べています。
ttp://kissho1.xii.jp/7/src/7jyou25711.png それで、このように表示されたのですが、
これら6つのDLLがあれば良いということになるのでしょうか?
それぞれの項目を展開すると、さらにたくさんのDLLが表示されますが、
それらは上位のDLLに含まれている、と解釈してよいのでしょうか?
もし、上記6つだけでよいのであれば、配布先ユーザーには
何を用意してもらえばよいでしょうか?
MSDNを見ると、
KERNEL32.DLL
USER32.DLL
OLE32.DLL
はOSに元から入ってるそうなので、問題ないと思いますが、
その他のDLLは「Visual C++ 2005 再頒布可能パッケージ」を
インストールしてもらえば揃うのでしょうか?
よろしくお願いします。
自分でテスト環境すら用意できないのに配布するつもりなの? 人柱も迷惑だよな
>>525 だから、配布する前に確認してるんだろ
初心者スレなんだから問題ないと思うが
>>524 リンク先が見れん
悪意のあるサイト
528 :
524 :2009/09/07(月) 21:45:47
すみません、リンク先の画像はDependencyWalkerの左上ペインを切り出したもので、 以下のように6つのDLLがリストされています。 ・KERNEL32.DLL ・USER32.DLL ・GDI32.DLL ・SHELL32.DLL ・OLE32.DLL ・OLEAUT32.DLL よろしくお願いします。
市販ソフトじゃなきゃ、問題が出てからアップデートでいいんじゃね。
>>524 その6つはすべてOSの一部。
すなわち、そのプログラムはほかに何もインストールしていなくても動く。
強いて言えば、下3つはIEのバージョンアップで新しいバージョンが入ることがあったことくらい。
ただ、それはIE4-5辺りのこと。今はもうない。
531 :
524 :2009/09/07(月) 22:01:47
>>530 DirectShowプログラムなので、少し心配でしたが、やはりDirectXSDKからWindowsSDKに移っただけに、
OSの標準のライブラリとしてはじめから入るようになったんですね。
教えてくださって、ありがとうございました!
>>529 うまくいかなかった場合はそれで対応したいと思います。
ありがとうございました。
よく探したら専用スレがあった
534 :
デフォルトの名無しさん :2009/09/07(月) 23:53:42
ある関数内で宣言、定義、代入した配列を他の関数内で使いたいときはどうするのがよいでしょうか グローバル変数にしてしまうのが良いですか?
>>534 C/C++スレで訊けば?
ちなみに、グローバル変数なんてプログラムにひとつあれば十分。
>>535 ありがとうございます、行って来ます
やっぱりグローバル変数は使わないほうがいいんですよね・・
必要なら使っていいんだよ、用は使い方の問題だけ。 不用意に多いのは、横目で見られる可能性があるだけ
538 :
524 :2009/09/08(火) 00:16:00
539 :
519 :2009/09/08(火) 10:34:18
>>520-521 やっぱりメンバ増やしただけで、
そのDLL内のクラスを使っている他のアプリケーションも
すべてリビルドしないといけないのですね。
それならアプリケーションのプロジェクトに
クラスをソースごと取り込んでおいて
EXEに埋め込んでしまったほうが安全ですよね。
>>539 直接クラスをエクスポートしないで関数でやり取りすりゃいいじゃないか
確かに dll修正したぐらいで昔のプログラムが使えなくなったなんて話聞かない。 設計がアホなんだろ
dll使うんだったら、exeとdll間のインターフェースをちゃんと定義して、ホイホイ変えちゃだめ。 C++だったらCOMの仕組みを真似すれば拡張するのも割りと楽。
ちなみに、
>>30 のコードをそっくりコピーして試しても、ウチでは何の問題もない。
544 :
543 :2009/09/08(火) 17:57:11
ポインタを使って参照渡しというものをやってみたのですが うまくうごいてくれません。どこが間違っているのでしょうか/ 一次元の配列では上手く動きました 数値を配列aに代入し、f関数で配列aの4番目の要素を表示させるというコードです #include <stdio.h> void f(int *ary); int main(){ int a[5]= {0,1,2,3,99}; f(a); } void f(int *ary){ printf("%d",ary[4]); return ;} ですが二次元配列にするとダメです。どこが間違っているのでしょうか? #include <stdio.h> void f(int *ary); int main(){ int a[2][5]= { {0,1,2,3,99}, {5,62,6,3,99} }; f(a);} void f(int *ary){ printf("%d",ary[4]); return ;}
C++スレでやってくれ
すいませんでした
Tabは全角スペースに置き換えてからソースは張ってくれ
>>545 おそらく、2D配列は1D配列へのポインタの1D配列になるため。
例えば int a[2][5] だと a は int[5] へのポインタ2つの配列ということになる。
a[0] や &a[0][0] みたいにして渡すといいかも。
>>545 どの行の4列目を表示するのか指定すればよい。
f(a[1]);
>>549 いや、実際はポインタの配列ではないよ。1次元配列を擬似的に2次元配列とみないしているだけ。
{1,2,3,99,5,62,6,3,99}のように値で格納されている。
for (int i=0;i<10;++i)
cout << ((int*)a)[i] << endl;;
を実行してみればわかるよ。
551 :
デフォルトの名無しさん :2009/09/09(水) 18:42:19
VC++.net 2002で猫でもわかるに掲載されているサンプルコードをビルドすると リンクエラーとなるのですがなぜでしょうか? #include <afxwin.h> class CMyWindow : public CFrameWnd { public: CMyWindow(); }; CMyWindow::CMyWindow() { Create(NULL, "猫でもわかるMFC", WS_OVERLAPPEDWINDOW); } class CMyApp : public CWinApp { public: virtual BOOL InitInstance(); }; BOOL CMyApp::InitInstance() { m_pMainWnd = new CMyWindow(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } CMyApp MyApp;
>>551 リンクエラーの内容を書いてMFC相談室で訊け。
ウイザードで作ったスケルトンでやれば、そんなくだらないことでつまづくこともないのに。
ttp://www.si.hirosaki-u.ac.jp/~slame/neuro/backprop.html 上記サイトにある、backprop.cというプログラムがどうしてもVisual c++でコンパイルできません。
ファイル→新規作成→Win32を選択し、ソースファイルに上記プログラムをぶちこんでビルドしました。が、exeファイル開けず。
よく注意書きを見ると、
ttp://www.si.hirosaki-u.ac.jp/~slame/neuro/program1.htmに lうまくコンパイルできない場合このリンク先をみろと書かれ、そのリンク先に
『drand48,srand48がなくてエラーになる場合
コンパイル時drand48,srand48がなくてエラーになる場合は次の手順でソースプログラムを変更してください。
ヘッダファイル ranran48.h をダウンロードして、ソースプログラムと同じディレクトリに置く。
ソースプログラム backprop.c をテキストエディタ等で開き、ヘッダファイル読み込みの最後の行(11行目)の後に、次の1行をつけ加えて上書き保存する。
#include"ranran48.h"
もう1度コンパイルする』
とあり、言われたとおりにして実行しましたがやはりダメでした。
エラーは下記のとおりです。 1>コンパイルしています... 1>backprop.c 1>c:\c\backprop.c(58) : warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(237) : 'fopen' の宣言を確認してください。 1>c:\c\backprop.c(66) : warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(256) : 'fscanf' の宣言を確認してください。 1>c:\c\backprop.c(70) : warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(256) : 'fscanf' の宣言を確認してください。 1>c:\c\backprop.c(137) : warning C4244: '=' : 'time_t' から 'long' への変換です。データが失われる可能性があります。 1>中間 - エラー 0、警告 4 ========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ========== ご教授お願いします。
で、どこにエラーがあるんだ? warnnig しか見当たらないが。
>>556 「1 正常終了」
とりあえず、EXEは出来上がっている。
はい、exeはできてるんですが、開けないんです。開くと英語のメッセがでて、中止とか無視って選択があり、 中止にして何かキーを押すと閉じ、無視すると「動作は停止しました」ってなります。
問題ないそれでOKだ。
どういうことですか?これだとシミュレーションできないんですけど。
問題ない。シュミレーションできる。
すみませんがやり方を教えていただけませんでしょうか? また、シミュレーションには、exeファイルのコマンドプロンプトからデータファイルを読み込む必要があるのだと思うのですが 肝心のコマンドプロンプトが開けないんですよ。
メニュー→プロジェクト→〜のプロパティ→構成のプロパティ→デバッグ→コマンド引数にファイル名を入れる。 ファイルはプロジェクトファイルと同じフォルダに置くこと。
VisualC++2008 ExpressEditionってどうしてこんなに重いんでしょうか ソースを保存すると1秒ぐらい砂時計になるし、 デバッグモードで実行すると終了する時に5秒ぐらいフリーズするし、 開発環境を閉じる時も10秒ぐらいかかる。
>>564 言われたとおりにしましたがダメでした。まず、BPというファイルネームです。
で、自分はローカルデスクCドライブに、C言語用にCというフォルダを作り、そこにソースプログラム等を入れるようにしてました。
あなたのおっしゃる通りの作業をしましたが開けません。
Visual c++のprojectsにBPという出来上がったexeファイルを入れて再度試行しましたが、できませんでした。何度もすみません。
>>566 そのソースを書いた人間にきけ。ここで聞く話じゃない。
コマンドプロンプトから実行せいや あとはしらん
visual studioを購入しようと思うのですがアカデミック版で問題ありませんか? 何か制限などあるのでしょうか?
>何か制限などあるのでしょうか? パンピーは買えない。
EEが無料だからまずはそれにしておきなさい
>>571 EE使ってるんですけどwindowsmobile向けのプログラミングもしたいので。
新しく欲しいんですが
普通の奴は10マンとか馬鹿みたいな値段してますけどアカデミックは普通に買えるので。
DreamSpark があるのにね
>>565 残念ながらPC買い換えの時期が近いのではないだろうか。
いや、それともよい機会かもしれないぞ。
XPでVC++2010Betaを動かしたら、CPUはC2Dで3GHzなのに糞重いんだけど、 一般的にこれはVistaか7にすればまともになるものなんですか?
今のところ、公開されているβはどれで動かしても重い。 なので、microsoftの中の人が 「どんどん最適化してるし、マルチスレッド化も進んでるよ、だから安心して」 ってブログで書いてた。 製品版は3倍くらいの速度になるとかしたいとか言ってた筈。
数値計算をして、その結果を視覚的に表示できるようなアプリケーションを作りたいのですが、 これからどんなことを勉強していけばいいのでしょうか?
うちのVS2008はSP1入れてから重くなった SP1って何の効果があるの
デフォルトで開発環境が重くなるように設定されとるからなあ。 オプション-環境-スタートアップでコンテンツのロードのチェックをはずす 同じく、自動バックアップを1時間ごとくらいに設定、にしてみてはどうか。
581 :
577 :2009/09/10(木) 23:07:01
>>580 ありがとうございます。OpenGLってはじめて聞いたので、少し自分で調べてみます。
>>578 Feature Packのライブラリが使えるようになる。
正規表現とか参照カウントのスマートポインタとか。
>参照カウントのスマートポインタ そんなのはいってたの?しらんかった^^;;
>>577 EXCELのvba
あのexcelという奴は本当に便利だわ
ふつーOpenOfficeCalc。
gnuplotでおk
>>583 std::tr1::shared_ptr
Boostのと同じ。
プログラム内で使われる画像や音声などのファイルを.exe内に収めたいのですがどうやればいいんですか?
590 :
588 :2009/09/11(金) 22:31:35
>>589 よくフォルダ内に入ってる.rcってやつですか?
それでもいいんでお願いします
リソースにすればいいってことがわかっても、自分で調べる木がねーってか
寧ろzipの自己展開で医院で内科医?
入れるのは簡単だけど、exe中に入ってるやつ使う方法知らないと使えないよ
594 :
588 :2009/09/11(金) 22:39:26
>>591 検索してもなかなか初心者向けのがヒットしない
入れるのはプロジェクトに追加してビルドするだけ
いやいやw VC++でリソースビュー開いて、プロジェクト名で右クリック→カスタムで 簡単にexeに組み込まれるリソースのできあがりじゃろw
> 590 名前:588[sage] 投稿日:2009/09/11(金) 22:31:35
> 594 名前:588[sage] 投稿日:2009/09/11(金) 22:39:26
たかが数分で「なかなかヒットしない」などとほざくな。
>>4 のいちばん上にも使用例は書いてある。
いや数日前から調べてた
>>596 resouce.hとかは関係無い?
勝手に読み込み先が変わってくれるってこと?
>>598 読込先?何の話だ?
おまえが何語を話しているのか理解できなくなってきた。
>>598 関係ある。
596の手順を行うと、VCが自動でresource.hを編集していく。
必要に応じてincludeする。
601 :
デフォルトの名無しさん :2009/09/12(土) 08:31:13
VC++でF5+Ctrlでは問題なく実行できるのにDebugフォルダにできた実行ファイルをダブルクリックすると落ちてしまいます なぜでしょうか?
602 :
601 :2009/09/12(土) 08:38:09
ごめんなさい 自己解決しました
テキストボックスの行数制限って可能でしょうか? 全角16文字*16行の256文字まで入力可能なテキストボックスを作りたいのですが 最大文字数を256に設定することはできたのですが最大行数を16に設定する方法がわかりません。 どなたかご教授お願いします。
標準でそういう設定はないから、サブクラス化して自前で処理するしかない。
605 :
603 :2009/09/12(土) 12:48:57
>>604 ありがとうございました。
頑張ってみます…
http://homepage3.nifty.com/ishidate/vcpp08_1/vcpp08_1.htm このページを参考に姓名を入力させ、表示するプログラムを作りました。
まんま写したつもりなんですけどビルドエラーが発生します。
どこか間違ってるのでしょうか?
自分では分からないので指摘お願いします。
以下ソースコード
#include "stdafx.h"
using namespace System;
int main()
{
String ^string1,^string2;
Console:Title="初めてのプログラム";
Console::Write("姓を入力してください:");
string1=Console:ReadLine();
Console::Write("名を入力してください:");
string2=Console:ReadLine();
Console::WriteLine("姓名は:" + string1 + " " + string2);
return 0;
}
>・エラーや警告のときはエラーメッセージを書きましょう。
608 :
606 :2009/09/12(土) 16:03:38
ビルドログ見つけました
コンパイルしています...
C800.cpp
.\C800.cpp(14) : error C2275: 'System::Console' : この型は演算子として使用できません
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::Console' の宣言を確認してください。
.\C800.cpp(14) : error C2143: 構文エラー : ';' が ':' の前にありません。
.\C800.cpp(14) : error C2143: 構文エラー : ';' が ':' の前にありません。
.\C800.cpp(16) : error C2275: 'System::Console' : この型は演算子として使用できません
c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll : 'System::Console' の宣言を確認してください。
.\C800.cpp(16) : error C2143: 構文エラー : ';' が ':' の前にありません。
.\C800.cpp(16) : error C2143: 構文エラー : ';' が ':' の前にありません。
ビルドログは "file://c:\Users\Owner\Documents\Visual Studio 2008\Projects\C800\Debug\BuildLog.htm" に保存されました。
C800 - エラー 6、警告 0
mscorlib.dllってのをメモ帳で開いてみようとしたら応答なしになっちゃう
>>607 「ビルドエラーが発生しました」としか出ないんですが・・・
>Console:Title="初めてのプログラム";
610 :
606 :2009/09/12(土) 16:08:24
>>609 Console:Title="初めてのプログラム"; を
Console::Title="初めてのプログラム"; に修正しましたが
同じくビルドエラーでした
>string1=Console:ReadLine();
> string1=Console:ReadLine();
613 :
606 :2009/09/12(土) 16:13:16
>>611 それでした。解決できました。
:は基本2つつけるものなんですね。
ありがとうございました。
>>613 基本2つとかもうそういう問題じゃなくてですね・・・。
スコープ解決演算子というものが…(ry
>mscorlib.dllってのをメモ帳で開いてみようとしたら _ASSERT( FALSE);
クラス定義で以下のようなメンバがあるのだけれど 頭と後ろのconstの意味はなんでしょうか。。 virtual const DWORD GetInputNum(void) const = 0;
頭のconstは無意味 後ろのconstは、そのメンバ関数がconstなインスタンスに対して呼べるしるし (thisがconstになる)
̧̛͇̦̭̯͍̱͖̼͔̣̲͙͇̼͈̃͋̓̾͋ͪͣͦ͑̍̃͊̃͟͟͠ͅ=0の意味は何ですか?
せめて読めるように書いてくれ
>>618 その書き方が気になる
純粋仮想関数でぐぐれ
あと言語自体の質問はC++スレでやれ
Javaのabstractメソッドみたいなもの?
CreateDialogで作成したダイアログの規定のボタンにマウスを自動で移動させたいのですが、 ボタンにBS_DEFPUSHBUTTONを設定し、SetFocusしても移動しませんでした。 TABとEnterは使えてます。 規定のボタンにマウスを自動で移動させるには、自身で実装する必要があるのでしょうか?
環境や設定によってはマウスが自動で動くが、 俺はマウスが勝手に動くと逆に使いにくいから、そういう機能は使わない。
visual basic 2008 で「数値1と数値2を読み込んで小さいほうの数以上で大きいほうの数以下の 整数を全て加えた値を表 示するプログラムを作れ」という問題が分からないんで教えてください:: for next を必ず使わなければいけないそうです 自分で作ったプログラム↓ dim i,j,sum as integer i=val(textbox1.text) j=val(textbox2.text) for i = val(textbox1.text) to val(textbox2.text) sum=sum+i next label3.text=i&"〜"&j&"までの和は"&sum&"です" 一応動くのですが数値がおかしいんです・・・。 間違ってるところを教えてください。
プログラムどうこうではなく あなたは質問するスレを間違っている。
最近VC++を勉強し始めたものです。 ご教授願えればと思い質問させて頂きます。 環境:WindowsXP、Visual Studio6.0 MFC、SDI テキストボックスに入力された16進数の値を、バイナリとしてファイル出力したいのですが、 文字列として読み込んだ値を16進数に変換してくれるような関数はあるでしょうか? (イメージ) Cstring AAA = "FF"; 出力ファイルをバイナリエディタで開いた時 FF もしあったら、無ければ代替方法を お教え願えればと思います。 よろしくお願いいたします。
>>629 strtol
16進数に変換するんじゃなくて、文字列を16進数として解釈して変換後の数値を返す関数だが
>>631 大体何したいか分かっててもこのスレじゃ答えてあげられないんだ
すまない
633 :
629 :2009/09/14(月) 00:35:11
>630 回答ありがとうございます。 明日と言うか今日試して見ます。 また何かあったおりは、アドバイスお願いいたします。
いやだからよそでやれって
わざわざファイルに書くんならstrtolじゃ短すぎるんじゃないかと思うけど、 いったい何するプログラムなのか理解不能。 ただの興味本位や思いつきでやってることなら関わるだけ時間の無駄な気がする。
プロジェクトフォルダって最初"Visual Studio 2008\Projects"になっていますが、 これを変更するにはどこをいじればいいでしょうか
メニュー探せばあると思うけど わざわざ本人の代わりに探してやるほどお人よしじゃないから
639 :
629 :2009/09/15(火) 01:58:27
>>635 多分自分の質問に対するレスですよね?
出力するファイルは、他のシミュレータが読み込むデータファイルとなります。
勉強がてらサポートツールを作ってみて、と言われて作成しているしだいです。
データ数としては全部で70Byte程なので、各テキストボックスからの入力を
教えて頂いた方法で、切り出し&ループして変換しようと思っております。
もちろん一括で簡単に変換できたら嬉しいですけど。
とにかく、お目汚しな質問スイマセンでした。
VC++2008EEでboost libraryの1.37使ってるんですけど、share_ptrなどをinludeすると インテリセンスが機能しなくなるのはあきらめるしかないんですかね
VC++初心者です C言語で書いていた画像処理のプログラムをVC++でWindowsアプリケーションにしようと思いやり始めたのですが、 なかなかC言語と同じようにはいかずに困っています。 環境:Windows XP, Visual C++ 2008 Express Edition, Windowsフォームアプリケーション 今、メニューを作っています。 メニュー⇒ファイル⇒画像を開く・画像を保存する・表示画像のクリア・終了する と作っているところなのですが、表示画像のクリアでつまずいています。 ファイルから読み込んだ画像をpictureBoxで表示しているのですが、 pictureBoxの画像をクリアするにはどうすればよいのでしょうか?
VC++.net 2002を使っています 何度プロジェクトを作り直しても下記のエラーがでるようになったのですが 解決方法が分かりません。作業用フォルダはデフォルトのディレクトリです。 ChildWindow fatal error LNK1104: コンパイラは、ファイル 'Debug/ChildWindow.exe' を開くことができません。
リンカ ツール エラー LNK1104 ファイル "filename" を開けません。 指定されたファイルを開けません。 ヒント このエラーには次のような原因が考えられます。 ディスク容量が足りません。 ファイルが存在しません。 ファイル名またはパスの指定に誤りがあります。 ドライブの指定が無効です。 ファイルに適切なアクセス権がありません。 展開した filename のパス名が 260 文字を超えています
'Debug/ChildWindow.exe' が実行中とか無いよね
ありえる。
ver6の時は#include <hoge.h>ってやってもローカルにあるhoge.hをインクルード出来たと思ったけど 2005だとファイルが見つからないって起こられるのはなんとかならんかね? オープンソースのをコンパイルする時にディレクトリ指定にすると同じ環境作り直すのが大変になるし #include "hoge.h"って打ち返るのもめんどくさいし
>>646 インクルードディレクトリにピリオド1文字指定するのがそんなに大変か?
あるいは、ダブルクォーテーションに直すのも正規表現で、ソリューション全体を検索対象にすればそんなに大変でもないと思う。
>>646 それは寧ろ、VC6の方がおかしいから。
でもUNIXかLinuxかわからないけど、なんでもかんでも<>でインクルードしてるソースをよく見る
>>649 それは自前の、あるいはそのプログラム固有のヘッダでも?
インクルードパスを正しく設定していれば<>でいいと思う。
651 :
649 :2009/09/18(金) 14:39:48
あーそういうことかthx
質問です。 VisualC++6.0SE・MFCを使用し、コンパイルオプションに/Ob1を指定したのですが > コマンド ラインの警告 D4002 : 認識不可能なオプション '/Ob1' を無視しました。 と表示され効果がありません。この機能はStanderd Editionでは使えないと マニュアルにありますが、何か代替手段は無いでしょうか。 用途としては、デバッグ時にも下記のコードをインライン化したいというものです。 >template <class T> class クラス名{ > T* m_pData; > __forceinline T& operator[](int index){ return m_pData[index]; } 動的配列に大量のランダムアクセスを多箇所で行うため、これがインライン化 されていないと処理速度が落ちてしまいデバッグがつらいです。 どうかよろしくお願いします。
>>653 ありがとうございます。
意図がよく飲み込めませんでしたが、最適化オプションを/Odから/O2あたりに
変更するようにアドバイスいただいたと受け取りました。試してみたところ
インライン化はできませんでした。
/O2にするとエディットコンティニューが使用できなくなりますが、そもそも
エディットコンティニューを使用しなければインライン化なしでも大幅な
速度低下は起こらないようになりました。不思議です。
以上のことから、大きなデータはデバッグコードオプションを/ZIから/Ziに
変更してデバッグすることにします。
ありがとうございました。
ていうかVC6ProfessionalならともかくStandardなんて窓から投げ捨てろよ さっさと最新VCのExpress Editionに移行しろ
だーかーらー VC6はもうC++じゃねーんだってば!! VC++2008 Express Editionにしろよ!
なんだ単なるデバッグの話か くだらないな
Linux向けのソースなんですが、VC++2008EEでもコンパイルできますか?
>>658 ものによるとしかいえないが、まず無理と考えたほうがよい
660 :
デフォルトの名無しさん :2009/09/21(月) 20:29:37
.exeのアイコンを設定したいのですがどうやるのですか?
exeにアイコンリソースを入れる
662 :
デフォルトの名無しさん :2009/09/23(水) 12:23:12
ちょっとおたずねしますが、10年くらいまえからVC6.0を使っています。 ですが、なんとなくそろそろ最新のVCに変えようかと考えています。 最新のVCってバージョンはどれですか? Vistaやwin7のプログラムも作れますか?
最新は2008 次は2010 Vistaはおっけー 7は新しいWindowsSDKを入れてください
>>662 2005だけどWin7対応作れてるよ 今買うなら.NETの関係で断然2010待ちだが
とりあえずフリーのエディションのやつダウンロードして試せ
666 :
デフォルトの名無しさん :2009/09/27(日) 01:18:38
VC2008を使用しております。 プログラムを書く→コンパイル→デバックなしで開始→でプログラムが起動しますが その時に開くウィンドウC:\windows\system32\cmd.exeの日本語が全て白い四角で表示されてしまいます。 どうやって直したらいいでしょうか? よろしくお願いします。
ソース書け
668 :
666 :2009/09/27(日) 02:05:59
#include "stdio.h" int main(void) { printf("こんにちは世界\n"); return 0; } これをコンパイルして実行しても□□□□□□□こんな感じにしかならないんです。 なぜだ、、、
ロケールを設定すればよいと思う
stdio.h なんか使っているからだと思う
Visual Studio .NET 2003でIDEごと落ちる異常終了に 悩んでおりますが、どなたかわかる方お助けくだされば幸いです。 開発環境は以下です Windows XP SP2 Visual Studio .NET 2003 SP1 問題の発生手順 1.VB.NETのアプリケーションを作る 2.同ソリューションにVC.NET(マネージドC)のアプリケーションを作る 3.マネージドCのプロジェクトのプロパティーを以下のように設定 ・C/C++のコマンドラインの追加のオプションを削除 ・リンカの入力で削除してmsvcrtd.libを設定(リリースにはmsvcrt.lib) ・リンカの入力でシンボルの強制を__DllMainCRTStartup@12に設定する ・リンカのコマンドラインで追加のオプションを/NOENTRY /NODEFAULTLIB:LIBCMTDと設定 4.VB.netのプロジェクトの参照設定から参照の追加をしてプロジェクトタブの中に マネージドCのプロジェクトがあるのでそれを設定 続きます
続きです 5.マネージドCのプロジェクトに以下のような簡単なプログラムを書く(ヘッダは割愛します) int clsTest::tst(String* strFileName) { int nRet; char* pstrFileName; nRet=0; pstrFileName = (char*)(void*)Marshal::StringToHGlobalAnsi(strZipFileName); nRet=tstsub(pstrFileName); Marshal::FreeHGlobal(pstrFileName); return nRet; } int clsTest::tstsub(char* pstrFileName) { return 0; } 6.VB.netからは以下のようにしてマネージドCを呼び出すようにします Dim lclsTest As New clsTest lclsTest.tst("ああああ.txt") 続きます
続きです さてここまでの手順でずっと開発を進めていましたが、特に問題らしい問題はなかったでした ところが、マネージドCにSTLをつかうとコンパイルするたびに頻繁に落ちます 変更かけてコンパイルをすると2回〜4回くらいに1回の割合で落ちます。 テストコードは以下のとおりです int clsTest::tstsub(char* pstrFileName) { vector<wstring> vstrwFilePath; vector<wstring>::iterator itewstr; wstring strwFilePath,strwTmp; vstrwFilePath.push_back(L"あいうえお"); vstrwFilePath.push_back(L"かきくけこ"); vstrwFilePath.push_back(L"さしすせそ"); for(itewstr=vstrwFilePath.begin();itewstr!=vstrwFilePath.end();itewstr++){ strwTmp=*itewstr; } return 0; } 落ちるタイミングはコンパイルエラーなり正常終了する直前で固まって落ちます。 なのでコンパイル自体はすべて行われているみたいです。 どうもタスク一覧に切り替わるようなタイミングで落ちています。 しかも連続でやっても再現性はなく、ある程度stlを含むソースをいじって コンパイルしなおさないと再現しません。 色々調べてみましたがわかりません。 stl部分をアンマネージプロジェクトに分けてlib化やdll化をしても現象は同じです どなたか解決策がわかる方お願いします。
訂正です × Marshal::StringToHGlobalAnsi(strZipFileName); ○ Marshal::StringToHGlobalAnsistrFileName);
すいません訂正の訂正です × Marshal::StringToHGlobalAnsi(strZipFileName); ○ Marshal::StringToHGlobalAnsi(strFileName);
何度もすみません また間違いがありました. × 2.同ソリューションにVC.NET(マネージドC)のアプリケーションを作る ○ 2.同ソリューションにVC++で.NET(マネージドC)のクラスライブラリ(.NET)を作る
677 :
666 :2009/09/27(日) 11:12:45
コマンドプロンプトのフォントをMSゴシックにしたら直りました なんでMSゴシックじゃなくなってたんだ、、、
ここサポートセンターじゃないし
HTTPならブラウザで実験してそっくり真似ればいいだけだろうが
kwsk
>>679 sReq = "Content-Type: multipart/form-data; boundary=-AAAABC\r\n\r\n";
sReq += "---AAAABC\r\n";
sReq += "Content-Disposition: form-data; name=\"FormName_X\"\r\n";
・・・
リソースファイルでバージョン情報を追加したんですが この情報を読むにはどうしたらいいでしょうか?
それ用のapiがあるね
GetFileVersionInfoですね
679です、自己解決しました。 >680 おっしゃる通りです。 パケットキャプチャをインストールして確認が出来ました。 >683 解決した方法とは違いましたがありがとうございました。
679です、何度もすいません。 >683 boundary のハイフンの長さを指摘して下さってたんですね、 ご指摘の箇所で合ってました! ありがとうございます! 違ったとか勘違いしてすいませんでした…(汗
Hello, worldとひょうじさせるにはどうしたらいいですか
すみません。以下のような DATABOX* p_databox = new DATABOX[num]; 構造体Aのポインタ にnewで 構造体Aの配列 を作った場合、 どうすれば 構造体Aの配列 のメンバ変数を1つ1つ取り出せるのでしょうか?(ループ処理等で扱いたくて。) 試しに p_databox[15].name p_databox[15].age などと書いてみても、 エラーにはならないものの常に値が一定で使い物にならず・・。 どうすれば良いのでしょうか orz
newで作った配列に、値はちゃんと入れてあるの?
p_databox[15]->name アクセスの仕方はたしかこうだなw
DATABOX*なのに構造体Aのポインタとか意味不明すぎる
(^^)
>>694 >error C2819: クラス 'XFILEVERTEX' にはオーバーロードされたメンバ 'operator ->' がありません。
>error C2232: '->XFILEVERTEX::x' : 左のオペランドが 'struct' 型です。'.' を使用してください。
と出てしまう様です。
>>693 参考元の通りにmemcpy()していましたが、
書き方に間違いがないとなると、値が入ってない可能性が高そうですね・・。
複写元のデータ形式がはっきりしていないので梃子摺りそうですが・・ありがとうございました。
入れてはいます。処理は成功してますが確認できていません;
>>695 ちょっと特殊な名前だったので仮名を使ってる内に。すみませんでした。
ぐふ・・確認しながらチマチマ書いてたら消し忘れが。 失礼しました。
>>697 コードをそのまま晒してないな
初心者が無駄なこと気にして余計な手間とらせんじゃねーよ
お前の常識の上で動いてないのに改変したコード貼ってんじゃねーぞ糞が
>>692 >試しに p_databox[15].name p_databox[15].age などと書いてみても
使い方はこれであってる。問題は別のところだろう。
要素に何も代入せずに、
name = p_databox[15].name;
などと試したのではないか?
>>701 void*のポインタからmemcpy()で構造体の要素サイズ分(sizeof)をコピーしているのですが
多分そこが正しく動いていないのですね。
確認すべき場所がよりハッキリしました。
ありがとうございました。
704 :
デフォルトの名無しさん :2009/10/01(木) 02:07:31
VC++2005,SDKでダイアログベースのアプリを組んでいます. さしあたりやりたい事: よくある「ファイルを開く」のダイアログを使って, 任意のフォルダまでのパスを取得したい. 本当にやりたい事: 事前設定として,「どのフォルダ以下に保存するか」をパスで与える. 設定後,とあるファイルを取得してきて,設定したフォルダ以下に保存する. これは事前設定にする必要があるので,ファイル取得後に 保存先を指定するダイアログを出す作りは不可. 質問: OPENFILENAME ofn; 構造体メンバに色々と代入して GetOpenFileName(&ofn); を呼ぶことで,よくある「ファイルを開く」のダイアログは出せます. しかしこの場合, フォルダ を選択した状態でこのダイアログから 抜けることはできず,必ず ファイル を選択しなくてはいけません. 任意のフォルダまでのパスを,マウス操作にて取得する方法は ありますでしょうか? 以上です,よろしくお願いします.
>>704 GetOpenFileName()じゃなくてSHBrowseForFolder()使えばいいんだと思う
>>704 「本当にやりたい事:」の意味が分からん
すみません、 float z = ((a*b)*(1/c) + (d*e)*(1/f) + (g*h)*(1/i)); こういった式を組み込むと 「常に正常処理できる物」と「値が-1.#IND000になって正常処理できない物」が現れます。 どうやら0で割る(逆数?)ような形の計算になるのが悪いらしい という所まで解ったのですが この式は最悪全ての変数が0になるので、その対策を教えて頂けませんでしょうか。 また、なぜ正常処理される/されないの差が生まれるか、推察して頂けると幸いです。
0で割ったらダメなのは義務教育で習う常識だと思ったが もしかして知らなかったらもう一回基礎からやり直してほしい。 常識知らない人間に説明するだけ無駄だから
>>708 0で割ったら無限大になると言う人もいますが、C言語では
無限大など定義されてないのでエラーになります
0を発見したやつが悪い
実行時のエラーだからC言語関係ない
>>709-712 0で割ったら駄目。習った気はするんですが・・完全に忘却してました。
確かに現実でも0で割るなんて言われてもどうすりゃ良いのか解りませんね。
INFとはInfinityって意味の警告だったのですね。
今回はif〜elseで回避しました。今後は同じ過ちをしないよう十分注意します。
為になりました。感謝。
infinityじゃない、indeterminateだ。 お前はINFとINDも区別がつかんのか。
>>714 INDでしたか。失礼しました。
このスレはとてもお偉い方々が多くいらっしゃって恐縮です。
>>715 さすがにこの件についてはお前を全く擁護できない
717 :
デフォルトの名無しさん :2009/10/03(土) 22:50:21
穏便に
それぞれ別のディレクトリに保存した同一ファイル名のファイルを プロジェクトに追加してビルドすると 未解決の外部シンボルというエラーがでます。 どうしたら同一ファイル名のファイルをビルドできますか?
あ、使用しているのはvisual c++ 2008 EEです
720 :
718 :2009/10/04(日) 00:22:06
別のスレで質問してきます
VC6・WindowsXPでDIBSectionに関する質問です。 ファイルからBMP,JPG,PNG画像を読み込みCreateDIBSectionで作成した バッファに展開しました。このときBITMAPINFOHEADER構造体の biXPelsPerMeter,biYPelsPerMeterに物理解像度を指定しました。 編集する際にこのパラメータを参照しようと HBITMAP hbm;// 読み込み時に作成したビットマップのハンドル DIBSECTION dib={0}; dib.dsBmih.biSize = sizeof(BITMAPINFOHEADER); GetObject(hbm, sizeof(DIBSECTION), &dib); で取得したのですが、物理解像度だけゼロが返ってきてしまい 取得できません。 ビットマップハンドルに物理解像度を持たせておく方法は 無いでしょうか。よろしくお願いします。
>>721 何がしたいんだよw
最終目的を言えよ
ハンドルに解像度はもてねぇだろ
まあファイル専用の情報と思うしかないかも
意味がわからないけど 自分で保存したファイルを開いたら保存しておいた情報が消えていましたどうしましょうか? ってこと? それとも この構造体にたしかに入れておいたはずなんだけどいつの間にか消えてるんだよね ってこと? 前者なら 読み込むときにとってきてねぇんじゃね? 後者なら GetObjectでとってきた構造体に値を入れても書き換えたことにはならないんじゃね? って感じ?
725 :
721 :2009/10/04(日) 19:23:44
返信ありがとうございます。
>>722 現在作成しているのは画像ファイル入出力ライブラリです。
MS-Wordやイラストレータのように、画像を読み込んだらその画像のDPI値を
考慮したデフォルトサイズで表示するような挙動をアプリケーションに
とらせようと思っています。取得したDPI値をずっとメンバ変数に持っておけば
実現できますが、OSが保持してくれるのなら構造がシンプルになります。
>>723 そうかもしれません。
>>724 情報はOSが管理しているため実装は不明です。後者に近い形になると思います。
・CreateDIBSectionで解像度情報を指定した
・戻り値であるHBITMAP以外は全て破棄した
・GetObjectで情報を再取得すると、画像のピクセル数とピクセルバッファは
取得できるのに解像度情報がゼロになっている
ってことは単純にDIBSection的には「保持してねぇよそんなもんだって俺に関係ねーもん」ってことじゃね? 自分で必要な情報覚えておけばいいんじゃね?
BOOLとboolは実際にWin32では メモリ容量以外にも どちらの方が高速だとか違いはあるんでしょうか?
違いは存在しないこともないんだが、気にする必要は全くない。 嫌な言い方だけど、それをここで質問しているうちは全く問題にならない程度の違いだし、 そもそも一言でどちらがいいと説明できるようなものでもない。
>>727 bool は true か false しか表現できない
BOOL は TRUE、FALSE を表現するが稀にそれ以外の値が使われる事もある
GetMessage() API がその筆頭
typedef int BOOL; // by WinDef.h つまり BOOL は int。
とても初歩的な質問なのですが、 操作を誤ってしまって入力画面に「→」や「・」などの表示がされるようになってしまいました。 (おそらくVBの補助的な機能かと思います) スペースが「・」で、Tabでのスペースが「→」のように表示されます。 これを消す方法を教えていただけないでしょうか。 プログラミング自体の質問ではなくてすみません。
バージョンに夜かもしれないけど、VC++2008EEだと メニューバー→編集→詳細→スペースの表示
>>733 直りました。簡単なことでしたが非常に助かりました。ありがとうございます。
質問があります。 グローバル変数をデバッガのウォッチで監視したいのですが、「スコープ外です」と言われ、参照できません。 ヘッダー内にて、 extern int hogehoge; し、.cpp内にて int hogehoge = 2; して、実行される関数内にて、 hogehoge = 3; としてブレークポイントをしかけています。 ウォッチでは、 hogehoge と指定しています。 ::hogehoge でも駄目でした 参照する方法はありませんでしょうか?
736 :
735 :2009/10/05(月) 20:08:38
>>735 はC++/CLIの話です。
C++/CLIのせいだったりするんでしょうか?
現象も解決策も興味ないけど、C++/CLIのせいかと思うんならC++のプロジェクトで確かめてみて、C++の場合はできます とか言えばいいのに
hogehoge = 3; ここで止まってるなら見れる
ネームスペースとか?
740 :
デフォルトの名無しさん :2009/10/08(木) 01:07:10
2点質問があります。 1.ファイルパスの正当性を確認するためのAPIってないですか? ユーザがテキストボックスに入力したパスが 正当なものであるのかどうか(特定のファイルを明確に示しているか)を 判定したいのですが、どのようなAPIを使用すれば良いのか分かりません。 ファイルパス表記の判定APIみたいなのがあったら、教えてください。 2.ファイルの存否確認を行うAPIってないですか? ある特定のファイルが存在するか否かを判断したいです。 現在、CFileFindクラスを使用して、ファイルが見つかったら存在する としていますが、ファイルパスにワイルドカードを入れたりすると 複数のファイルが検索されてしまったりして、十分ではありません ファイルの存否確認をするAPIみたいなのがあったら、教えてください。
プログラムの質問じゃないのですが VC++2005を使用中どこかショートカットキーを押してしまったようで エディタの左側から空白に→や・マークが急に現れて困っています。 戻し方がさっぱりわかりません。わかる方がいたら設定方法を教えてください。
死ねカス
>>740 1. ファイル命名規約のことを言っているのか?
\ / : * ? " < > | が入ってるか否かを判断したいのか?
2. GetFileAttributesEx() を使う。
戻り値が FALSE なら、そのファイルは存在しない。
>>743 ありがとうございます。
1の質問についてですが、命名規約のチェックも問題解決の1つになります。
実は、今回この質問をさせていただいた背景には、以下の問題があります。
CFileDialogに初期ファイル名(ファイルパス)を渡せますが、
このときに変なパスを指定するとDoModalを行っても
ダイアログが開かないという現象が起きています。
(自分の環境だけなのかどうかは不明ですが。)
この問題を解決するため、
ユーザがテキストボックスに入力したファイルパスを、
事前にファイルの命名規則等チェックして、存在も確認して、
オールOKだったらCFileDialogのコンストラクタにファイルパスを指定し、
NGだったら空文字列(またはNULL)を指定しようとしています。
最終的に作成したい機能は単純で、ユーザがテキストボックスでもファイル選択ダイアログでも
どちらでもファイルパスを入力できるようにするだけです。
単純な機能なのですが、色々といじっているうちに厄介な問題に遭遇してしまったのです。
質問があります。 ハードウェアを介して情報を読み込むアプリケーションを開発中で、 ハードウェアやドライバ、ライブラリーは他社より提供を受けています。 提供されているファイルはドライバ(xxx.inf、xxx.sys)とライブラリ(hoge.dll、hoge.lib、hoge.h)及び、 ライブラリを用いたサンプルアプリケーション(VC2005のソース)です。 アプリケーション本体は Visual Basic 2008、Visual C++2008でラッパーを作成しようとしています。 hoge.hの中で #include "..\common\ioctl.h" の1行があるのですが、ioctl.hというファイルは提供されていません。 サンプルアプリケーションを参照したところ、プリコンパイル済ヘッダーファイルを用いており ioctl.hどころか hoge.hもソリューションには含まれていませんでした。 (質問) (1) これは hoge.dllや hoge.libに含まれていて、VC2008のプロジェクトの設定等を編集すれば 参照できたりするものでしょうか? (2) また、プリコンパイル済ヘッダーファイルから ioctl.hファイルを取り出す手段はありますか? (3) それとも、単純に提供ファイル不足という認識でよいのでしょうか? お分かりになる方が居ましたら、教えてください。 (余談) 提供元が「都度の質問は受け付けない」「どうしても必要なら打合せの場を設ける」という態度なので、 なかなか確認ができない状況です。
なんだその偉そうな提供元は
747 :
745 :2009/10/08(木) 12:03:30
そうなんですよ… だから単純に提供ファイル不足と断定できれば堂々とクレームつけてて赤っ恥かかせてやろうかと。 逆に知識不足で打合せの場を設けてしまうと、こちらが恥をかくことになってしまうので調査中です。 ただ、いくら調べても「ヘッダーファイルがlibやdllに含まれて無い」という決定的根拠が見つからず…
ここ初心者スレだし、お前の仕事の無料サポート喜んで引き受ける馬鹿がいるか?
749 :
745 :2009/10/08(木) 12:47:20
確かに仕事での話ではあるのですが… VC初心者が 「libや dllの中には参照可能なヘッダーファイルは含まれていることはありますか?」 って質問をしていると解釈してもらえるとありがたいです。 細々書いたのは後出し情報が無いようにと思った次第。
>>745 普通にcommonフォルダをくれなかっただけだろ
文句言え
>>745 その提供元自身も開発能力が足りないんだろうな。恐らくは、ソフトウェアは外注任せなんだろうね。
非常に興味深いのでコンサル引き受けたいくらいだ。
.inlという拡張子のファイルは、インライン関数を定義したファイルということですが ヘッダファイルにinlineを指定して関数を定義した場合とどう違うのでしょうか。
何ら違いはありません。便宜上、混在していると不都合があるので分離しているのでしょう。
即レスありがとうございます。 違いがないということなので、自分でインライン関数を使う場合は慣れてる.hに書くことにします。
すまん 冗談だった
757 :
デフォルトの名無しさん :2009/10/08(木) 21:10:22
質問です。 開発環境はVC++6.0またはVC++9.0Express Editionです。 Thumbsenseというソフトがありまして、このソフトはSynaptics製のタッチパッドに 手が触れているときにキーボードをショートカット代わりに使えるというものです。 今回作りたいものは、タッチパッドに触れる代わりに特定のキーを押す事によって Thumbsenseを利用できるようにするソフトウェアです。 そのためにはまず、Synapticsのタッチパッドに手が触れているときに Synapticsのドライバがシステムにどのようなメッセージを流しているかを 知らなければなりませんが、これが調べても判りません。 何方か詳しい方、調べ方だけでもご教示頂けないでしょうか? SPY++も試してみたのですが結局良く判りませんでした…。
>>757 ショーカット起動にThumbsenseとやらを経由する必要性は?
普通にショートカットランチャー作ればいいと思うが。
759 :
デフォルトの名無しさん :2009/10/09(金) 03:58:00
Yahoo!プログラミング言語検索ランキング(今回2009/10/9、前回2009/10/6) . 1(. 1) HTML 約5,030,000,000件(約5,040,000,000件)- . 2(. 2) PHP 約2,980,000,000件(約2,970,000,000件)+ . 3(. 3) Java.... 約 832,000,000件(約 835,000,000件)-- . 4(. 4) Forth. 約 322,000,000件(約 323,000,000件)- . 5(. 5) Ruby.. 約 274,000,000件(約 275,000,000件)- . 6(. 6) perl..... 約 244,000,000件(約 245,000,000件)- . 7(. 7) Python... 約 205,000,000件(約 204,000,000件)+ . 8(. 8) pascal... 約 170,000,000件(約 170,000,000件)0 . 9(. 9) Delphi 約 127,000,000件(約 127,000,000件)0 10(10) VisualBasic... 約 121,000,000件(約 121,000,000件)0 11(11) lisp... 約. 26,700,000件(約. 26,700,000件)0 12(12) fortran....... 約. 21,300,000件(約. 21,300,000件)0 13(13) COBOL..... 約. 17,900,000件(約. 18,500,000件)-- 14(14) HSP 約. 12,300,000件(約. 12,300,000件)0 15(15) FreeBasic.. 約 6,310,000件(約 6,320,000件)- 16(16) Tcl/Tk...... 約 4,940,000件(約 4,940,000件)0 17(17) QBasic..... 約 4,180,000件(約 4,190,000件)- 18(18) VisualC.... 約 1,340,000件(約 1,360,000件)-- 19(19) DarkBASIC . 約 1,330,000件(約 1,320,000件)+ 20(20) BasicStudio 約 302,000件(約 304,000件)-- 21(21) N88basic...... 約 217,000件(約 215,000件)++ 22(22) f-basic....... 約 109,000件(約 109,000件)0 23(23) ActiveBasic 約. 90,100件(約. 89,800件)++ 24(24) 99BASIC.... 約. 11,300件(約. 11,500件)-- 3Dprogramming 約790,000件(約794,000件)-- 2Dprogramming 約. 57,600件(約. 57,400件)++ intel 約726,000,000件(約729,000,000件)-- amd 約352,000,000件(約355,000,000件)--
- 間もなくVCが新種のDarkBASICに追い抜かれますが 確かにC言語の衰退は避けられない事実です。 - それはどうしてですか 趣味でC言語を体得しようとするプログラマがいないからでしょうね。 - 会社で使ってるのに趣味で使いたくない? そうでしょうね。 そもそもC言語は生産効率向上には寄与しなかったと言う事実があります。 仕様書を噛み砕くだけの、馬耳東風な感覚では愛着が湧かないでしょう。 - 将来的にCプログラマは切り捨てられる? すでに旧来のCプログラマは他の言語に移管してると思います。 職業的にもCでは使えない状況ですし。 - 加速するIT化に対応できないと言うことですか。 他の言語群がCを包括的に上回っています。 - BASIC言語の台頭の可能性はあると思いますか。 あるでしょうね。 言語仕様が簡素化されて生産効率が上がれば可能性はあると思います。 - かつてCはBASICより速い実行コードを生成すると自慢していましたが。 それは過去の幻想でしょうね。
761 :
デフォルトの名無しさん :2009/10/09(金) 05:22:36
朝鮮人の主張に非常に嘘が多いことが問題です、 日韓併合で朝鮮は日本との併合に同意し、戦闘行為を伴わず日本領となりました。 その後、朝鮮に対して莫大な投資が行われ鉄道、工業、農業、教育などが飛躍的に発展しました。 100年前のソウルは道ばたに糞尿が落ちているような不潔な街でした、それは朝鮮を訪れた多くの外国人が記録を残しています。 朝鮮人の寿命は短く、病気で多数の者が死んでいました、一般市民の間には入浴の文化すら無かったのです。 日本支配36年の間に、朝鮮人の寿命は2倍に伸び、人口も2倍に増えました、これは弾圧ですか? 教育においては日本が朝鮮語の辞書を初めて作り、学校を建設し、識字率を向上させました。 日本軍への入隊募集が始まるとすごい倍率で志願者が殺到し、日本軍に入隊できた者は家族の誇りとなりました。 しかし日本が戦争に負けた途端、朝鮮人は態度を変え、日本人に対し略奪、暴行、強姦、殺害などありとあらゆる悪行を働きました。 かつて福岡には朝鮮人の暴行により妊娠した女性を堕胎する施設もありました。 そして時が流れ、1965年の日韓基本条約で日本政府と韓国政府は和解しました。戦後賠償は全て決着したのです。 その後も多くの投資が朝鮮に対してなされましたが、朝鮮人は感謝することもなく 日本の援助を自分の力で発展したかのように自慢をして、 乞食が金持ちにたかるように次々と金や技術を要求しているのです。 このように尊大で恥ずかしい行為が世界のどこにあるでしょうか? それでも日本に対して謝罪と賠償を要求する朝鮮人の感覚が信じられないです。 日本は、朝鮮に対して、一切やましいことはなく、すべての責任は果たしました。 そして、日本は日本国民のものですから、外国人のあなたがでかい顔をする場所ではないとハッキリ言っておきます。 朝鮮人が疎まれているのは、朝鮮人自身の行為によるものです。 日本政府が提供する行政サービスを全て利用したいなら帰化しなさい、在日朝鮮人は帰化基準が緩いです。 日本の社会が気に入らないなら朝鮮半島に帰りなさい、あなたの国籍は朝鮮なのですから。
>>759 ちょっとまてよw
cってどうやって検索かけるんだよw
日本語なら「C言語」でいけるがw
職業的にもCでは使えない状況ですし。
764 :
デフォルトの名無しさん :2009/10/09(金) 07:39:37
こないだとなりで社員さんが話してるのを聞いた感じでは人が集まらないっていうのを理由にして 強引に.netにリニューアルする仕事増やしたりするみたいだね なるほどと思った サポートしてる側だからなんとかして対応っていうんじゃなくて いま、できないのを理由にして切っちゃうんだね
765 :
757 :2009/10/10(土) 02:14:20
>758 Thumbsenseはただのランチャではなく、編集も容易に多様な機能を使用できるからです。 たとえば、以下のような機能を利用可能です。作れない事はないのですが、 かなり骨が折れる上、ソフトを作ったところでThumbsenseと同じ設定を維持する事は面倒なので… ・予め設定したファイルやプログラムの一発起動 ・アクティブになっているウィンドウを移動したり(つまりカーソルを所定の位置に併せて掴まなくても キー操作をしただけで掴んでいる状態になり移動させる事ができる)、 ・ウィンドウの最大化・最小化 ・アクティブとなっているウィンドウを消去する ・ページの戻る/進む
>>765 ThumbsenseのHPにBBSがあるんだから、そこで訊きな。
- ではDarkBASICは日本での必要性を感じないのでは? ところがそうではない情勢なんですね。 - 具体的にはどういった情勢なんですか。 人的負荷(Human-overhead)の問題を回避できない背景があります。 - 分かりやすく解説して下さい。 ヒューマンオーバーヘッド(以下H.O.H.)の問題は、1つのプログラムを作成する場合に、1つの言語やプラットホーム の知識だけではなく、複数に跨る言語やプラットホームの知識を必要とする場合によく発生します。 - それがDarkBASICとどう関係するんですか。 DarkBASICはH.O.H.の問題を回避できるようにAPIやハードウェアの個体差を窺いながらプログラミングをする必要が ありません。 もちろん、すべてではありませんが(笑) - それはどのような場合に効力を発揮するのでしょうか。 3Dプログラミングにおいて抜群の生産効率を発揮するでしょうね。 - それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう? 確かにそのとおりです、しかしH.O.H.の問題は解決できません。 - 生産効率向上には何が必要なのですか。 体系的に簡素化された言語仕様、これに尽きますね。
- 生産効率向上には何が必要なのですか。 体系的に簡素化された言語仕様、これに尽きますね。 - 人的負荷(ヒューマンオーバーヘッド(以下H.O.H.))の問題の解決にあたっては、言語仕様の簡素化や、APIを経由した複雑な プログラミングの回避が必要になりますね。 30年前のパソコンブームの火付け役になったのがBASICですが、CPUやハードウェアの違いを乗り越えて爆発的な普及力を見せ 付けました。 BASICの学習に必要なのは、中学生程度の学力と、紙切れ1枚程度の簡単なマニュアルだけで覚えられると言う特徴があります。 - それらの背景には現行の開発システムには存在しないインタープリタ、フルスクリーンエディト、ダイレクト実行モードなど、小回 りの利く機能がありましたね。 現在の開発システムの周辺環境は大規模アプリケーション作成向けが主流であって、セルフフィードバックの効果の高いインター プリタ、フルスクリーンエディト、ダイレクト実行モードなどの機能は置き去りにされています。 これは大学や企業の教育機関が、実際に機能している間は問題ありませんが、それらが機能しなくなると開発システムの根幹は 緩やかに崩壊していきます。 なぜなら、ユーザーである学生や研究開発要員が、セルフフィードバックの機会、つまりは自習の機会を失ってしまうからです。 - DarkBASICにはダイレクト実行モードはありませんね。 デバッグモードはありますが、ダイレクト実行モードはありません。 - セルフフィードバック(自己帰還)と、大学や企業の教育機関、どちらに信頼を置くべきですか。 どちらにも信頼を置くべきですが、生産効率だけではなく、将来への展望に備えた自己啓発が必要不可欠であると思います。
死ねカス
すみません。大量の数値と文字列の連結にsprintf_s()を使っているのですが char buff[4096] for(int i=0;i<500;i++) { sprintf_s(buff, sizeof(buff), "%s%d", buff, data[i]); } 上のようにすると、この処理そのものを何百回と呼び出すので負荷が高そうに思え、forを使わず sprintf_s(buff, sizeof(buff), "%s%d%d ・・・500回分・・・ ", buff, data[0], data[1], data[2], ・・・500回分・・・ ); こう手書きしているのですが、 もっと賢いコードの書き方は無いでしょうか?
500個の引数並べてるのかよ とりあえずsprintfやめてstrcat風なもん使うか作るかしたら? それでループすりゃいいべ。安全チェックも事前にやってしまうのがいいかも。
strcatも毎回先頭からスキャンするから 文字位置カウントしてつないでは文字位置更新でループの中でやれば関数コールもいらんな。
>sprintf_s(buff, sizeof(buff), "%s%d", buff, data[i]); こういうbuffの使い方はやめたほうがいいんじゃね?
- 結果としてBASICが根幹にあるんですね。 どうしてでしょうか。 簡単で手軽、誰にでも学習の機会があることでしょうね。 CやHSPだとこうはいきません。 CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。
>>771-772 今の私にはちょっとまだやり方が具体的にまでは想像が出来ませんが、
最後尾に継ぎ足す仕組みを自作すればループにしても負担が増える訳ではないという事なんですね。
ご助言ありがとうございます。
>>773 確かに余裕を持たせていたとしても、sizeofしたものを継ぎ足すのは不味そうですね。注意します。
- それはCやHSPでもAPIや外部のDLLを使えば簡単にできるでしょう? 確かにそのとおりです、しかしH.O.H.の問題は解決できません。
すみません。 大量のフラグ群を char型のビットフラグで管理するか、変数名的にミスを起こし難いであろうboolで扱うかで悩んでいるのですが、 bool型の変数が1byte未満で確保される事なんて、ありえるでしょうか? コンパイラはVC++2008ExpressEditionなのですが。
すみません 下記の事をするにはどう書けばいいですか int val[4];//各要素には0〜2が入る int result; <省略> //↓ここをインラインアセンブラで書き換えたい result = (((val[0]*3)+val[1])*3+val[2])*3+val[3];
__asm {} でかけるよ
mov,add,leaでいけるか
コンパイラにまかせたほうがよくね? 展開すると val0*27 + val1*9 + val2*3 + val3 dotがあれば一発じゃね?
783 :
質問 :2009/10/12(月) 17:44:52
超初心者です。いや、初心者というよりもプログラミングしてみたいな〜 ッ手思い始めた頃です^^;;;; 何を準備すればいいのか分かりません。 できれば無料の奴で! 18歳です
こういうのはスルーでおながいします。
年齢まで書いてネタかよ VC++のスレで聞くならVC++用意しろよ
( * )ここ
>>773 STLを使って良いならstd::stringを使って
char buff[10];
std::string str;
for (int i = 0; i < 500;i++) {
sprintf_s(buff,sizeof(buff),"%d", data[i]);
str += buff;
}
という風に書けるし、
printfやsprintf_sは成功すると出力した文字数('\0'を覗く)を返すから
それを利用してbuffのポインタの位置を移動するというやり方もできるよ。
>>775 boolはVC++では1byteだし、bool b[32]は32byteだけど、
STLのvectorというサイズが変更できる配列では
bool型は特別でboolを1個1bitで管理してるとか。
788 :
785 :2009/10/12(月) 19:40:42
789 :
788 :2009/10/12(月) 19:42:53
連続投稿すみません。 名前は787でした。 何やってるんだ俺。
VC++2005を使用しています。 マルチスレッドデバッグ(/MTd)のモードでコンパイルすると、プログラム実行時に MSVCR80D.DLLが見つからないと言われ実行することができません。 VC++の入っていないマシン上でこの問題が起きるのであれば分かるのですが コンパイルを行ったマシン上でも実行することができません。 Releaseモードでコンパイルした場合は正常に動作します。 色々設定をいじってしまったプロジェクトなので原因が分かりませんでした。 原因として何が考えられるでしょうか。 よろしくお願いします。
だからMSVCR80D.DLLが見つからないんだろ 自分でMSVCR80D.DLL探して見たのか? ReleaseモードはMSVCR80D.DLLを使わないから関係ないぞ
MSVCR80D.DLLがない
>>787 vector・・可変長配列とかなんとかの呼び名を聞いた覚えがありますが、可能性が有るんですね。
確認できる方法を探ってみようかと思います。ありがとうございます。
MSVCR80D.DLLがないならネットから落とせばいい。
/MTd でコンパイルしているのに「MSVCR80D.DLLが見つからない」 と言われるほうが問題。
いや、ファイルはあるはず何だけど、なぜか見つかってくれないんだろ。俺も遭遇したことある。 CRTを要求するマニフェストの記述がうまくいっていないみたいで、 標準C関係のヘッダを余計にインクルードしたり、プロジェクトのプロパティの デバッグ時の環境変数にPATH追加するとかで動くようになった気がする。
だから見つからないと最初から言ってるのに意味わかってるのか?
::を書いた後に出てくる入力支援候補一覧ってありますよね あれのソート順を変更したいんですが設定できるでしょうか? 使ってるのはVC++2008EEです
>>798 そういう設定は見あたらないな。使用頻度の高い項目だけを表示するというオプションはあるが。
まさか :: 直後で大量に候補が並んでる状態で選ぼうとしてるとか
過去のバージョンのVisualStudioがダウンロードできるところ知りませんか? 買ってきた参考書についてるソースが2005と2003用しかなくて困ってます。
2005のはほとんどそのまま2008に持っていけるぞ?
>>802 以前他のプログラムで2005→2008をやりましたが、
2008用に微妙にソースフォルダ内が変更されたので、参考書通りに学ぶには適さないかなと思いました。
その程度のことで参考書が役に立たないと思うくらい応用が利かないなら、プログラミングは諦めた方がいいと思います。
>>805 その程度といわれても、2005→2008で具体的に何がどう変わるのか私は理解していませんし
C++ではありませんが、些細なプログラムのバージョン違いで苦労した経験があるので
参考書に記してあるバージョンに合わせるのがベターかなと考えました。
>>802 さんからほとんどそのまま持っていけるとの回答をいただいたので
とりあえず2008で取りこんでみます。
エディタのカラーを黒系背景白系文字にしたいんだが設定項目が多くてめんどい 誰かが作った色設定ファイルで一発チェンジとか出来ないんだろうか ググッても設定ダウンロードサイトみたいのがでてこないってことはそういうのはないのかな?
設定のインポートとエクスポートで選択項目だけ出し入れできる
いい感じのカラー設定ファイルとか落ちてないかな
>>806 そういう問題を解決してプログラミングを覚えて行くんだよ
>>810 俺もそう思う。
でも、しょっぱなそんなところでつまづきたくないという気持ちもわかるw
しかし、VC6用の教科書を使って2008を学ぶのは苦行クラス^^;;; あまりにも違いすぎてびっくりする。っていうか、2008の方がコマンド減ってるんだよね。
すみません 他のcppファイルの、クラス外側(#include等の真下。ヘッダ同等の領域?)で宣言〜内部クラスで実体化したデータ用構造体を 別のcppファイルからそのままの名前(タイピングの手間だけの都合)で利用できるようにするには ・extern ・クラスのメンバ ・名前空間 のどれを使うのが定番なのでしょうか? 今はexternしか使えていないので、後ろ2つのどちらの使い方を勉強し直した方が早いのか を教えて下さると幸いです。
ちょっとわかんない 今のコードと書きたいコード書いてくんない?
>>813 クラスの static なメンバ変数にするという手もある。これなら、クラスのヘッダさえインクルードすれば、どこからでもアクセスできる。
むろん、どこかに実体は必要だが。
class hoge
{
public:
static int nHoge;
}
#define g_Hoge hoge::nHoge;
template <class T> struct hoge { static T value; }; template <class T> T hoge<T>::value = T(); これってどういう挙動をするの? 翻訳単位ごとにひとつ?
hogeのクラス定義がヘッダファイルにあるとして その宣言って有効なの? valueの宣言時にTの定義が見えてないと、実質コンパイルできないと思うんだけど
C/C++ スレに逝きな。
>>817 template<class T> struct C {
static T size;
C () { size++; }
};
template <class T> T C<T>::size = 0;
みたいなクラスを宣言して
C<int> と C<ungned> をいくつか作って
sizeを覗いてみると分かるかもしれない。
>>814-816 defineという手もありましたね。ありがとうございます。
クラスでやってみます。
インラインアセンブラの部分は、コンパイル時に最適化されて命令がスキップされるとかありますか?
発生しうるかどうかは判らないが、少なくとも俺は体験したことはない。 あとインラインアセンブラはx64コンパイラでは使えなくなってるから、できるなら使わない方がいいよ。
淫乱とかエロいな
>>822 確かインラインアセンブラの部分も最適化の対象となるとなるんだよな。
>>825 日本語でOK。
>>822 私の経験では、インラインアセンブラに渡すパラメータが最適化の影響でメモリになったりレジスタになったりした。
すみません c/c++には関数内で処理を特定の行に飛ばすjump機能は存在しないのでしょうか? webプログラミング言語にはそこそこ有る気がするのですが・・。 スコープの問題などが有るからそもそも存在しなかったりするのでしょうか? 何か擬似的に再現する方法が有ればご助言頂けると幸いです。
>>828 goto文があるじゃん。
そのレベルならC言語スレいけよ。
>>829 あー・・エラー処理に使ってるgotoってソレだったんですね。
失礼しました; ありがとうございました;
831 :
829 :2009/10/16(金) 20:45:56
(oto)
>>831 >goto文はむやみに使ってはいけないと言う暗黙の約束
それであまり見かけないんですね。
乱用はしないよう注意します。ご忠告感謝。
>>833 さらにいうなら、
gotoを使わなければ記述できないことはC/C++ではない。
gotoを使った方が綺麗ということはあるかもしれないが
「めっっっったに無い」。
if
while
do-while
for
switch
のどれかで書いた方が綺麗になる。
>>834 いや、むしろgoto使わないと嫌な目にあう場面がばっちり1場面だけある
if(!initXXX1()){
fclose(fp1);
fclose(fp2);
return FALSE;
}
if(!initXXX2()){
fclose(fp1);
fclose(fp2);
delete XXX1;
return FALSE;
}
・
・
・
こんな・・・
クラスで機能をひとまとめにして ローカル変数で宣言して デストラクタに処理させればOK
Cじゃないの?
まあ、C++でもいいけど使ったらわかりやすくなる場面なら使ってもいいんじゃない? 無理やり回避する必要もないと思う ただ、やっぱり長いのがダメであって短ければgoto使っても使わなくても問題なく読めるしね
スレ違いな質問は適当なスレヘgotoしてくれると助かる。 正直目障りでうっとおしい。
Visual Studio .NET 2003です。 外部デバイスからのCTSとDSRをGetCommModemStatusで確認しようとしているんですが、 確認のメッセージボックスが作動しません。 コールバックで呼び出しているので「GetCommModemStatus成功」のメッセージボックスは 定期的にポップアップするんですが、それ以外のメッセージボックスはウンともスンとも…。 どなたか下記コード見てアドバイスいただけますか? hdCom = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if( hdCom == INVALID_HANDLE_VALUE ) AfxMessageBox("createFileしっぱい");//開かない ■再帰部分---------------------------------------------------------- DWORD state; BOOL fSuccess = GetCommModemStatus(hdCom, &state);//hdComは上で作ったやつ if( !fSuccess ){ AfxMessageBox("GetCommModemStatusしっぱい"); //開かない } else { AfxMessageBox("GetCommModemStatus成功"); //定期的にオープン if(state & MS_CTS_ON) AfxMessageBox("MS_CTS_ON"); //開かない if(state & MS_DSR_ON) AfxMessageBox("MS_DSR_ON"); //開かない } }
LEDチカチカするシリアルチェッカーで見た方がいいよ。 CTSとかDTRとか変化しない方が多いから
>>843 シリアルチェッカーってのがよくわからなかったので
検索してシリアルチェッカーソフトウェアを起動してみたら
COM2じゃなくてCOM1を利用してたみたいです、
気づけて本当によかったです、ありがとうございます!
845 :
s :2009/10/17(土) 23:27:29
お礼:鬼怒川まんじゅう10個入り
>>845 経験者募集なのに、
未経験者歓迎ってどういうことですか!><
パートの募集要項みたいだなw
849 :
デフォルトの名無しさん :2009/10/18(日) 00:53:17
VC2005SP1をXP64bitで使ってるんですが、 double a = 24455115.0; double b = 0.234; double c = b + a; でcが24455115.2500になってしまう現象で困っています。 debugモードでは正しい値になるのですが、Releaseだと上記のような結果になります。 ちなみにbが 0.123では24455115.000に 0.450では24455115.500になってしまいます。 どうも小数部が0.25の倍数になってしまう様なのです。 この部分だけ抜き出したテストプログラムではReleaseでも期待する値が返ってきたので、 コンパイルオプションを見比べてみても違いが無いようです。 こんな事は初めてなのですが、原因としてどのような事が考えられるか教えて頂けないでしょうか? よろしくお願いします。
その値というのはどのように確認した?
851 :
デフォルトの名無しさん :2009/10/18(日) 01:10:08
デバッガの出力ととログファイルへの書き出しで確認しました。
>>849 double a = 24455115.0;
double b = 0.234;
double c = b + a;
CString s;
s.Format(L"%lf", c);
vs2008で↑で確認したら、debugでもreleseでも、同じ結果だった。
24455115.234
853 :
デフォルトの名無しさん :2009/10/18(日) 01:17:54
>>852 もちろん2005でも普通は正しい値になるんですが、
今作っている物だけ不思議な事になってます。
こう言った事が起こりうる原因が全く分からないのですが、何か考えられる事が無いでしょうか?
>>853 debugとreleaseとで、アセンブラのコードが違ってるか確認してみたら?
855 :
デフォルトの名無しさん :2009/10/18(日) 07:04:28
>>854 アセンブラ確認してコードが同じだったので再度実行したら、Debugも同じ状況に
なってました。
で、もう一度調べていくと使用しているライブラリの中で単精度に強制的に
変更されてました・・・。
倍精度を使用するように変更する事で期待する値になりました。
お騒がせしてすいませんでした。お答え下さった方ありがとう御座いました。
856 :
デフォルトの名無しさん :2009/10/18(日) 13:45:22
すいません。以下ヒントだけでも良いので教えていただけないでしょうか?
・やりたいこと
VisualStudio 6 世代に作られたあるアプリケーションAから呼び出される、
ユーザー拡張用のDLLを作りたい。
・開発ツール
VS2008C++ Express
自分はC→VB→C#しか経験が無いので、見よう見まねでWin32Dllを作成してみたのですが
アプリAからの呼び出しがうまくいかなく、手詰まり状態に落ちいてしまっています。
すいませんC++素人なんで、何から確認するべきかもわかっていません。
どなたかアドバイスを頂けないでしょうか?
ちなみにやりたいのは以下のサンプル実行です。
http://www.necel.com/nesdis/image/U16907JJ1V0UM00.pdf
>アプリAからの呼び出しがうまくいかなく extern "C" していないとか。
>>856 拡張子 .c でやってる?
.cppなら
>>857 のようにCリンケージの宣言しとかないと
859 :
856 :2009/10/18(日) 17:05:41
>>857 ,858さん
レス有難うございます。
extern "C" {
}宣言ですよね。
C言語のexern宣言とごっちゃになりましたが、見ようみまねで、
意味も解らず、ビルドを通すためやっていました。
C言語として呼ばれる場合は、やはりextern "C"宣言が必要なんですね。
__stdcall/__cdeclの違いも良くわかりませんが、どっちが一般的/妥当なのかも
解らないので、両方で試してみて玉砕しているところです
参考になるかわかりませんが、以下dumpbin /exportsの結果です。
File Type: DLL
Section contains the following exports for test2.dll
00000000 characteristics
4ADACAC4 time date stamp Sun Oct 18 16:59:00 2009
0.00 version
1 ordinal base
2 number of functions
2 number of names
ordinal hint RVA name
2 0 00001000 DllMain = _DllMain@12
1 1 00001040 MakeUserModel = _MakeUserModel
Summary
1000 .data
2000 .rdata
1000 .reloc
1000 .rsrc
3000 .text
MakeUserModel、、いいんじゃないの? >__stdcall/__cdeclの違いも良くわかりませんが、どっちが一般的/妥当なのかも いやいやいや、呼んでる側に依存するだろう。 呼んでる側はバイナリのみで変更できない状況で、現在動作してるDLLと差し替え? 動作確認はどうやってて、ダメなのはどうやって知ったの?
>__stdcall/__cdeclの違いも良くわかりません EXPORT する関数は関数の頭に WINAPI ( = CALLBACK)をつける。 つまり __stdcall にする。
862 :
856 :2009/10/18(日) 17:36:02
>>860 さま
レス有難うございます。
Aに付属するcfgファイルを編集して、
ユーザー作成のDLLのファイルパスを指定しdllを読み込ませてます。
A起動時時に、MakeUserModelを呼ぶはずんですが、
以下のエラーメッセージが出てきてしまっています。
「E10181: ユーザ・モデル・ファイルをオープンできません。
1) 指定したユーザ・モデル・ファイルをオープンすることがでないか,MakeUserModel関数が存在しません。
ファイルの存在,およびファイルの属性とMakeUserModel関数の存在を確認してください。」
863 :
856 :2009/10/18(日) 17:42:11
>>860 ,861さま
VS2008c++の場合、デフォルトでは__cdeclのようだったので、そのままやってみて、
もしやと思い、861さまのおっしゃるように __stdcallに変えてやってみても駄目でした。
(よくわかっていないので、トンでもないことをやらかしているのかも知れませんが)
___stdcall/__cdeclに関してはマニアルに特に記述はなかったのですが、
あるとすれば、以下の項?ぐらいかと思います。
--------------------------------------------
1.2 インタフェースの方式
SM plus ユーザ・オープン・インタフェースでは,次に示すインタフェース方式を取っています。
1.2.1 C 言語インタフェース
SM plus ユーザ・オープン・インタフェースは,C 言語のAPI 関数注1 セットで構成されています。
このため,ユーザ・モデルのプログラミングはC 言語で行い,ターゲット・システムのシミュレーション環境
を構築してください。
注1 Application Program Interface 関数の略
http://www.necel.com/nesdis/image/U16907JJ1V0UM00.pdf P.15より
864 :
856 :2009/10/18(日) 18:17:22
質問に答えていただいているのに無礼な対応ばかりですいません。 一度整理しておきたいのですが、以下認識でよろしいのでしょうか? a) Win32DLLにてExportする関数は__stdcall をつけるのが一般的 b) 公開関数がC言語から呼ばれることを想定している場合、 Cリンケージの宣言にて全体をくくるか 拡張子cにてビルドをする必要がある
#ifdef __cplusplus extern "C" { #endif #include "suo.h" #ifdef __cplusplus } #endif
>>864 だから呼び出し規約は片方がリコンパイル不可能ならそっちに合わせるしかないって。
試しにMakeUserModelを呼ぶプログラム作ってもとからあるDLL呼んでみれば
あと、Dependency Walker は使ってる? それで既存のDLL、EXEや自分で作ったDLL、EXEを調べてみて
すみません Windowsプログラムで画面右上の「×」で閉じると Alt+F4や特定キーから呼び出すPostQuitMessage(0)を呼び出して終わった時と違ってアクセス違反が出てしまうのですが 画面右上の「×」って何が違うんでしょうか? またこの「×」の隠し方や、挙動の記述(変更)方法が有ればヒント(関数名など)を教えて頂けると嬉しいです。
>>868 変わらないと思うけど。
デバッガ使うかspy++で調べるとか。
通常消し方は、SYSMENU取得してSC_CLOSE消せば消える
At+F4も効かなくなるけど。
そんなことでアクセス違反が起きるわけがない。 バグじゃなかったらウイルスか何かにやられたと思った方がいい。
・・・Alt+F4も「×」も WM_CLOSE メッセージを送っているだけなんだが。 >Alt+F4や特定キーから呼び出すPostQuitMessage(0)を呼び出して終わった時 まさか、いきなりPostQuitMessage(0)しているけじゃあるまいなw
//タスクリストを指定しないnewとdeleteが呼ばれたときに //コンパイルエラーでぶちころすための関数 *void operator new(size_t t){} ん?size_tってなんだ? 定義へ移動・・・と。 「シンボル'size_t'は宣言されていません」 うそん。 調べてみたら、<cstddef>ヘッダで宣言されてるものらしいじゃないですか。 なんで定義へ移動できないの? こんな事が多々あるんですが、なんで定義へ移動できないんでしょうか?
#include <new>
>>871 あーなんかそんな気がしないでもないな。
WM_SYSCOMMAND → WM_CLOSE → WM_DESTROY → PostQuitMessage(0)
この順番になるのだけど、WM_CLOSEの時点でDestroyWindow呼ばないでいきなり
PostQuitで抜けたら、クローズボタンだと押したのを戻す描画をしようとしてアクセス違反が出るんじゃないかな
戻してからメッセージが発生するからそれはないか、マウスカーソルが乗ってるときのハイライト表示とかその辺か
試してみたけど、WM_CLOSE → PostQuitMessage( 0) してもアクセス違反は出ない。 おおかた、他人の家に土足であがりこんで (=無効になったポインタにアクセスしようとして) 叱られているのだろう。
>>869-871 >>873-876 >バグじゃなかったらウイルスか何かにやられたと思った方がいい。
IE使ってるとブルーバックしたり、ネットがやけに重くなったりするし、ありそうです;
>WM_SYSCOMMAND → WM_CLOSE → WM_DESTROY → PostQuitMessage(0)
そういう順序なんですね。ここらへん、勉強しないとマズそうです。
>無効になったポインタにアクセスしようとして 叱られているのだろう。
追記している内にこの症状が出なくなりましたが、
なんか不安なので、上の勉強と共にいずれOSアンインスコもしてみようと思います。
ありがとうございました。
ただ今Visual C++ 2008を使い、床井浩平先生のテクスチャマッピングという本に付属のプログラムを動かそうとしています。 ですが、未解決の外部シンボル〜 エラーがいくつか出たためプロトタイプ宣言をしたところ error C2556: 'double *trackballRotation(void)' : オーバーロード関数は、'double trackballRotation(void)' と戻り値の型のみが異なります。 とメッセージがでてしまいます。 double trackballRotation(void);とプロトタイプ宣言をしているため出たエラーだと思い、 double +trackballRotation(void);や double* trackballRotation(void);などと書き換えてみたのですが同様のメッセージが表示されて動きませんでした。 どのように直せばよいのか見当もつきません。
未解決の外部シンボルだから宣言してあるやつの実体が見つからないんだろ
そのサンプルにはmain.cppとtrackball.cppがあり、trackball.cpp内の関数が見つからなかったようでした。 ありがとうございます。 そのまま開くだけでは動かなかったため、自分で新しくプロジェクトをつくったことが原因でした。 main.cppをそのままvisual c++で開いて、F5キーですぐ動かせればよいのですが、そのような方法は知りません。
>そのような方法は知りません。 そりゃまあ、C/C++ はコマンドラインインタプリタじゃないんだから・・・。
C++インタプリタもどこかにあったような
すみません。質問です インクルードガードがうまくいきません 具体的には /*main.cpp*/ #include <stdio.h> #include "header.h" int main(void) { printf("x = %d\n", x); return 0; } /* func.cpp */ #include "header.h" void func(void){ x = 5;} /* header.h*/ #ifndef __HEADER_H__ #define __HEADER_H__ int x; void func(void); #endif この状態でxについてのエラーLNK2005と1169が出てしまいます 色々とぐぐったりして試行してみましたが解決には至らなかったため、 御教授頂ければと思います
>>883 /*main.cpp*/
#include <stdio.h>
#include "header.h"
int x;
int main(void)
{
printf("x = %d\n", x);
return 0;
}
/* func.cpp */
#include "header.h"
void func(void){ x = 5;}
/* header.h*/
#pragma once
extern int x;
void func(void);
/* func.cpp */ #include "header.h" int x = 0; // 初期化 void func(void){ x = 5;} /* header.h*/ #ifndef __HEADER_H__ #define __HEADER_H__ extern int x; // extern が必要 void func(void); #endif
886 :
デフォルトの名無しさん :2009/10/20(火) 07:18:43
64bit対応のプログラムを作るには商用版を買うしかないのでしょうか?
とも限らない
EEとSDK組み合わせてできるけど面倒
>>884-885 分かりました。どうもありがとうございます
実をいうと私は一度defineで定義したものは他のcppファイルをコンパイルする際にも
引き継がれた状態になっているという大きな勘違いをしていたため、
インクルードガードの用途さえ思い違いをしていた状態だったようです
しかし考えてもみればそれぞれのcppファイルを別個にコンパイルして
それらをリンカが繋ぐのですから当然のことですね・・・
なんでそれに気付かなかったんだろう
何はともあれ助かりました
どうでもいいですが私の書いたコード、mainでfunc使い忘れてますね・・・
>>889 まあな、
#defineは翻訳単位でのみ有効
ってことを覚えておきましょう。
質問です 例えば MessageBoxA と入力して、( 左かっこ を入力すると下にヒントが出ますが MessageBox では出ないのですが仕様でしょうか?
892 :
デフォルトの名無しさん :2009/10/21(水) 11:52:25
ちょっとおたずねしますが、VC6でwin7のプログラムも作れるのでしょうか? それとも買い替えするべきでしょうか?
・無理でしょう。 ・いえ、先ずは2008ExpressEditionを試してみてはどうでしょう。
>>894 ありがとう
今やったら出た(???
でも CreateWindowA は出るのに CreateWindow は出ない?
#define しているものは出にくい というのは仕様
CreateWindow は単なるマクロで、引数を取る 関数マクロ や 関数 じゃないため。 #define CreateWindow CreateWindowA のように定義されてる。 だから CreateWindow と入力してから少し経って 引数を取る CreateWindowA と解釈されて CreateWindowAに対応する補完のヒントが出たりするというわけ。 (もしかしたら出ないかもしれない) MessageBox や CreateDirectory でも同じ。
898 :
891 :2009/10/21(水) 13:15:59
899 :
デフォルトの名無しさん :2009/10/21(水) 22:34:42
Win7に対応したVCを購入しようと思うのですが、どのバージョンがお勧めでしょうか? しばらく次のVCが出るまで待った方が良いでしょうか?
6に決まってる
次のバージョンって来年の3月だろ? ビミョーな時期だな。
ベータ2が公開になったことだし暫くはこれ使ってればいいのでは?
#include<stdio.h> int main(void) { double num; printf("小数を入力してください。\n"); scanf("%f",&num); printf("%fが入力されました。\n",num); return 0; } この簡単なC言語をVC++で実行すると入力した小数を正しく返してくれません Vi環境では正しく返してくれたのですがVC++は使って日が浅いためなにか問題 でもありますでしょうか?ご教授よろしくお願いいたします
%lf・・・・・・?
scanf("%lf",&num); scanf 使うな sscanf 使えと あれほど(ry
scanf使うのは習い始めのほんの一瞬だけなんだから許してやれよw
一番の問題は、printf()とscanf()の書式指定子に互換性が在るかのごとく書かれた入門書が溢れていることだな。
入門書 ww 日本だけの事情?
scanf_sとかsscanf_s使え
C++なら std::cin だろう
scanfってそろそろあぼんに登録すべきかな。
コンソール用のプログラムなんて書いたことないから、printf()もscanf()も使ったことがないw
printf()は神だと思っている
915 :
デフォルトの名無しさん :2009/10/23(金) 00:36:13
ビルド後、DebugまたはReleaseディレクトリに.exeが出来ません。 出来上がるのは「.exe.embed.manifest」の様なファイル達です。 どうすれば.exeが出力される様になるのでしょうか? VC++2008ExpressEditon プロジェクトの種類:Win32プロジェクト アプリケーションの種類:Windowsアプリケーション
プロジェクトディレクトリじゃなくて、ソリューションディレクトリのDebug or Releaseフォルダにあるんじゃね?
>>915 通常は何もしなくても作成される。
出力ウィンドウにエラーメッセージが出てないか?
918 :
デフォルトの名無しさん :2009/10/23(金) 01:11:35
>>917 エラーも警告もゼロです。
しかし、リビルド時に
1>LINK : 前回のインクリメンタル リンクで C:\Users\xxx\Debug\Sound2.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
というログが残っています。
>>916 指摘の通り、そこにありました。
ソリューションのディレクトリに出力されるのがデフォルトなんですか。
変更したいのですが、変更すべき項目が見当たりません。
リンカ>全般>出力ファイルにはプロジェクトディレクトリ\xxx.exe
となっているのですが。
919 :
918 :2009/10/23(金) 01:16:11
やや解決しました。 リンカ>全般>出力ファイルがこうなっていたので、問題ないと思っていたのですが、 $(OutDir)\$(ProjectName).exe C:\〜フルパスを指定したらプロジェクトディレクトリ内のDebugにexeが出力されるようになりました。 出力ファイル指定のマクロの名前にOutDirが自プロジェクトパスが正しく入っているのに何故・・・
>>919 リンカじゃなくて、構成プロパティ>全般>出力ファイル
921 :
918 :2009/10/23(金) 01:47:19
>>920 直しました。
exeはプロジェクト内のDebugに出力されるようになりましたが、
exeを実行すると一瞬画面が出てきてすぐ消えてしまいます。
プロジェクトでデバッグ実行すると、正しく動いているのですが、
exeで実行すると消えてしまいます。
何が違うのでしょうか・・・。
プログラムが終了した時点で、コンソールウィンドウが自動的に閉じるから。 ちゃんとコマンドプロンプトから実行してみ。
IDEのドッキングウィンドウの右上の三角印をクリックして出てくるメニューの フローティングってとこを押したらフローティングしたまま元に戻せなく なった(ドッキングできない)んですけど、元に戻すにはどうすればいいですか? VCEE2008です
すみません、自己解決しました メインメニューのウィンドウってとこから操作できましたorz
結構大量(種類だけが)のデータを扱っていて クラス(大分類).構造体(中分類).構造体(小分類) の3層構造で扱っています。 利用頻度は1秒間にint型に1000回アクセスする程度の負担なのですが、 3層になっていると1層で扱うより負担が極めて大きくなるなんて事は有りますか? 3層くらいなら気にする必要は無い負担なのでしょうか?
負荷は何層でも変わらないと思う
>>926 変わらないんですね。ありがとうございます。
k ケツ b バット hit ヒット
他の人が作ったクラスを見てみたら、 コンストラクタでクラスのメンバ変数とかポインタとかの最後に(0)ってつけたのを羅列してたんだけど、 (0)って何をしてるんですか?
kbhit() は getch() 等で非同期処理するためのものだぞ?
>>929 0(つまりNULL)で初期化だと思う。
見てみないと分からないけど。
>>931 基本型もコンストラクタを持つ
sttaic_cast<T>()的な
他のとこでも質問したのですが反応がないのでこちらでも質問させてもらいます コンパイルして実行するとAssertion failedという警告が出るのですが、 この警告の意味と、警告を出なくするためにすべきことを教えてください DXUTmisc.hの109行目、以下の部分で警告が出ています TYPE& CGrowableArray::GetAt( int nIndex ) const { assert( nIndex >= 0 && nIndex < m_nSize ); return m_pData[nIndex]; }
>assert( nIndex >= 0 && nIndex < m_nSize ); nIndex の値が 0 より小さいか m_nSize 以上のとき、カッコの中が FALSE となって 「Assertion failed」になる。 したがって、nIndexの値をチェックすべし。
937 :
935 :2009/10/25(日) 16:37:39
ありがとうございました 問題の行まで実行したとき、int nIndexの値は0でした int m_nSizeも0だったので、nIndex<m_nSizeの方で引っかかってるみたいですね protected: int m_nSize; // # of elements (upperBound - 1) こうなっているので、GetAtを呼び出す前にm_nSizeの値を増やさないといけないようです template<typename TYPE> HRESULT CGrowableArray <TYPE>::Add( const TYPE& value ) template<typename TYPE> HRESULT CGrowableArray <TYPE>::Insert( int nIndex, const TYPE& value ) DirectXでリストボックスを作るクラスを利用しようとしていたのですが、 これらふたつの関数でm_nSizeが増加するようなので、恐らくアイテムが入ってない場合 あるいはアイテム数より多い場所にインデックスがある場合にエラーを出すということだと思います
938 :
935 :2009/10/25(日) 16:39:03
あ、インデックスがマイナスの場合でした
>GetAtを呼び出す前にm_nSizeの値を増やさないといけないようです そりゃそうだろ。空のサイフからは1円も出てこんよ。まずは、金をいれなきゃ。
940 :
デフォルトの名無しさん :2009/10/25(日) 17:32:05
出力したtexファイルってどこに保存されてるんですか?
HDD
942 :
デフォルトの名無しさん :2009/10/25(日) 18:24:05
すみません。 今までMFCでちょっとしたツールを作っていたんですが、 VC++の.NET版で作ったやつは64bitでも動きますか? なんか、仮想マシンで動かすとか聞いたんですが・・
WOW64 があるから通常は動く。
VC++で作ったEXE/DLLは基本的に32ビット。 ただし、64bit版WindowsではWOW64により32ビットプログラムもそのまま動く。 64ビットのEXE/DLLを作りたければソリューション構成から設定する。 ただ、.NET 2002/2003は64ビット版コンパイラ・ライブラリなどが付属していなかったと思うけど。 仮想マシン云々は関係ない。VCで普通にMFCプロジェクトを作れば今まで通りの普通のプログラムになる。
945 :
942 :2009/10/25(日) 18:45:32
どうもありがとう。
>>943 今度から、そっちで作ってみます。
意味わかってんのかな
(笑)
>>942 の書き方だといろいろ解釈できるから答える方も大変だな。
なんとなく、今までMFCで書いてたけど.NET、つまりC++/CLIで書くと
64bit(ネイティブ)でも動かせるのか?と聞いてるような気がする・・・
64bitネイティブなのかどうかで答え方も変わってくるけど、
まあC++/CLIで1から書くならC#でいいしなあ
949 :
デフォルトの名無しさん :2009/10/26(月) 12:13:09
XP、VC2005を使っています。 MFCで CFileDialog を使用し、ファイルを選択。 GetPathName()を使い、パスを取得し、エディットボックスに表示する。 という部分を作ったのですが、 選択したファイルを開く(可視状態で。)方法がわからないので、教えていただけないでしょうか。 調べてみても、内部的にオープンするようなものばかりで、実際に開いてみるという部分のヒントが見つけられませんでしたので、 お願い致します。
開くって具体的に何がしたいの? CFileとか使うんじゃダメなのか。
>>949 CFile オブジェクトを構築して、CFile::Open() でファイルを開いて、CFile::Read() でファイルの内容を読み込んで、
最後に CEdit::SetWindowText() でエディットボックスに表示する。
ファイルをロック状態にしないなら、直後に CFile::Close() すればいい。
それぞれの関数の使い方は MSDN あたりを参照すべし。
952 :
949 :2009/10/26(月) 14:18:39
>>950 VCを1から始めているところで、
・ボタンを押すとファイルを選択出来る。
・→選択するとパスを表示する。
上記2点の拡張として、開くためのボタンを追加し、選択したファイルを開きたい。
と思ったので、本当にただ開きたいだけです。
>>951 ありがとうございました。
'CWnd::SetWindowTextW' : 1 番目の引数を 'const char [7]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
error C2660: 'CFile::Open' : 関数に 1 個の引数を指定できません。
error C2660: 'CFile::Read' : 関数に 1 個の引数を指定できません。
みたいなエラーと戦っていますが、もう少しやってみます。
>>952 だから“開く”の定義は何よ。Openするだけか。
その問題は、Unicodeのプロジェクト(デフォルト)に対して
マルチバイトのコードを書いたから。
その範囲だと、
"文字列"を_T("文字列")にするか、プロジェクトをマルチバイトにすればいい。
954 :
949 :2009/10/26(月) 14:37:24
>>953 わかりづらくてすみません。
"開く"は、例えば abc.txt を
マウスでダブルクリックして開かれる状態と同じ状態にしたいです。
現状は、abc.txtを選択し、 「C:\abc.txt」がエディットボックスに表示されている。
という部分を組んだ状態です。
そのエディットボックスにある 「C:\abc.txt」を開きたい
→マウスでダブルクリックして開いたのと同じようにしたい。
・・・です。
それは ShellExecute() を使う。
・・・おいおい。 結局のところ、 A: 自身のエディットボックスに選択したテキストファイルの内容を表示したい。 B: 選択したテキストファイルを、関連付けられたアプリケーションで開きたい。 の、どっちなんだよw
957 :
949 :2009/10/26(月) 15:41:06
>>955 ありがとうございました。
ShellExecute()で無事開くことができました。
目的に対して使用する命令をもっと覚えなければいけないと思っています。
まだMSDNの解説を読んでもいま一つ理解できない状態なので、
検索にひと苦労ですが、頑張ってみます。
ありがとうございました。
958 :
949 :2009/10/26(月) 15:48:46
>>956 上記で、ダブルクリックで・・・とやりたいことを書きましたが、
例えばデスクトップ上で abc.txt をダブルクリックして開く(普通に開く)
というニュアンスが伝えたかったです。
とすると、B・・・になるんですかね。
開く とただ単に表現してすいませんでした。
そこまで初心者が今からMFCで1から始めているのが信じられない。 無料で手に入れた2005にMFCが入ってただけなんだろうけど
960 :
949 :2009/10/26(月) 17:07:15
>>959 開発職なのですが、業務を効率化するためにVCをでツールを作りたいというのが目的で始めました。(自己啓発的な)
C言語を使う環境にあり、会社にあるVC2005をインストールしました。(自分は業務でCを使いませんが)
会社にVCを聞ける人がいないので、2Chで聞いている次第です。(汗)
世界的な名著、ペゾルドの「プログラミングWindows」の冒頭にもあるとおり、 MFCは優れたオブジェクト指向のモデルじゃないし ドキュメントアーキテクチャに縛られるので ライブラリ内部のコードが読めるレベルのプログラマでないと 逆に悪戦苦闘する羽目になる。 ペゾルドは社内プログラマや趣味のプログラマなら VBかDelphiを使ったほうがいいと書いているくらいだ。
> ドキュメントアーキテクチャに縛られるので だいぶ前からドキュビューは使わなくてもいいようになってる。
どきゅどきゅしてきた♥
>>962 俺がぶち当たるプロジェクトは尽く使ってないな>ドキュメントビューアーキテクチャ
これ、無駄じゃね?
こういう構造にしたいアプリってなかなかないよね?
上の人と同じでファイル関連の質問なんですが、 テキストファイルをバッファに読み込んだあと、 一行ずつ文字列に格納していくため、以下のように作ろうと思っています @バッファの終点に\0を追加 Astrchr(wcschr)でバッファの始点から\n(0x0D0A)を一文字ずつ検索 Bstrcpy(wcscpy_s)でバッファの始点からAで得たポインタから\nの分戻した場所までを文字列0に格納 Cバッファへのポインタを\nのひとつ先まで移動する DA〜Cをループ Ea バッファへのポインタとバッファの終点のポインタが一致したらループから抜ける Eb strchrがNULLを返したら、バッファの終点から\0を除いた場所までを文字列に格納してループから抜ける こんな感じで作ろうと思っているのですが、もっと簡単な方法はあるでしょうか?
>>964 同意。業務アプリだと、ダイアログベースで済む事が多いからな。
ドキュメントビューアーキテクチャを使うのは、開発ツールそのものを作るときぐらいだろうか?
>>965 簡単ってことならfgtes()使えば簡単になると思う。
C++でいいなら、getline()を使えばもっと簡単になる。
一気に文字列に読み込んでsplit()すればと思ったけど、
std::stringにもCStringにもsplit()ないみたいね。
ググればsplit()のソースがいっぱいでてくるから、それ
見てもいいけど。
>965 行単位で毎度コピーするの無駄だから 終端だけ書き替えてargvみたいな感じで扱う
まぁ、MicrosoftがWTLをリリースしたり 昨今、MFCに関する書籍が出回らなくなったり 世間的にはレガシーライブラリなんて呼ばれるようになったのも MFCの核であったドキュメントビューアーキテクチャが 一般的な用途ではあんまし役に立たなかった証左かもね。 VS2010でスタンダードエディションをなくす(MFCはProfessionalエディション以上となる)のも ExpressやStandardエディションですんでいたような個人、SOHOクラスのプログラマには MFCの需要がまったくなかったからかもしれん。
2バイト文字が回避できてるのか不安だよね
vector<CString>かvector<string>で返してくれる関数が用意されててもいいよね ホント使えないよね>汎用文字列クラス どの環境でもsplitに当たるもんは自分でこさえないといけない気がする
vector<wstring>で返してくれ
975 :
965 :2009/10/27(火) 01:46:33
>>975 その時点で簡単じゃねーし
その方法はやめちゃえw
>>975 そこには strtok( wcstok_s) 関数が次のトークンを探すためのポインタを放り込むから、
そのバッファを呼び出し側で用意してやる。
wchar_t* pszContext = NULL;
として受け皿を用意して、 &pszContext を関数に渡せ。
というか、
>>967 の言うように fgtes() を使ってテキストファイルから1行ずつ読み込んだほうがラク。
978 :
975 :2009/10/27(火) 03:14:28
ありがとうございます。なんとか表示できるようになりました。 fgets()を使って書き直す場合、最大読み込み数に工夫が必要そうですね。
>>978 改行文字で切り出したいだけならsscanf(fileBuffer, "%[^\n]", lineBuffer)って要領でもできるよ。
cout << "test" << endl; このテストという文字列をVisualStudioの「出力」の「デバッグ」部分に出力したいのですが、どのようにすれば良いのでしょうか?
つ [TRACE()]
>>981 TRACEマクロというものでしょうか?
どうも使えないみたいなのですが、これはMFCのどこかで定義されているマクロですよね?
プロジェクトを右クリック→構成プロパティ→全般→MFCの使用 標準 Windows ライブラリを使用する
これだけでは使用できないのでしょうか?
classの依存関係をどう解決していいのか悩んでしまったので教えてくらはい #include "ToolKitA.h" #include "ToolKitB.h" class small : public ToolKitB { public: small( ToolKitA* parent ); hogehoge(); fugafuga(); } class large : public ToolKitA { public: large(); void foo(); bool bar; } こんな風になっている時、つまりlargeでToolKitAクラスをオーバーライドしていて、 smallはToolKitAというクラスは知っているけど、largeというクラスは知らない時、 smallクラスの関数からlargeクラスの変数barを読み出したり、foo()関数を呼び出したい。 こういう事はできる?
できる。
ちょ・・・w どうやんのww
smallクラスにToolKitAのポインタを渡せば宜しい。 そのToolKitAのポインタは、当然ながらlargeインスタンスから得られる。
>>982 ::OutputDebugString();
>>983 >largeというクラスは知らない
意地悪しないで教えてあげればいい。
前方宣言、フレンドクラス・・・。方法はいくつかある。
988 :
983 :2009/10/27(火) 13:13:37
>>987 できたw
ありがとう
それにしてもこんな簡単に・・・orz
>>987 アク禁に巻き込まれて返答が遅くなってしまいました。
アウトプットデバッグストリングで目的の文字列が表示されました。
ありがとうございます。
MFCでTRACE使えないのはなにかおかしい。と思ったら、
>>982 >プロジェクトを右クリック→構成プロパティ→全般→MFCの使用 標準 Windows ライブラリを使用する
それはMFC使ってない。
windows標準ライブラリ=mfcだと思ってましたorz windows標準のライブラリというのはwin32APIの事ですか?
そう
なんてこったい。 ありがとうございます。
MFC使ってたらwin32APIも必ず使ってるわけだが
論点が判らないなら無理に参加しなくていいよ。
int i の値がどの範囲にあるかで条件分岐したいとき、 if (i < a){ //処理 return; } if (i < b){ //処理 return; } を繰り返すよりも簡単な方法はあるでしょうか? switchだと値が一致する場合にしか使えませんよね
処理を其々関数化してあるとしたら、こんなテーブルを作って舐めてもいいかも。 static struct { int lower; int upper; func_t func; } table[] = { {0, a, func1}, {a, b, func2}, };
>997 なるほど、簡略化できそうです ありがとうございました
クラスのメンバ宣言で、構造体の配列を宣言する場合、これでいいんでしょうか private: struct myStruct{ int a; int b; } param[40]; ヘッダーでこう宣言したのですが、コンストラクタでこの配列に初期値を入れようとするとうまくいきません param[0] = {0, 0};
コンストラクタで配列を初期化することはできないっぽいから代入するしかない
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。