★初心者にVisual C++を教えるスレ★ Part30
1 :
デフォルトの名無しさん :
2008/05/07(水) 23:33:53
2 :
デフォルトの名無しさん :2008/05/07(水) 23:34:50
3 :
デフォルトの名無しさん :2008/05/07(水) 23:35:24
4 :
デフォルトの名無しさん :2008/05/07(水) 23:36:02
7 :
デフォルトの名無しさん :2008/05/07(水) 23:39:53
自己解決しました...orz
2つの環境でうまくいかないのでおかしいなあと思っていたのですが、
1つ目の環境では32bit環境であるにもかかわらず64bitのライブラリをリンクしようとしていたミス
2つ目の環境ではmulti processorのライブラリを指定しているにもかかわらずsingle processorのライブラリディレクトリを指定していたミス
という非常にアホなミスで単にライブラリのリンクが失敗しているだけでした...
ご丁寧に呼び出し規約のことを考えていただいたみなさま、どうもありがとうございました。
dumpbinででてくるものが_付きでないものだから、呼び出し規約のせいじゃないかと思考が凝り固まってしまったのが敗因でした…
蛇足ですが前スレ
>>990-992 は自分じゃないですorz
みなさまどうもありがとうございました。
10 :
C++ :2008/05/08(木) 02:05:16
if(i<-1) { return; } だとコンパイル通るのに #define test (-1) if(i<test) { return; } だと if(i<test) でエラーが出るんだが何がいけないんでしょうか?
>11 どんなエラーですか? 見た感じエラーにはならないですけど。
VC++で開発しようと考えていて、開発環境で悩んでいます。 VC2003 Standardは持っていて、慣れていていい感じなんですが プロジェクトをシェアしようとすると、無償で入手可能なVC2005 Expressか VC2008 Expressがいいように思えます。 ・VC2005 Expressはりソースエディタがないらしいけど どうやってリソースを作成しているんでしょ? ・VC2008 Expressはマルチスレッドプログラムの デバッグができないらしいけど、あきらめるしかない? 作ろうとしているプログラムは、リソースも使うしマルチスレッドでもある。 おとなしく買えってことなのかな? 自分でStanadrdなりProfessionalなりを買うのはいいんだけど 自分しかメンテできないという環境はいやだなぁ、と思って相談しました。
デバッグは判らんが、リソースのコンパイルは出来るはずだけど。 仮にできなくても、リソースコンパイラはWindowsSDKに入ってた気がする。 RCファイルは自力で書かないといけないけど。
>>12 error C2143: 構文エラー : ')' が ';' の前にありません。
)つけてるのに出ます
わけがわかりません
>14 リソースに関しては、一回作れば済む話なので、あまり心配はしてません。 マルチスレッドデバッグは、これがないと厳しいな。 VC2003でマルチスレッドプログラムをデバッグしたときは、 ブレークポイントでちゃんと他のスレッドも止まってくれるのよね。
>15 testって定義が重複してたりしないかな? 重複しなそうな別の名前(testtesttestとか)に変えるとどう?
18 :
デフォルトの名無しさん :2008/05/09(金) 16:35:47
VC++のいい解説サイトありませんか? 色々検索してるんですがいいところがみつからなくて・・・ C言語のコンパイルの仕方がわかればいいです
コンパイルの仕方って・・・ 解説サイト以前の問題じゃないのか?
mingwはインストール段階で挫折して VC++ではどこで挫折するのかと思ったら コンパイルの仕方を質問してるってどんだけ〜
21 :
デフォルトの名無しさん :2008/05/09(金) 19:10:18
>>17 いろんな名前にかえましたが
やっぱり同じエラーです
プロジェクト作り直したりしてみましたが
だめでつた
Const int とかにすることにしました
ありがとうございやした
マクロ使うとエラーがわかりにくいといういい例だね。
初めまして。 なにを書けば意図が伝わるのか、要点がよくわからないのですが その辺りは指摘をお願いします。 では、質問させていただきます。 ダイアログにおいて[Microsoft Web Browser]という[ActiveXコントロールの挿入]を行いました。 すると、ダイアログにブラウザが表示されるのですがスクロールバーの消し方がわかりません。(縦横両方) スクロールバーの設定はいじれるのでしょうか? 色々検索し、スクロールバーを消す命令を見つけたのですが 記述してもなにも起こらず仕舞いです。 晒します。 BOOL CBROWSER::OnInitDialog() { CDialog::OnInitDialog(); m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); SetIcon(m_hIcon, TRUE); RECT Rect; GetWindowRect( &Rect ); ModifyStyle(WS_CAPTION|WS_SYSMENU|WS_BORDER|WS_DLGFRAME|WS_CLIPSIBLINGS,WS_MAXIMIZE,0); SetWindowPos( &wndTop, -1,-1, Rect.right-Rect.left, Rect.bottom-Rect.top, SWP_FRAMECHANGED ); ScreenToClient(&Rect); m_Web.SetWindowPos( &wndTop, Rect.left, Rect.top, Rect.right-Rect.left+1, Rect.bottom-Rect.top+1, SWP_FRAMECHANGED ); m_Web.EnableScrollBar(SB_BOTH,0); //これがそれらしいのですが・・・ return TRUE; } どなたかご存知であればご返答よろしくお願いします。
IE専用のコマンドじゃなかったかな?
25 :
デフォルトの名無しさん :2008/05/09(金) 21:08:36
0
>>25 1にしろということだと思って
m_Web.EnableScrollBar(SB_BOTH,1);
に変更しましたが変化なしでしたorz
バリバリの初心者ですが、データをtxtファイルから入力するときにそのtxtファイルをどのフォルダに入れればいいかわからなくて困ってます。 どなたかご教授を・・。
どこでもいい
>23 それ使えるのウィンドウのスタイルとしてスクロールバーを持っている場合だろうな
>>28 どどどどこでもいいんすか。
じゃあエラーが出るのは違う要因のようです・・・。
ありがとうござんす。
ファイル位置を絶対パスで指定しろ
Form1のボタン1を押す Form2のボタン2のEnableがtrueになる Form1のボタン1のEnableがfalseになる Form2のボタン2を押す Form1のボタン1のEnableがtrueになる Form2のボタン2のEnableがfalseになる これだけのことなんですが、動くソースがどうしても書けません。
>>29 そうなんですか・・・
ありがとうございます。
他の方法をあたってみます。
ソース載せたら回答つきやすいかも。
35 :
デフォルトの名無しさん :2008/05/10(土) 15:46:18
/EHsはどこで定義されていますか?
36 :
デフォルトの名無しさん :2008/05/10(土) 16:34:30
自クラスのプロパティを、外部クラスから取得、設定するために Setter、Getter のメソッドを用意しているのですが Setter、Getter 以外のメソッドで 自クラスから自クラスのプロパティにアクセスする場合も Setter、Getter を経由すべきなのでしょうか また、経由しないことでデメリット等はあるのでしょうか よろしくお願い致します
値の管理(上限・下限とか)を厳格にやりたいんなら、 経由すればいいし、パフォーマンス優先なら経由しなければいい。
>>37 なるほど、ありがとうございます
>>38 いま覗いてみましたが、
後半のほうでその手の話題になってますね、ちょいと読んでみます
ありがとうございます
>>36 自クラス内だから直接触ってもいと思う。
でも、特殊な操作が無くて、Setter、Getter使って困ることが無ければ使ったほうがいいんじゃないかな?Setter、Getterつかっておけば後からの仕様変更が楽ではある。
サンプルのソースとかをビルドする時に新しくプロジェクトを作りますが、 サンプルのソースがフォルダで管理されている時にVCでも同じフォルダ構成で管理したいのですが、 いっぺんに同じフォルダ構成にする方法ってありますか?
サンプルのディレクトリとファイル構成をそのまま sample.vcprojのFilterタグとFileタグに出力するスクリプトを書けばいいんじゃないかな
●6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
http://system-trading.jp/news/index.php?cID=3 [シストレFXグランプリとは]
クリック証券が提供するFXのデモ取引環境を利用して、システムトレードにチャレンジできるFX取引のグランプリです。
お客様ご自身で作成したシステムトレードの機能を評価する「シストレソフト部門」とトレード収益を競う「トレード部門」の2部門構成となっております。
●5月22日より登録受付開始、6月2日よりグランプリ開始の予定。賞金総額2000万円。
デモトレードの優勝者には賞金三百万円がプレゼントされます。
▼トレード部門
初期資産500万円で、デモ取引のトレード収益を競っていただきます。
●
http://www.fx-gp.com/about/ ▼賞金総額
■社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
>>42 ファイルを追加するようにフォルダを追加することは出来ないのですね。
具体的にはどうしたらいいんでしょう?
スクリプト書けないなら手でやった方が早い
スクリプトじゃなくても好きな言語でプログラム書けばいい
そうですか。。 とても量が多いのですが手でやってみます。
逆引きゲームプログラミングという本のサンプルプログラム↓
ttp://www.shuwasystem.co.jp/books/7980/1169-X/1169-X.html をBCC5.5ではなくVisualStudio2005でコンパイルしたいのですが、
〜番目の引数を 'const char [〜]' から 'LPCWSTR' に変換できません。
というエラーが数百と、
〜番目の引数を 'unsigned char [〜]' から 'char *' に変換できません。
〜番目の引数を 'const char [〜]' から 'unsigned char *' に変換できません。
というエラーが42箇所出てしまいコンパイルできません。
数百出たエラーはプロパティで マルチバイト文字セットを使用する にしてコンパイルしたら全て消えたのですが、
他の42のエラーもコンパイルの設定で回避できるようでしたらその方法を教えてください。
42箇所だけですので書き換える方法でもいいです。
error C2664: 'FontPrint' : 3 番目の引数を 'const char [15]' から 'unsigned char *' に変換できません。
FontPrint( 208, 160,"NOW GAME SCENE");
error C2664: 'ReadWaveFile' : 3 番目の引数を 'unsigned char []' から 'char *' に変換できません。
wave_size = ReadWaveFile( "..\\..\\data\\bgm00.wav", &g_WaveControllBGM->WaveFormat, g_WaveControllBGM->WaveData);
こういった箇所です。よろしくお願いします。
>>48 コンパイラの設定で回避できるか知らんが
できたとしても設定で回避するようなエラーではない。
手作業で修正するべき。
printf()で出力したファイルをテキストファイルに書き出すことってできますか?
できるけどスレ違い
>>50 コマンドプロンプトでリダイレクトして実行って話?
VS2005を使っています。 あるプロジェクトをデバッグしようとしたところ、そのアプリは 起動時に必要なディレクトリの存在チェックをしているみたいで プロジェクト内にはそのディレクトリが存在しないため、エラーに なって起動出来ませんでした。 そのディレクトリを作ってあげれば良いと思うのですが、プロジェクト配下に 作りたくないので、別の場所にアプリが必要とするディレクトリを作りたいと考えています。 この場合、アプリを起動させる時に、作成した別の場所のディレクトリをスタートアップ時の ディレクトリとして認識させる方法ってあるのでしょうか? 分かり難い説明で申し訳ありません・・・。
>>53 プロジェクトのプロパティのデバッグに作業ディレクトリって項目ないか?
それで起動時のカレントディレクトリは指定できるけど
>>53 デバッグの作業ディレクトリを指定すりゃいいんじゃないの?
>>54 >>55 おおっ!まさにこれです!
無事に起動する事が出来ました!
ありがとうございました!
Visual C++ 2008 Express Editionで、C言語の勉強をしたいのですが、 前スレで教えてもらったこの方法 --------------- [ファイル]->[新規作成]->[プロジェクト]->[Win32]->[Win32コンソールアプリケーション] プロジェクトを作る場所、プロジェクト名を決定し、[OK] [次へ]を選択し、[追加のオプション]で[空プロジェクト]を選択し[完了] デフォルトでは左に表示される[ソリューションエクスプローラ]のツリー内の[ソースファイル]を右クリック [追加]->[新しい項目]->[C++ファイル(.cpp)] 追加したいファイル名を入力して[OK]、拡張子まで書けば*.cにもできる。 で、ファイル内に以下のコードを記述する #include<stdio.h> int main( void ) { puts( "ググレカス" ); return 0; } [Ctrl + F7]でコンパイルする。エラーがなければ[F5]で実行。 すぐにコマンドプロントが消えるのは仕様。出力結果を残したいならば[Ctrl + F5]で実行すればいい。 [F7]でビルドする。 ----------------------- では、C++言語になってしまうようです。 C言語をやるにはどうしたらよいでしょうか。
VCでやれ
>>58 言われてみればそのとおりでした。
さっそくそっちをダウンロード&インストールしてきます。
#include <cstdlib> #include <iostream> #include <vector> using namespace std; struct test { test(): a( rand() % 10 ) { } int a; }; int main() { // コンストラクタの rand() が機能しない vector< test > t1(10); for ( vector< test >::size_type i = 0; i != t1.size(); ++i ) { cout << t1[i].a << " "; } cout << endl; // コンストラクタの rand() がちゃんと機能する vector< test > t2; for ( vector< test >::size_type i = 0; i != 10; ++ i) { test t; t2.push_back( t ); cout << t2[ i ].a << " "; } cout << endl; return 0; }
Visual C++ 2008 Express Edition ( Windows XP ) で上のプログラムを実行すると t1[ 0 ] から t1[ 9 ] まではすべて同じ値に t2[ 0 ] から t2[ 9 ] まではばらばらの値に なります。いったいが何がそうさせているんでしょう? どうも何度か試したところでは t1[ 1 ] 以降は 一つ前の要素の値をそのままコピーしているらしく たとえば test(): a( 0 ) { if ( 何がしかの条件 ) { a = 1; } } のようなコンストラクタを書いたとき 本来 0 にならなければならない要素にもかかわらず 直前の要素が 1 の時に 0 にならないケースが発生します。 test() { if ( 何がしかの条件 ) { a = 1; } else { a = 0; } } って書くしかないんでしょうか?
それVCというか普通のC++の範囲内だろ
>>61 再現する最低限のソースを作って張るんだ。
貼られた部分だけを見ると、引き数つきのコンストラクタがないからエラーが出そうなんだが。
ぱっと見、問題ないけどなあ うーん
コンストラクタでrandとか・・・
>>63 大丈夫、10はtestではなくvectorの引き数だ。
>>61 ディフォルトコンストラクタは最初の一回だけ呼ばれて、後はコピーコンストラクタしか呼ばれない。
つーか、実験目的ならrand()なんか使わずにclock()でも使っておけよ。
>>66 clock()だと間に合わないみたいねw
--
[foo@Corvus tmp]$ ./a.out
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
--
ってことで、こんな風にしてみた。
--
static int staticCounterForDefault;
static int staticCounterForCopy;
struct test
{
int a;
test() : a(++staticCounterForDefault) {}
test(const test & foo) : a(++staticCounterForCopy) {}
};
--
では問題、実行せずに出力結果を予測しなさい。
# って、厳密には実装依存なのかな。
正直スレ違い
69 :
67 :2008/05/12(月) 10:38:27
しまった、すっかりC/C++スレかと。正直すまんかった。
>>61 ってことで、納得できなければ続きはC/C++スレ辺りで。
71 :
デフォルトの名無しさん :2008/05/12(月) 12:58:44
BEGIN_MESSAGE_MAPマクロですべてのイベントを同じ関数に飛ばして、その中で処理を分けたいのです。 それで次のようにOnProcが処理関数だとすると、ID_CMD_1,.....,ID_CMD_100に対応するID番号を OnProcに知らせてやれば出来ると思うのですが、どのようにIDを取得するのかわかりません。 よろしくお願いいたします。 BEGIN_MESSAGE_MAP(CXXXX, XXXXX) //{{AFX_MSG_MAP(CXXXX) ON_COMMAND(ID_CMD_1, OnProc) ON_COMMAND(ID_CMD_2, OnProc) ON_COMMAND(ID_CMD_100, OnProc) //}}AFX_MSG_MAP END_MESSAGE_MAP()
ON_COMMAND_EX
73 :
デフォルトの名無しさん :2008/05/12(月) 17:39:21
出来ました。ありがとうございました
あるフォームから別のフォームを開いて その別のフォームにある変数を渡したいのですがどうすればいいでしょうか
C++/CLIの話?
76 :
74 :2008/05/12(月) 21:09:47
VC++の話です。
1. 別のフォームの開き方は分かるけど、変数の渡し方が分からない。 2. 変数の開き方はわかるけど、別のフォームの開き方が分からない。 3. どっちも分からない。 4. その他のことが分からない。 さあどれだ?……と、聞き返さなくて済むよう初めから詳しく書け。
78 :
74 :2008/05/12(月) 21:27:50
大変申し訳ないです 別のフォームを開いてそのフォームの中で元のフォーム内の変数を使いたいのですが、 元のフォームから別のフォームを開く際に別のファイルのヘッダをインクルードしているので、 別のフォーム上で元のフォームのヘッダをインクルードできなくて、 そのような状態でどのように変数を渡してやればよいのかがわかりません。
その、1個か2個なら単純に渡すための関数作って引数で渡せばいいんじゃないの?
80 :
74 :2008/05/12(月) 21:56:29
すみません 渡すための関数が思い浮かびません。 引数で渡せるのであれば、その引数をどうやって渡すかが思い浮かびません。
>>76 一応言っておくけど、VC++ってのは言語名じゃなくて
MSの開発ソフトの名前だぞ。
>>80 自分でそういう関数を作ればいいだけのこと。
83 :
74 :2008/05/12(月) 22:30:33
引数で渡す関数を作れ ⇒その関数の引数はどこから持ってくるの? ⇒そういう関数を作れ (・д・)
84 :
74 :2008/05/12(月) 22:35:08
メインのcppでint passをローカル定義して メインのcpp内で void set_pass(int j){i=j;} int get_pass(void){return i;}として 最初のフォームでset_pass(渡したい変数)実行して、 次のフォームで 受け取る変数 = get_pass() でOK?
テキトーなインターフェースクラスでも作成して、継承してしまえば?
87 :
デフォルトの名無しさん :2008/05/13(火) 01:22:21
拡張子がcppだとc++ cだとcでは
88 :
デフォルトの名無しさん :2008/05/13(火) 01:23:27
つか、C言語をC++でコンパイルしてもほとんど出来る。mainのvoidとかがちょっと違う
>>87 >>59 ですが、
>>57 の方法だと
>[追加]->[新しい項目]->[C++ファイル(.cpp)]
のC++をCに変えればいいのか…と思ったらCファイルが選択できないようなのです。
90 :
デフォルトの名無しさん :2008/05/13(火) 01:29:39
C言語はC++コンパイラでコンパイル出来ますよ CPPでC言語出来ます
拡張子を、.cppから.cにするんだよ。
>>92 手動で変更するということでしょうか?
してみましたが、
コンパイルやビルドしようとするとエラーが出ます…
エラーが出るならエラー内容を張る!
ってかさ、
>>57 にも書いたんだけど、「拡張子まで書けば*.cにもできる。」ってあるじゃん?
ついでに・・・
猫に書いてあるプログラムが規格に完全に準拠しているなんて思わない!
すべてのコンパイラが規格通りの挙動を正しく行うなんて思わない!
猫に書いてあるプログラムが全てのコンパイラで通ると思わない!
あ、解決しました 一つのソースファイルに複数のCファイルやC++ファイルをいれていたためエラーが起こっていたようです。 ご迷惑をおかけしました。
>>94 >エラーが出るならエラー内容を張る!
次回からはそうします…
すいませんでした
>ってかさ、
>>57 にも書いたんだけど、「拡張子まで書けば*.cにもできる。」ってあるじゃん?
あああああ
完全に見落としてました…
すいません
>ついでに・・・〜
ややこしいのですねぇ…
ありがとうございました
>>83 だって自分のプログラムなんだから渡したいデータは自分で用意できるはずだろ。
>>97 近くに郵便局が無くて荷物を郵送できない人に
なら郵便局まで荷物を郵送すればいいじゃない
最近VC6をさわり始めました。 いま、ダイアログベースでピクチャボックスの画像を[印刷]ボタンを作って印刷しようと思っているのですが、どうにも仕方がわかりません。画像は表示できています。 印刷できるようにするにはどのようなプログラムを組めばいいのでしょうか? よろしくお願いします。
sdiだったらデフォルトで印刷機能が組み込まれてたと思うから それを参考にしてダイアログベースに実装する
ブレークポイントを設定するとそこで止まるわけだけど、 beginthreadexで作ったスレッド内でブレークポイント設定すると 停止したと同時にOSも固まるのはどうにかなりませんか?
別にフリーズせんけど 別のバグでIMEとかインテリセンスがらみでフリーズはあるけどそれじゃね?
コンソールアプリとして開発したソフトを 気が変わって(ウィンドウを使いたくなったので)通常のアプリにしたくなったんですが 最低限どこを書き換えるといいでしょうか? 単純にmainをWinMainに書き換えるだけだと不十分でした。
105 :
デフォルトの名無しさん :2008/05/16(金) 22:47:37
かなり買えないと無理
106 :
デフォルトの名無しさん :2008/05/16(金) 22:48:08
Windows-PCを買ったけどMacにしたくなったのでロゴだけを張り替えましたが不十分でした。
たぶん1から作り直した方が早い
109 :
デフォルトの名無しさん :2008/05/16(金) 23:18:13
>>105 、108
ダイアログ程度のウィンドウを表示したいだけなら,
"windows.h"をインクルードして,CreateDialog()でも
呼び出してダイアログを作ればよいだけ。
もっと本格的に作りたいなら,プログラムの構造から見直す必要が
あると思うので、105,108の言うように最初から作った方が
良いと思うよ。
110 :
105 :2008/05/16(金) 23:34:08
ありがとうございます。 結局1から作り直し(といっても90%コピペ)しました。
111 :
デフォルトの名無しさん :2008/05/16(金) 23:34:21
112 :
デフォルトの名無しさん :2008/05/17(土) 00:10:22
すみません。家にVisualC++6.0というのがインストールしてあって 兄貴の猫でもわかるWindowsプログラミングという本をやりました。 で、大体どのようなものかわかったのですが、 今日本屋でその続編で猫でもわかるネットワークプログラミングという 本をみつけましたが、第2版とかかれていまして、VisualC++.NET対応と書いてありました。 これは、VisualC++6.0では無理でしょうか?中身はWindows32APIを使うものでして、MFCは無しみたいです。 どうか、よろしくお願いします。
113 :
デフォルトの名無しさん :2008/05/17(土) 00:12:29
Managed C++とかC++/CLIとか.NET Frameworkとかいうキーワードが書いてあったらできないかもしれない でもWinSockとかを使うだけだったらVC6.0でもいけるよ
114 :
デフォルトの名無しさん :2008/05/17(土) 00:14:28
>>112 いまはVisualC++2008(バージョン9.0)が無料配布されている。これ入れればよい。
115 :
デフォルトの名無しさん :2008/05/17(土) 00:16:01
116 :
デフォルトの名無しさん :2008/05/17(土) 00:25:15
Expressをインストールして勉強しています。 クリップボードを監視したくて情報を探していたのですが、 ・SetClipboardViewerという関数でクリップボード監視を開始する。 ・SetClipboardViewerという関数はStanderdEditionを買わないと入らない MFCまたはATLが無いと使えない。 と解釈しました。 質問ですが、 上記解釈は正しいでしょうか。 何か別にMFCですとかATLをわざわざ経由しなくても 上記関数と同様のことをしている関数があったりしますでしょうか。 VC++だけのためにVisual Studio買いたくない(´・ω・`)
117 :
デフォルトの名無しさん :2008/05/17(土) 00:25:49
>>113 そうですか。ありがとうございます。とりあえず、買ってきます。
本当にありがとうございます。
>>114-115 同一人物の方ですか?わざわざリンクまで張っていただき
感謝です。一応、それもダウンロードしてみます。
ありがとうございました。明日、本屋いってきます。
ちなみに、Visual C++ .NETには2002と2003とあって、それぞれ7.0と7.1に相当する。 この頃のMS製品はなんでも.NETとつけるのが流行だった。
ウエ・ミロ(2003〜)
>>116 SetClipboardViewerはATLもMFCも関係ない、ただのWindowsの関数。
2005ならWindows SDK入れてVCと統合しろ。
2008なら使えないのはなんか設定がおかしいだけ。
121 :
デフォルトの名無しさん :2008/05/17(土) 00:31:23
>>120 取り急ぎ、感謝申し上げます。
2008です。いろいろと設定を見てみます。
122 :
112 :2008/05/17(土) 00:36:16
>>118 どうもありがとうございます。色々あるんですね。
今のVer.2008が9.0っていうのもわかりました。ぐぐったら色々でてきました。
>>119 ねこでもわかるのホームページがかいてありますね。。すごいソースですね。。
徐々にやっていきます。ありがとうございました。
visual studio 2008のWindowsフォームアプリケーションで作成中です。 ドラッグ&ドロップでファイルのパスをtextBoxに表示しようとしてるのですが,上手く行きません。 検索して見つけたのがlistBoxだったので,↓のように変えてみたのですが・・ private: System::Void textBox_DragEnter(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) { if(e->Data->GetDataPresent(DataFormats::FileDrop)) e->Effect = DragDropEffects::All; else e->Effect = DragDropEffects::None; } private: System::Void textBox_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) { String^ s = (String^)e->Data->GetData( ::System::Windows::Forms::DataFormats::FileDrop, false); textBox->Text=Path::GetFileName(s); } これでファイル名が表示されると思ったのですが,なにも表示されません。 どこがいけないのがご教授願います。
2005Express+PlatformSDKでクリップボードをアレコレできるよ。 俺作ったことあるし。
125 :
デフォルトの名無しさん :2008/05/17(土) 01:01:02
>>120 ありがとうございました。
Windowsの関数とおっしゃられたので
Includeディレクトリgrepしてみたら
WinUser.h内に宣言らしきものがあったので
それをIncludeしてるWindows.hをForm1.hに
Includeしてみたら関数を認識するようになりました。
(.cppにIncludeしても認識しないんですね。。。)
ちょっと引数と戻り値の型合わせがうまくいきませんで
コンパイルは通りませんが、関数が使えることがわかって
大きく前進しました。
本当にありがとうございました。
>>125 Form1.hとか言ってるし、もしかして.NETかぁ?
あと、Windowsの「関数」じゃなくてAPIな。
>>126 Help見たら「Microsoft Visual Studio 2008」って書いてあるので
.NETではないと思います。
「2008だけど、.NET」っていう状況があるんでしょうか。すみません。無知で。
状況がわかりやすいようにデフォルトのForm1って名前に置き換えて
わざわざ書いてしまいました。
自分の解釈がおかしいことがしばしばあるもので。。。
ああ、すいません。xxに関する便利な公開された関数をまとめて
xxAPIっていうものだと思ってました。
勉強することが多すぎますね。
今日は本当にありがとうございました。
>>127 Windowsフォームアプリケーションは、
.NET Frameworkを使うアプリケーション。
参照設定しているライブラリ(C#/VB.NETなら
プロジェクトのプロパティの設定)の種類によって、
実行には.NET Framework 2.0/3.0/3.5のいずれかが必要。
Visual Studio 2008に.NETがつかないのは、単にMSの戦略の問題。
APIって関数がまとまったものの名称だから Windowsの関数と言っても問題なし。
インターフェースと関数は違うだろ
正式な言い方はWin32APIだろうな。 またWin32APIには関数だけじゃなくて型の定義なども含まれると認識している。
.netで作られたアプリを実行するには ユーザが.net Frameworkを用意しなくちゃ行けない でも、そういうのを用意できるユーザってどのくらいいるのよと
商品名に.netがつかなくなっただけで中味は今まで通り.net対応 MSとしては.netを一押ししたいから無償配布のExpressなんかは デフォルトだと.netのプログラムを作るようになっている
>>133 Windowsユーザーのほとんどだろうね。
論理的には導入できるけど .net?なにそれ?ってインストールもできない初心者がいて困る ってことを言いたいのかと思われ インストールできるけどヘンなランタイムとか要らないから却下 とかいう自称玄人もいるから困るといいたいのかと思われ Vistaなら標準で3.5入ってるってから期待してたんだけど あの体たらくだしなぁ
updateで自動的に.NET入らないんだっけ?
>>137 商用アプリの顧客は必ずしも、自動updateに任せっ切りじゃないからなあ。
仮想化とか、ローカルストレージ無しの方向に行ってるんで、今後の大規模.NET
アプリはサービス提供の方向と踏んでる。
VBも最初はruntimeの絡みで滅茶苦茶な評価だったことを思い出せば、OSの 世代交代さえ順調に進めば.NET FRAMEWORKの配布は問題じゃなくなるんだろう。 ただね、肝心のOSの世代交代がね。どうもね。 MSがVISTAへの交代より.NET FRAMEWORKへの移行を重要と位置づけて、SPで .NET FRAMEWORKとSuper Fetchを配っちまえば話は早いのにと思わないでもない。
その辺コミコミのVistaだろ ま、失敗してるが
142 :
デフォルトの名無しさん :2008/05/20(火) 18:52:41
すみません。VisualC++6.0でコンボボックスを使用しているのですが、 リソースエディタでコンボボックスを右クリックしてプロパティで 項目の入力っていう欄があるんです。そこに項目を並べたいんですが、 どのようにならべればいいんですか? 並べたいデータは、 北海道、本州、四国、九州、その他 の5つです。 よろしく><;
コード書かなあかんよ
沖ノ鳥島を忘れないであげてください
ちゃんと竹島(日本領)も入れとけよ。
つ 南樺太&千島列島
質問です VC++2008で、親フォームから呼び出した子フォームを非アクティブにする方法で ShowWithoutActivation を使うと良いと言うのは分かったのですが、プロテクトプロパティなので、簡単に 変更が出来ません。 変更の仕方or別の方法、を教えてください
子フォームを実装しているクラスでパブリックに実装するとか。 とりあえずリフレクションとか。 というか、C++/CLIだよな?
ええと、なにぶん知識が浅いので ^ と * ←を使い分けや gcnew をつかってるのでC++/CLIのはずです
150 :
デフォルトの名無しさん :2008/05/20(火) 23:29:33
○青春のスポーツテスト準備編 場面は中学2年時。僕は運動音痴だ。 明日はスポーツテストだ。僕はみなに押し付けられて、学校の授業後に ライン引きをやっていた。僕のほかには女子のヤンキーぽい生徒が2人だ。 なぜ、こんな連中が仕事をしているかと思えば、退屈だし面白そうだから という話だ。 50m走のラインを引き終えると、ヤンキー女子の2人が走ってみようと言い出し2人は走っていた。「あ〜、つかれた〜」といいながら座っている。でも満足げだ。 しばらくすると、「おい、おまえも走れよ!」といいだし、ぎゃあぎゃあ騒いでいる。 僕は運動音痴なので走り方もおかしいからひどく嫌だったが、後がこわいので走ることにした。 よ〜いどんで思い切り走ってみる。しかし、女子2人は大声で笑い転げている。 僕は必死で走ろうと思えば思うほど、フォームが乱れるのがよくわかる。 どうしようもなく恥ずかしい。。しかし、次の瞬間転んでしまった。 女子2人は寄ってきて僕をからかう。そのとき、思春期にありがちな突如の勃起が襲ってきた。 どうしようもなく半ズボンがテントを張っている。 「キャー、こいつ何?興奮してるの?言葉攻め?」 僕はもうどうしようもなく恥ずかしかった。しかし、女子はすでになんらかの経験済みらしく、 慣れている様子で「おい、どうしたんだよ?」とかいいながら僕のナニをけったりしてくる。 僕はとまどいながらも恥ずかしさをぐっとこらえていた。 その後も「運動は音痴だけど、こっちはすげえじゃん」とかいってぎゃーぎゃー騒いでいる。 その後、10分くらいたって、あきたのか笑いつかれて2人は帰っていった。 僕は恥ずかしさと何がなんだかわからないままドキドキしてしょうがなかった。もう何もかんがえるどころではなく、ただうろたえるだけの時間だった。 2人が帰った後、ようやく帰ったかと自分を取り戻す事ができた。しかし その直後、ドクドクしたものが出てきた。僕の初射精だ。その後もあわてたことはいうまでもない。
fatal error C1083: include ファイルを開けません。'iostream.h': No such file or directory このエラーが出てコンパイルできません。どうすればいいか教えてください。 バージョンはVC++ 2008 EEです。 後、一応参考になりそうなサイトで調べてVC++のディレクトリに下記のパスを追加している状態です C:\Program Files\Microsoft Visual Studio 9.0\MSDN Express Library コンパイルしようとしているソース #include <iostream.h> void main() { char ss[80]; cout << "何か入力してください"; cin >> ss; cout << "入力は[" << ss << "]です\n"; }
152 :
デフォルトの名無しさん :2008/05/20(火) 23:36:21
すみません。今日も質問させてください。 visual c++ 2008 Expressでwindowsフォームアプリケーションを作成しています。 ビルドしたexeを他の人のマシンで起動しようとすると、 >このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。 と出て起動できませんでした。 色々調べた結果、以下のとおり解釈しました。 @visual studioがインストールされていない環境で動かすには 静的リンクでコンパイルする必要がある。 Awindowsフォームアプリケーション(でデザイナからレイアウトしているような場合) では静的リンクは不可能 Bwindowsフォームアプリケーションでしかデザイナは使えない Cデザイナが使えない場合、手打ちで「上からxピクセル。。。」と コーディングしていくしかない 質問ですが、上記解釈は正しいでしょうか。 ほんのちょっと上のレスでそれらしいやりとりが見受けられましたが、 自分の思っているソレの話のことなのか、いまいち自信がないので、 ご回答のほどよろしくお願いします。
>>151 そのサイトは残念ながら参考にならない。
そのソースは古くて、現代C++では通用しない。
#include <iostream>
int main()
{
char ss[80];
std::cout << "何か入力してください";
std::cin >> ss;
std::cout << "入力は[" << ss << "]です" << std::endl;
}
>>152 フォームアプリケーションなら相手のPCに.NET Frameworkを入れればいけるはず。
VS 2008だから.NET Framework 3.5だ。
たとえデザイナを使わなかったとしても、
.NET Frameworkを使うC++/CLIアプリケーションである限り
静的リンクはできない。
それにVSが無い環境で使えないなんて使い物にならない機能が
わざわざ用意されているはずがない。正規の手順でランタイムを用意すれば、
VSがない環境でもVC++プログラムは実行できる。
VC++初心者です。 GUIの部分は、.NET Framework を使って書いて、 内部的な(例えば)通信の部分は、Win32API で書くってできます? できたとしたら、それは邪道ですか?
全然問題ない。 むしろそういうことができるのがVC++の強み。
>>156 ありがとうございます。
そうですか、楽できるとこは楽したかったんです。
MFCも少し勉強し始めてたんですが、中断して C++/CLI の方をやります。
158 :
デフォルトの名無しさん :2008/05/21(水) 00:08:45
>>153 ありがとうございます!コンパイルできました!
本が古すぎたんですね・・・たしかに今見たら98年出版の本でした
後せっかくなので参考にお聞きしたいんですが、追加記述された std:: と std::endl;っていうのは
なんなのでしょうか?最初は変数の前に付けるものといった、約束事みたいな感じで覚えておけばいいのでしょうか?
98年と言えばISOでC++標準が最初に出た年。 endlは結構古くからあったと思うけど、 '\n'の出力に加えバッファのフラッシュを行うもの。 だから時と場合によって\nを直接使うこともある。 どっちにするかはケースバイケース。 std::は名前空間という機能によるもの。 詳しく知りたければ、ググってもいいし、最近の本なら書いているだろうし。
なるほど、とりあえず最近の本買ってみます 親切にありがとうございました!
>>161 その程度ならググれ。
良い本を探すのは難しい。
163 :
デフォルトの名無しさん :2008/05/21(水) 12:01:42
visual studio 2005のWindowsフォームアプリケーションで作成中です。 文字列の分割がうまくいきません。 String^ data0 = "a/b/c"; wchar_t separator = '/'; array<String^>^ data1 = data0->Split(separator, StringSplitOptions::None); 結果的には配列data1にdata0の要素を格納したいのですが、このやり方ではうまくいきません。 どなたかご教示願いませんでしょうか?
>>164 ご指摘ありがとうございます。
無事解決しました。
VC2003 を使っています。 STLのvectorを参考に、自前のクラスにイテレーターっぽい機能を付けてみようとして、 行き詰まっています。 以下のようなコードを書いているのですが、begin() がインライン展開されません。 vectorのbegin() はインライン展開されているみたいで、何が違うのか分からないです。 class B { public: A* aa; class iterator : public std::iterator<std::random_access_iterator_tag, double, ptrdiff_t, double*, double> { A* a; public: iterator( A* _a ) : a( _a ) { }; ~iterator( void ) { }; }; B( void ) : aa( NULL ) {}; ~B( void ){}; iterator begin() { return( iterator( aa ) ); }; };
>>167 まさか何の最適化オプションも指定していないなんてことはないよな。
170 :
デフォルトの名無しさん :2008/05/22(木) 10:59:46
VC++2008EEでツールチップを表示するにはどうしたら良いのでしょうか。 ググってもMFCのCToolTipCtrlしかヒットしません。 例えばステータスバーに収まり切らない文字列を表示したいのです。 .NETで例えるなら statusStrip1.ShowItemToolTips = true; に相当する処理です。
172 :
デフォルトの名無しさん :2008/05/22(木) 15:30:07
>>171 ありがとうございます、取敢えずツールチップを表示する事は出来ました。
MFCの解説もエミュレートしているものは参考になりました。
まだステータスバーの位置のみで表示出来ませんが、もう少し頑張ってみます。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
static HWND hTooltip;
static TOOLINFO ti;
switch (msg)
{
case WM_CREATE:
InitCommonControls();
hTooltip = CreateWindowEx(0, TOOLTIPS_CLASS, NULL, TTS_BALLOON, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, g_hInst, NULL);
GetClientRect(hWnd, &ti.rect);
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = TTF_SUBCLASS;
ti.hwnd = hWnd;
ti.lpszText = L"ツールチップのテスト";
SendMessage(hTooltip, TTM_ADDTOOL, 0, (LPARAM)&ti);
SendMessage(hTooltip, TTM_SETTITLE, TTI_INFO, (LPARAM)L"タイトル");
SendMessage(hTooltip, TTM_SETTIPBKCOLOR, (WPARAM)RGB(221, 238, 255), 0);
(後略)
173 :
デフォルトの名無しさん :2008/05/22(木) 17:05:34
visual studio 2005のWindowsフォームアプリケーションで作成中です。 textBoxに入力制限をさせたいのですが、やり方がわかりません。 パスワードを入力するときみたいに、入力された文字が強制的に半角英数字になるように 設定させるにはどうしたら良いのでしょうか? どなたかお願いします。
変化があったタイミングで読んで変換する
>>173 プロパティのPasswordCharの項目に*
176 :
175 :2008/05/22(木) 17:48:21
ああ、半角英数字か・・・ ゴメンゴメン。忘れて
IMEをOFFにするか自分でキー入力読む
作りたいプログラムがあり、何か言語を習得しようかと考えています 過去にまともなものをプログラムした経験はほとんどなく HSPでぷよぷよの模写を遊びで作ったことがある程度です 言語としてはCOBOLやC++をかじった程度ポインタなどは概念を踏まえて あるていど辞書を引きながら書くことはできます。 プログラムに関する技量などは自分で調べたりしながら向上させていこうと思っているのですが 何を本格的に勉強しようか悩みTurbo DelphiかVC++で行こうと考えて とりあえずVC++2008無償を入れてみたのですが 初めて扱う上に初めての開発環境でソフトの機能や基本的な使い方を習得するだけで挫けそうです VC++の勉強サイトなどをみても2008の環境で説明されている所が見つけられず 新規ファイルを作る段階でさえCLTとWin32の詳細な意味を調べてテンプレート形式もそれぞれ調べて… 書こうと思ってもサイトで提示されている項目が無いたびに色々調べたり プログラムを書く時間よりもやりたいことをする手順なんかで悩んでる時間のほうが長いです 開発環境2008で勉強できるところは無いでしょうか_| ̄|○ il||li
何を作りたいの? HSPでぷよぷよ作れたなら結構スキルはあるんじゃない?
おとなしくVC++2005とかBC++にしておけば? 今なら腐るほど解説ページあるぞ
対象ウィンドウ内の詳細なデータを調べて 仮想でウィンドウの模写的なもの(できるだけの機能を残して)を作ることは出来ないかなと ただ深く追求していくとプロセスメモリへのアクセスなどクラックの分野になってくるのかな?と思って… CでもC++でもDelphiでもjavaなんでも他に使いやすい初心者向きのテキストエディタあるやろって話なんですが 覚えたころにはもう使われてませんでしたでは話にならないのでVc++にしようかなぁ…と… ごめんなさい取り説よめでFAでしたね_| ̄|○ il||li
182 :
178 :2008/05/22(木) 21:12:22
↑178です
>>180 レス感謝 win32API使うならCやC++がよさそうなので他のバージョンなりなんなり探してきます
そしておとなしくします!
さようなら2008 ( ´・ω・`)ノ~
物凄く不適切な回答を見た。
VC++2008EEとVC++2005EEってそんなに違うものなの?
両方使ったけど、ほとんど何も変わってない。
186 :
デフォルトの名無しさん :2008/05/22(木) 23:40:54
すみません。今Win32API勉強してるんですが、 WM_INITMENUが呼ばれるタイミングっていうのはどういうタイミングで呼ばれるのですか? たとえばWM_PAINTは、Windowが隠れたりして再描画が必要なときに呼ばれるみたいですが WM_INITMENUの呼ばれるタイミングがわかりません。 よろしくお願いします。
いえいえこちらこそよろしくお願いします。
>>169 Releaseビルドでやってるっす。最適化オプションはO2ですね。
vectorのヘッダーを丸ごとコピーして適当に名前を変えてクラスにしたら、
ちゃんとインライン展開されてるようで。どこがキーなのか分かりません。
189 :
186 :2008/05/23(金) 00:07:38
すません。ぐぐったら出てきました。 自己解決です。スレ汚しすません。
190 :
173 :2008/05/23(金) 00:35:01
>>177 IMEをDisableにしたら狙った通りに動いてくれました。
ご指摘ありがとうございました。
>>188 templateでかけば普通インライン展開されるんじゃなかったけ
VC++2003EEとVC++2005EE は結構違うよね
エンタープライズだろ
なんだ2005よりインストール楽になってるじゃないか
これで挫折するんじゃ救いようがないな
http://ja.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B Visual C++ 2008 Express Edition
Visual C++ 2005 Express Editionに続き2007年12月18日から公開されている。
ATLやMFCが付属しない点はVisual C++ 2005 Express Editionと同じであるが、
Windows Platform SDKが標準で同梱されるようになり、
Win32アプリケーションの開発に必要なWindows SDKを別途用意する必要がなくなった。
・言語の仕様 ・Windowsの仕様 ・IDEの使い方 結局これらがわからないとダメなんじゃない?
2005と2008だと、細かなところで2008の方が使いやすいな。 俺はInteliSenceで隠れたところがCtrlキーを押すと半透明になるのが一番 便利だな。
VC++2005AE購入・インストール済みで、2008EEを入れたんですが、 VC++2008版のATL・MFCは、2005の時のものと大きな差がありますか? 2008EEから2005のMFC・ATL使うと何か弊害が考えられるでしょうか?
ライセンス的にどうなのよ
201 :
デフォルトの名無しさん :2008/05/23(金) 16:25:09
VC++2008EEでウィンドウを作成した際にタイトルバーのアイコンが正常に表示されず困っています。 例えばIDI_ICON1と言うアイコンをWNDCLASSEX構造体で WNDCLASSEX wc; (中略) wc.hIconSm = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1)); などと指定しても、実際に表示されるのは吹き出しの中に"?"が書かれたアイコン(TTI_INFOと同じ)になってしまいます。 色深度に制限があるのかと思い24bitカラーのアイコンを使ったり実行ファイル用のアイコンをそのまま指定したりもしましたが症状は改善されません。 何が原因でしょうか。
>>201 LoadIcon の仕様を確認するんだ。
1つめの引数NULLはWindows標準のアイコンだぞ。
203 :
デフォルトの名無しさん :2008/05/23(金) 17:13:43
>>202 確かめてみたら追加のアイコンはインスタンスハンドルを指定するんですね…見落としていました。
4bit透過色使用アイコンは作成するソフトによっては色抜けしなくなるようです。
GIMP2で漸く色抜けするアイコンが作成出来ました。
本当にありがとうございました。
204 :
デフォルトの名無しさん :2008/05/23(金) 18:02:03
Windows XP、 visual studio .NET(ver2003)でCを勉強し始めたものですが コマンドライン引数を指定するようなプログラムのソースを書いて実行しても ファイル名の指定がありません Press any ker to continue と出て、うまく行きません。 どうしたらいいですか?
プロジェクトのプロパティのデバッグにコマンドライン引数の指定できるとこないか?
>>204 デバッガの使い方の話だよね?
プロジェクトのプロパティの「デバッグ」→「動作」→「コマンド引数」が、
デバッガが動かすプログラムに与えられるコマンドライン引数。
デバッガで動かしてるんじゃないなら、コマンドライン引数を与えてあげてください。
207 :
デフォルトの名無しさん :2008/05/23(金) 18:11:07
>>204 それはなあ、おまえのパソコンがハング恩してるんだよ
208 :
デフォルトの名無しさん :2008/05/23(金) 18:28:18
>>205 >>206 コマンドライン引数を指定する場所は見つかりました。
当のプログラムが、コマンドライン引数で指定したテキストファイルの内容を表示するプログラム
何ですが、引数はテキストファイルの絶対パスでいいんですか?
いや、、、それを決めるのは君のプログラムでしょ
210 :
204 :2008/05/23(金) 18:36:28
こういうプログラムです。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) { printf("ファイル名の指定がありません\n"); exit(1); } if((fp = fopen(argv[1], "r"))==NULL) { printf("ファイルを開くことができません\n"); exit(1); } if((fp = fopen(argv[1], "r"))==NULL) { printf("ファイルを開くことが出来ません\n"); exit(1); } while((ch==fgetc(fp)) != EOF) putchar(ch); fclose(fp); return 0; }
絶対パスでも相対パスでもいいよ。 カレントディレクトリがどこかわからないなら、とりあえず絶対パス入れとけば。
212 :
204 :2008/05/23(金) 19:09:13
>>211 絶対パスでやっても
ファイル名の指定がありません
となるんですが
>>212 ひょっとして hoge c:\(途中略)Program Files\xxx の様になってないか?
上記例だと、"Program" と "Files\xxx" の間の空白がパラメータ区切りとみなされて
argc=3になってしまう。
まず argc の値を出してみろよ。 っつーか、VC++使ってんならそのままブレークポイント置いてargvの中身見てみろよ。
うまくいかない→質問 じゃあ進歩しないぜ
216 :
デフォルトの名無しさん :2008/05/23(金) 22:29:09
>>204 あれだ!そのプロジェクトと同じフォルダにテキストファイル置いてるか?なら、相対パスでOkだ。
それか、C:\に適当にテキストファイル作ってたとえば、C:\test.txtだったとすると
それで、hoge C:\text.txtってやってみな。それで表示がおかしかったら、if(argc!=2) ←これがおかしい。
argc!=1じゃないのか?なんでargc!=2にしてあるのかよく知らんけど。そこは、コマンドライン引数の個数をかくんだから
1個しか実行プログラムに引数を与えないなら、argc!=1ってしなきゃならん。
まあ、初心者のうちはそうやって七転八倒しながら覚えるって紋だ!!!!!!!!!
がんばりな。俺も、最初はコピー&ペーストすらしらないような人間がプログラムをやろうとしてたんだ。
いまじゃ、7年目で色々できるようになった。まあ、あれだ。がんがれ。
>argc!=1じゃないのか?なんでargc!=2にしてあるのかよく知らんけど。そこは、コマンドライン引数の個数をかくんだから >1個しか実行プログラムに引数を与えないなら、argc!=1ってしなきゃならん。 いやいやいやいやいやいやいや
Express Edition には、リソースエディタがないようですが、 これってなくて大丈夫なんでしょうか?
リソースファイルを全部手書きしないといけないってだけで、プログラム事態には支障はない。 可能か不可能かってのなら可能。リソースコンパイラはWindowsSDKにも入ってるから。
220 :
218 :2008/05/24(土) 02:54:55
>>219 なるほど、そういうことですか。
じゃあ、書き方さえ分かってればいいわけですね。
ありがとうございました。
221 :
デフォルトの名無しさん :2008/05/24(土) 10:13:58
Windowsアプリ作るにはWTLがないと氏ねるそうですが、VC++2008EEでWTL8.0を使おうにもアプリウィザードに組み込めません。
アプリウィザードを使わなくてもWTLは使えますか?
またWikipediaの解説を見るとATLがないとWTLは使えないようですが、これはWindows SDK for Windows Server 2008 and .NET Framework 3.5に含まれていますか?
選択画面を見る限りなさそうですが…。
因みに当然今は全てWin32APIでゴリゴリ書いています。
>>220 ResEditおすすめ。
IDEに関連付ければソリューションエクスプローラからダブクリで呼び出せるよ。
Unicode版もあるし。
ttp://www.resedit.net/
>>221 そんなオサレ気なものなくたって、Win32APIがあればまだ5年は戦えるね。
ATL7.1がWDKの方に入ってるよ。
ちなみに、setup80x.js内の8.0を全部9.0に置き換えて実行すれば、 2008EEでも、WTLのウィザード使えるよ。
226 :
221 :2008/05/24(土) 16:50:33
>>222-225 ありがとうございます。
取敢えずヘッダーとx86ライブラリをインスコしてからJScriptのファイルを書き換えて実行し、ウィザードが正常に動作する事を確認しました。
しかしその生成されたコードをそのまま実行してみたら、
fatal error C1083: include ファイルを開けません。'atlbase.h': No such file or directory
となってしまいました。
WTLとWindows SDKのインスコ先を見てもatlbase.hはありません。
WinSDKでまだ何か足りないものがあるのでしょうか。
だからWDKに入ってるつーの。
228 :
デフォルトの名無しさん :2008/05/24(土) 18:31:23
すみません。Win32APIっていうのを勉強してるんですが、文字列変数というか char型の配列名にszなんたらかんたらっていう変数名が多いです。たとえば szClassName[] とかszText[]とか。。szってなんですかね?? あと、int型の整数を宣言するだけで、初期値を代入せずにいきなり使ってるんですが、 こういうのってありなんですか?なんか、大昔C言語を勉強したときはint i=0;と初期化してからじゃないと コンパイルエラーが出た覚えがあるんですが。。 すみませんが、おしえてちょんまげ。
>>226 Windows Driver Kit
http://www.microsoft.com/japan/whdc/DevTools/WDK/WDKpkg.mspx サインインはいるが、Microsoft Connect Web サイトから無料で、isoイメージをダウンロードできる。
インクルードファイルパスに、"(DDKフォルダ)\inc\crt\atl71"
ライブラリファイルパスに、"(DDKフォルダ)\lib\atl\i386"を追加。
ExpressでのWTLウィザードは、そのままだとATL3.0用になるので、
stdafx.hの中の
#define _WTL_SUPPORT_SDK_ATL3
をコメントアウト。
なぜかATL7.1は、atlthunk.libがライブラリ指定されてないので、
リンクでエラーが出るなら、
リンカの追加の依存ファイルに、atlthunk.libを付ける。
いちいち、書き換えるのが面倒だったら、
WTLテンプレートファイルの方のstdafx.hを書き換えるか、
default.jsの
// Use ATL3 from SDK for VS2005 Express
の項をコメントアウトするといい。
// Linker settingsのところに、
LinkTool.AdditionalDependencies="atlthunk.lib";
で、atlthunk.libをリンク指定できる。
中途半端でほったらかしなWTLなんか使うより、
ATLだけでゴリゴリやった方がいいと思うけどね・・
>>228 szはsが文字列、zがナル文字終端を表す。
いわゆるシステムハンガリアンというやつ。詳しくはググれ。
初期値を書かない変数は、あとで使うときに代入しているはず。
うっかりその代入を忘れたときには、
下手に0などで初期化しておくよりも、未初期化のままのほうが検出しやすいとされる。
そのため、(Win32プログラムに限らず)Cでは、
むやみに0初期化するべきでないというのが最近の傾向のはず。
もちろん、適切な値で初期化できるときはするべき。
未初期化変数はバグの温床だから、できればないほうがいい。
231 :
228 :2008/05/24(土) 18:44:44
>>230 どうもありがとうございます。よくわかりました。sが文字列でzがナル文字なるほろ。。
初期化についてもよくわかりました。
本当にどうもありがとうございました。
こんなところで聞かなくても 電話かメールで問い合わせできるはず
234 :
デフォルトの名無しさん :2008/05/24(土) 21:35:42
すみません質問なんですが、VC++で、 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e){ double A,B,C; A = double::Parse(textBox1->Text); B = double::Parse(textBox2->Text); C = A + B; textBox3->Text = "答えは" + Convert::ToString(C) + "です"; } こんなプログラムを作ったのですが、textbox1と2に何も入れないでボタンをクリックすると エラーが出てしまいます。textbox1と2に0をあらかじめ代入する方法も試したのですが、見栄えが悪いので、 何も数字が入力されていないとき、「入力してください」などのダイアログを表示する方法を教えてください。
>>234 textBox1->Textが""ならdouble::Parseしないで、
入力を求めるMessageBoxでも表示すればいい。
>>232 実際に何かやろうとすれば、
メールアドレスとか住所氏名を入力する欄が現れる。
237 :
234 :2008/05/24(土) 23:21:55
>>235 素早い回答ありがとうございます。
if(textBox1->Text == ""){MessageBox::Show("数字を入力してください");}
else{A = double::Parse(textBox1->Text);}
if(textBox2->Text == ""){MessageBox::Show("数字を入力してください");}
else{B = double::Parse(textBox2->Text);}
こんな感じで出来ましたが、結局Cを計算しようとしてしまいます。
Aが入力されていない時点で、プログラムを停止させることは出来るのでしょうか?
>>237 全然内容読んでないけどAが入力されていなければexitすれば良いんじゃないかな?
240 :
デフォルトの名無しさん :2008/05/24(土) 23:59:21
>>239 return 0; でやってましたw
大変参考になりました。また機会があればご指導お願いします。
すみません、とあるライブラリを使用してプログラムを組んでいるのですが、 _ASSERTを使おうと思ったら LNK2019: 未解決の外部シンボル _CrtDbgReport が関数 "void __cdecl ほにゃらら"(ちょめちょめ)で参照されました。 というようなリンクエラーが出てしまいました。 crtdbg.hはインクルードしてます。 ためしに新規で作成してみたプロジェクトでは_ASSERTが使えました。 何が原因なのでしょう? エラーの詳細内容を読んでも理解できませんでした。 ライブラリを使用する際にリンクの追加など、 プロパティを何箇所か変更しています。 環境は Microsoft Visual Stdio. NET 2003 です。
原因は分からないけど、リンクの問題っぽいから リンクの設定をうまくいったのと同じにしたら?
>>241 ランタイムライブラリがデバッグ版になってないんじゃないの?
C/C++→コード生成
244 :
241 :2008/05/25(日) 14:57:31
>>242-243 レスサンクスです。
>243
>ランタイムライブラリがデバッグ版になってないんじゃないの?
まさしくこれでした。
プロパティをいじっている時に構成を「すべての構成」にしていたので、
ランタイムライブラリをマルチスレッドに変えた時にも
リリース版のマルチスレッド設定にしてしまってました。
ありがとうございました。
245 :
デフォルトの名無しさん :2008/05/25(日) 16:54:36
eMbedded Windows CE Visual C++を入れたら
「Virtual PC/Windows CE エミュレータ」で、 Windows が不安定になるのが発生します。
ってメッセージが起動のたびに出るようになって、修復する方法を書いてあるページを見つけたんですが、
ttp://support.microsoft.com/kb/891667/ja 日本語の意味が分かりません。ここの解決方法をどなたか翻訳してください。
boot.iniに/executeオプション足せ、って書いてある。
C++を最近始めたんですが、何度プログラムを組んでも言葉の意味がなかなか分からなくてこのままで大丈夫かなぁと思っています。 最終的にはゲームを作ることを目標にしてるんですが、このままで大丈夫でしょうか…不安で仕方がないです。
ある画像A.bmpと、その背景にあたるB.bmpが別々にあって、 A.bmpを上に、B.bmpを下にして1枚の絵に表示させる といった内容のモノを作りたいのですが(画像処理?)何か参考になるソース、もしくはHPがあったら教えていただけませんか?
単純にB,Aの順番で描画すればいいんじゃない?
すみません、質問は「リストのインデックスが範囲を超えています(0)」というエラー が出るのですが。この(*)の*の数字の詳細が知りたいのですが。(-1とか6とかいろいろある) よろしくお願いします。
だから板違いだっつーの。
なんだ 同じかww
引数のところで書かれてる__outの目的がよくわかりません。 OUTというマクロはプリプロセッサで無かったことにされてるみたいですが・・・ 検索してみても、日本語で解説してあるページを見つけられませんでした。 どなたかお願いします。
日本語で質問お願いします。
エスパーすると、その引数のところに結果を返しますよ ということをプログラマに知らせるだけの記号。
>>254 __outは/analyzeオプション用
258 :
デフォルトの名無しさん :2008/05/29(木) 00:35:26
すみません、教えてください。 win32環境で作ったVC++プロジェクトをマネージ環境に移行するためにはどうすればいいのでしょうか。 .NET用プロジェクトを作ってソースを1つずつ移していくしかないのでしょうか?
ctrl+a
260 :
デフォルトの名無しさん :2008/05/29(木) 23:15:29
質問です 2008VC++で、GetWindowTextWで取得したCStringをdoubleに変換したいのですが、うまくいきません コードの書き方を教えてください
どう書いて、どううまくいかなかったのか書け。
GetWindowTextW→CString→doubleのどの段階でうまくいかないのだ? CStringよりもstd::stringにしとけ
263 :
デフォルトの名無しさん :2008/05/29(木) 23:50:39
double AA,BB,CC; CString str,AAA,BBB,CCC; GetDlgItemText(IDC_EDIT1,AAA); GetDlgItemText(IDC_EDIT2,BBB); AA = atof( (const char*)AAA.GetBuffer(0)); BB = atof( (const char*)BBB.GetBuffer(0)); CC = AA + BB; CCC.Format(_T("%f"),CC); str = CCC +_T("が表示されます。"); SetDlgItemText(IDC_EDIT3, str); こんな風にしたんですが、EDIT1に11.11、EDIT2に22.22を入力すると "3.000000が表示されます。"と表示されてしまいます
うにコードで(const char*)がマズイ
265 :
デフォルトの名無しさん :2008/05/30(金) 00:07:49
すみません。何度も申し訳ありません。質問させてください。 自作のdllを遅延読み込みしたいのですが、 「LNK2001: 外部シンボル xxxx は未解決です。」となってしまいます。 具体的な手順が理解できなくて、 以下の手順でやってるんですが、何か勘違い、抜けなどありますでしょうか。 @dllはexeが作成されるディレクトリに先に作成されます。 Adllの関数のプロトタイプを列挙しているヘッダファイルを、 exe側でプロパティでパスを追加した上でincludeする。 Bリンカの「遅延読み込み」に自作のdll名を入れる Cexe側で「LoadLibrary(dll名)」を行う Dexe側でdll内の関数を呼び出す。 よろしくお願いします。
遅延読み込みはスタティックリンク LoadLibraryはダイナミックリンク
267 :
デフォルトの名無しさん :2008/05/30(金) 00:35:27
268 :
デフォルトの名無しさん :2008/05/30(金) 00:53:42
>>266 ありがとうございます。
ヒントを頂き、ちょっと調べてみました。
@LoadLibraryを消す
A「追加の依存ファイル」に xxx.lib を追加
B呼び出し側「#pragma comment」とかする必要がありそう
⇒"遅延読み込み"モードだからいらない???
C肝心の.libが見つからない
⇒それくらいはどうにか自分で解決します。。。
早めに間違い・勘違い指摘いただけましたら
すごく助かります。。。
270 :
デフォルトの名無しさん :2008/05/30(金) 10:47:51
VC++ 2005 を利用しています。OS は XP Pro SP2 です。 次のコードを書くと、Debug ビルドでは問題なく動きますが Release ビルドでは アプリケーションが強制終了することがあります。なぜでしょうか? // ゼロでクリアされた構造体を用意する関数 template < typename T > T zeroStruct() { T t; memset( & t, 0, sizeof( T ) ); return t; } void main() { A a = zeroStruct< A >(); // A は構造体の型 }
>>268 dllをスタティックにリンクするにはdllimportを使う。externだけじゃ呼べないよ。といってみる。
自作dllを作ったならdllexportを使ってると思うからその逆の使い方だ。
またmemset()厨か。
>>270 それだけの用途なら、そんな滓みたいなテンプレート関数作る必要なんてさらさらないじゃん。
A a = {0}で充分。
274 :
270 :2008/05/30(金) 13:52:27
>>273 A a = {0} なんて書き方があったんですか。ありがとうございます。
わざわざ関数呼ばずとも、こちらを使った方が断然良いですね。
CHAR chStr[128];
wsprintf(chStr , "インスタンスハンドル : %d" , hInstance);
MessageBox(NULL , chStr , TEXT("Kitty on your lap") , MB_OK);
http://wisdom.sakura.ne.jp/system/winapi/win32/win5.html これやると
'MessageBoxW' : 2 番目の引数を 'CHAR [128]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
っていわれるんだけど・・。なんか昔やってたソースを2008でやろうとしても同様にエラーがでる・・。
関数にcharのlong pointerの引数があったらそこに単純に"abc"ってやってもpointerわたしてるんだよね?
作者じゃないから TCHAR じゃなくて CHAR を使う意図がわからない 下の方ではTCHAR 使ってるし
だからそんな間違いや過去の遺物だらけのサイトで勉強しちゃダメだって。
初心者には良いか悪いか分からないし(´・ω・)
VC++ 2008で、windowsフォームアプリケーションのスケルトンを作成したところ、 LRESULT CALLBACK WndProc(HWND, UINT , WPARAM, LPARAM){ } みたいなメインループ部分が見当たりません。 メインループさせたい場合、どのように書けばよいですか?
とりあえず、.NET Frameworkについて勉強しようか。
>>279 Win32アプリケーションのプロジェクトを作ればいいと思うよ。
charとかLPSTRとかstrcmpとかstrcatとか_atoi_sとか C#から入ってきたので文字列周りの処理が死ぬほどムズイ 文字列処理に特化して説明してるHPとかありませんか
ソース読んでデバッガでトレースすれば理解できるよ
lexical_castで。
285 :
デフォルトの名無しさん :2008/05/31(土) 00:34:25
VBAの処理時間短縮のためVC++でDLLを作って処理させようと思ってます。 VC++はいじったことないのでお勧めの書籍あるいはURL等ありましたら 教えて貰えませんか。
リソースキットツールってのは必要なの?
gccの拡張機能のweakシンボルと同等のことを VCでするにはどうすればよいでしょうか?
2008なんですがコマンドラインからの引数を受け取って 動作をデバッグするにはどうしたらいいんでしょう? 具体的には int main( int argc, char** argv ){ の引数をいろいろ変えながらデバッグしたいんですが・・・。
と、思ったんですが、すごい勢いで解決しました。 すごいよMSDNむすどんむすどん。
Thumb.dbのフォーマットを解説してるサイトとかって存在しますか?
294 :
デフォルトの名無しさん :2008/06/01(日) 23:59:57
VC++ 2005 でsprintfを使うと警告が出るのですが。 sprintf(msg1,"%d:%s",no,str); 警告 1 warning C4996: 'sprintf' が古い形式として宣言されました。 c:\_将棋\fj-sai\fai001\fai001\メッセージ送信1.cpp 33 この警告を出さなくする方法ありませんか?
日本語ファイル名かよw
>>294 #pragmaで抑制できたはず。
詳しくはググれ。
>>294 sprintfを使わずに、boost::formatを使う。
>>291 メニュー[プロジェクト] -> プロパティ -> デバッグ -> コマンド引数
を変更すればおkなはず。
面倒なときはイリーガルだけど、
#ifdef DEBUG
char* argv_[2] = { "application", "" };
argc = 2;
argv = argv_;
#endif
みたいにでばっぐしてみればどう?
303 :
MFC始めて2日目 :2008/06/02(月) 10:42:54
ファイルの読み込みをやろうとして void CDeepPurpleDoc::Serialize(CArchive& ar) { CString ss; // CEditView は、すべてのシリアル化を処理するエディット コントロールを含んでいます。 reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar); if(ar.IsStoring()) { ar << ss; } else { ar >> ss; } } 既存のテキストファイルを開こうとしたら 予期しないファイル形式 というエラーが出た。 シリアライズってなんだ?
スピンボタンの値を取得するサンプルならそこらじゅうにあるだろ
>>304 Bの下、Cの下、それぞれのスピンボタンの値を取得し、それらを加算してから文字列に変換し、
Aの下に直接書き込むか或いはAの下に配置したスタティックテキストを書き換えれば宜しい。
シリアライズってのは、「専用形式」で「なるべく簡単に」 オブジェクトを保存・読み込みする、みたいなコンセプト。 そこいらにあるファイルをデシリアライズするのは大変。
>>271 遅くなりましたが、今、無事できました!
コンパイルもリンクもうまくいき、
ちゃんとdll内の関数も呼び出せました!
本当に、ありがとうございました。
CStringってすごいな。これを使えば2バイト文字の扱いが楽だな。 これはMFCなのか、ATLなのか。
今は共用になってる
311 :
MFC始めて3日目 :2008/06/04(水) 14:32:28
void CDeepPurpleDoc::Serialize(CArchive& ar) { reinterpret_cast<CEditView*>(m_viewList.GetHead())->SerializeRaw(ar); BYTE* pByteBuff; CEditView* pEditView = ((CEditView*)m_viewList.GetHead()); if(ar.IsStoring()) { CFile* pFile = ar.GetFile(); UINT size = (pEditView->GetEditCtrl()).GetWindowTextLengthA(); pByteBuff = new BYTE[size + 1]; UINT len = (pEditView->GetEditCtrl()).GetWindowTextA((LPTSTR)pByteBuff,size + 1); pByteBuff[len] = 0; pFile->Write(pByteBuff,len); } else { } delete pByteBuff; } とやってファイルに書き込むと2回書き込まれる。 MFCがなにかやってるのか。
SerializeRaw したあと同じものを自分でも書いてんの?
313 :
MFC始めて3日目 :2008/06/04(水) 15:07:56
SerializeRawの1行を削除したらエラーになった。 (ソースコードの else の行に矢印がついてプログラムがストップ)
314 :
MFC始めて3日目 :2008/06/04(水) 15:16:44
うまくいった。
(313 はデバッグの機能が働いただけだった)
>>307 >>312 ありがとう。
VC++使い始めて間もないのですが、質問させてください 現在MSVC++2005ProのMFCを用いてソフトを作ろうと考えております 一次元での温度分布をグラフィック表示するものを作ろうと考えていて 物体の二点の温度を入力した際に、その間を一次関数的に温度が増減すると仮定した上で その温度分布をモノクロの色の濃さで表現するようなものを作りたいと思っています このようなグラデーション表示を描画するためにはどのようにすればよいのでしょうか? よろしくお願いいたします。
static void CALLBACK TimerProc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2){} の中で、同クラス内のフィールドを参照したい場合どうすればいいの? ふつーに参照しようとすると、 関数呼び出しには引数リストがありません。 って言われるんだけど・・・
非staticメンバにアクセスしたいなら、クラスのインスタンスをどうにかして得る。
そのためのDWORD dw1とDWORD dw2
使用環境VC++2008 Expressで、win32コンソールアプリケーションのプロジェクトです 下記のコードをビルドして実行すると点数の表示が-184563みたいに変な数字になってしまいます どうすればちゃんとしたのを作れるでしょうか? Visual Studio 2008 コマンドプロンプトからコンパイルすれば思ったとおりの結果になります #include<stdio.h> int main(void) { int score; printf("点数を入力してください:"); scanf_s("%d",&score); if (score > 100) score = 100; printf("あなたの点数は %d 点です。"); return 0; }
printf("あなたの点数は %d 点です。",score);
324 :
デフォルトの名無しさん :2008/06/05(木) 20:28:29
CStringってATLでも使えるようになったんだ MFCじゃなくてもOkになってたとは
>>323 CALLBACK関数には、クッキーと呼ばれる自由に使っていいパラメータが用意されている場合が多い。そこにインスタンスのポインタを乗せて渡したりする。
textBoxに内部処理で得たchar型の2次元配列を表示させるにはどうしたらよいのでしょうか? textbox->text = 配列変数名 だと型がcharをstringにできないとコンパイルエラーが出てしまいます。 環境は.Net2008です。 よろしくお願いします。
>>326 どんな風に出したいのか詳細に決めたら、一気にプログラムを書く
328 :
326 :2008/06/05(木) 22:42:30
今思いついたんですけど、 ループで1文字ずつstring型変数に入れて文字列にしてからtextBoxに 入れるしかないんですかね?
整形しなくてよければまとめて出せるだろ 文字列だって配列なんだし
そもそもなんで二次元配列なんだよ
331 :
326 :2008/06/06(金) 01:07:32
読み込むデータが最大64個で 4ビット区切りの16進数が12個並んでるからです。 EE000FF00002みたいな。 それをテキストボックスに1行ごとに表示させたいんです。
VC++っていうよりも、C/C++の話なのかもですが。 自作のクラスを.cpp/.hで作って、 それらのファイルをプロジェクトには追加せずに、 .hをインクルードするだけで使うことはできませんか? イメージは、stdio.hをインクルードしてprintfを使う、みたいな感じで。 ツール→オプション→VC++ディレクトリ、でパスは通してあります。 宜しくお願いします。
ライブラリにする
全部hに書けばいいじゃんw
>>332 printfと同じようにするなら
>>333 のいうとおりライブラリにする
ついでに、pragmaいれとけばlibのファイル名指定はいらなくなる
適切な場所にlibをおく必要はあるが。
VC++で作ったexeファイルをネットワークドライブに置き、 繋いである他PCから起動するとエラーが発生します。 HDDにコピーせず直接起動させるのにはどうしたら良いでしょうか? パソコン自体に設定するのではなく、ファイル自体に設定したいので よろしくお願いします。 エラー内容 問題が発生したため、.exeを終了します。 ご不便をおかけして申し訳ありません。
ここって何でも相談室だっけ?
>>333 >>336 ありがとうございます。
やっぱりライブラリにするべきなんですね。
なるべくならライブラリにはしたくなかったんですが、
とりあえずその線で行くことにします。
>>339 答えられるものだけ答える側が判断して答えればおkなんじゃないの?
遠まわしにスレ違いを指摘してやってるだけだろ
MinGWにて作成したDLLをVC++にて呼び出そうと下記のようなソースをコーディングしました。 DLL作成側で生成したポインタのハンドラを呼び出し側に渡そうと 引数にて受け渡ししようとしていますが、 呼び出し側で確認をすると、ハンドラの値は0のままです。 DLL連携をすると引数受け渡しは不可能なのでしょうか? ■DLL作成側(MinGW) ●cpp extern "C" __declspec(dllexport) int __stdcall GeoOpen(char* chrLicence, char* chrGeoDBDir, char* chrNormalize, long* lngHandler) { Geo *geo = new Geo(); lngHandler = (long*)geo; return 1; } ■DLL呼び出し側(VC++) ●h typedef int (__stdcall *GEOOPEN)(char*, char*, char*, long*); ●cpp GEOOPEN geoOpen = (GEOOPEN)GetProcAddress(hGEOCODERDLL, "GeoOpen@16"); long* lngHandler; if (geoOpen != NULL) { int intRes = (*geoOpen)(chrLicence, chrGeoDBDir, chrNormalize, lngHandler); }
344 :
デフォルトの名無しさん :2008/06/06(金) 19:59:22
そもそもDLL側で作成したポインタのハンドラ貰っても またDLLに渡す頃には消失されてる・・・のかな?
>>343 int型の値を引数で返すには、引数をint*やint&にするだろ。
それと同じで、long*型の値を引数で返すには、long**やlong*&にしないといけない。
>>340 プロジェクトに属するcppファイル内で使用したいcppをインクルードするという方法を
ときどき使ってる。
347 :
346 :2008/06/06(金) 20:42:35
プロジェクトに属するcppファイル内で、 使用したいcppをインクルードするという方法をときどき使ってる。 // CppIncluder.cpp #include "included.cpp"
>340 DOS時代はコンパイルだけしといて バッチファイル内のリンカのコマンドラインにobjファイル追加してた。 今はVCなのでプロジェクトに追加するだけ。
まあそのうちprintfがどこに入ってるかを知ることになるだろう
Visual Studio 使ってる場合で、ちょっとした言語仕様とか 確認するために簡単なプログラムを書いて試したい時、 どうしてますか?
コマンドラインから cl してるな。俺は。
テスト用に使ってるプロジェクトがある
353 :
350 :2008/06/07(土) 15:31:37
>>351 >>352 ありがとうございます。
コマンドラインで cl することにしました。
こりゃいいですね。こういうの無いと辛いです。
const int size = (int)pow( (double)2, (double)10 ); int ary[size]; 上記のようなコードを書いたところ、コンパイルエラー error C2057: 定数式が必要です。 となりました。 sizeはconst指定なので問題ないように思ったのですが、 何か解決策はありますでしょうか?
vector じゃだめ?
>>354 #define POW2_10 (1024)
358 :
354 :2008/06/07(土) 19:56:24
そうですね。おとなしくvectorを使うことにします。 gccでは通ったのでVCでもと思ったのですが…。 ありがとうございました。
int main() { CoInitialize(NULL); // 内部でCOMを使うクラス COMClass cClass CoUninitialize(); return 0; } ってやった場合先にCoUninitialize();が呼ばれそうですが cClassのデストラクタでRelease()出来ますか?
>>358 一応言っておくが、VCではなぜダメかというと
C99に対応してないので可変長配列が使えないから。
>>360 可変長配列が普通の配列と同じように宣言できるの?
それってヤバくね?
>>359 int main()
{
class inner_
{
public:
inner_() { CoInitialize(NULL); }
~inner_() { CoUninstialize(); }
}
inner_ in;
COMClass cClass;
return 0;
}
>>358 可変長配列の話じゃなくて、constつけてるのになぜ定数にならないかという話だと思う。
>>364 関数呼び出しは静的じゃないからな。
constexpr を待ってくれとしか。
まあ、2の累乗ならビットシフトでできるから
そっちでやればいいけどね。
strcat(a, b); ってやると aのサイズが1で bのサイズが1を超えててもおKみたいなんだけど 勝手にaのサイズをかえてくれるってことでつか? 勝手にサイズ変えてくれるならどんなサイズでも問題ないよね? って思ってどんどんstrcatしつづけるとそのうち原因不明のエラーが で、aのサイズを増やすとエラーでなくなる
? バッファを超える文字列入れると 他の変数の置いてあるメモリを破壊するぜ。
>>366 たまたまエラーにならなかっただけでしょう。
>>367 368
トンクス やっぱりそれなりのサイズを用意しないとだめですか
そろそろstd::stringかCStringあたりを使うのを検討したいと思います
C#からきたのでString型でたいがいのことが済んでしまう環境に慣れてて
辛いです
370 :
366 :2008/06/08(日) 16:16:52
最初はつらいでしょうね。使える環境であればstd::stringの使用を勧めます。
370は366でなく368
372 :
デフォルトの名無しさん :2008/06/09(月) 11:01:21
visual studio 2005のWindowsフォームアプリケーションで作成中です。 String^ str = "12345"; この文字列を数値に変換する方法を教えていただけませんか?
int num = int::Parse(str) ;
ありがとうございます。 無事解決しました。
375 :
デフォルトの名無しさん :2008/06/09(月) 17:20:01
質問させて下さい。 以下のような2つのクラスを作成しました。 目的は clbBクラス を clsAクラス に包含させるためです。 これをコンパイルすると C2061 エラーが発生します。 どなたか問題点とその対応を御教授いただけると幸いです。 //-------------------------------- // clsA.h //-------------------------------- #include "clsB.h" class clsA { public: clsA(); virtual ~clsA(); private: clsB m_b; } //-------------------------------- // clsB.h //-------------------------------- #include "clsA.h" class clsB { public: clsB(); virtual ~clsB(); private: clsA m_a; }
>>375 勉強しなおすことをお勧めするよ。(マジデ)
無限に巨大なクラスインスタンスを作成しようとしている人がいると、飛んで来ました。 クラスが無限ループしている…ブルブルガクガク…
379 :
デフォルトの名無しさん :2008/06/09(月) 19:09:09
恥ずかしながら375です。 これではどうなのでしょうか?だめなら↑に行きます・・・ よろしくお願いします。 //-------------------------------- // clsA.h //-------------------------------- #include "clsB.h" class clsA { public: clsA(); virtual ~clsA(); private: clsB m_b; } //-------------------------------- // clsB.h //-------------------------------- class clsA; class clsB { public: clsB(); virtual ~clsB(); private: clsA m_a; }
逝ってこい
AはBを持っていて、そのBはAを持っていて、そのAはBをもっていて、そのBは(ry
関数の中で文字列の長さを取得しようとしているのですが、 どんな文字列を入れても「4」しか返ってきません。 関数は int func(char*strName, char strValue[]) の様にして、関数内で int intValue1 = (int)sizeof(strValue1); としています。 関数の外で(int)sizeof(strValue1)する分には正しい数値が得られます。 どうしたら関数内で正しい文字列の長さを取得できますでしょうか?
strValue1って何を指してるんだか
strValueのことだとしても、関数の外(呼び出し元ってことだよね?)だろうが中だろうがsizeofでは文字列長は取れない
文字列の長さなら素直にstrlenでも噛ませばよかろう
つーか、VC++じゃないよね
>>378 の方が勉強になるんじゃない?
ついでなので
>関数の外なら正しい数値が得られる
文字列長ではなくて多分配列長(文字列長+終端文字の1バイト)が取得できていると思われる
>>384 ありがとうございました。
strlenでうまくいきました。
配列長が関数の引き数からは
うまくとれないのは渡し方の問題
ですかね?初心者スレで検索・質問
してみます。
つくづく思うんだが、なぜ先に質問しようとか考えるんかね? 俺だったら自分で調べようと思うが
ググったりすると、それに関連した事も書いてあったりして 知りたい情報に関連する知識も得られたりするよね。
sizeofはコンパイル時に確定するが、 その関数じゃ実行時にしか長さわからんだろ。
389 :
MFC始めて2週間目 :2008/06/10(火) 14:58:06
CEditView で Rect を指定してテキストを印刷するとき 行間値の調整はどうするの?
390 :
デフォルトの名無しさん :2008/06/10(火) 15:08:20
vs2005 使ってるんですが、デバッガ変数ウィンドウで 配列の全要素を並べて表示することは出来ないのでしょうか? 変数一個一個しか確認できないので配列の全要素の値を追いたいときにすごく面倒なんです
配列名だけ書いておいたら勝手にツリー表示されないか?
ああ勘違いしてました。 配列じゃなくて、ポインタにnewした複数個のデータの表示法でした。 某CWだとツリー表示することが出来るので、VSでも出来ないのかなと・・・
最近答えたんだけど、このスレじゃなかったかな。 ウオッチ式のとこ、ポインタ,要素数 でやってみ。 p,100 とか
すみません。何をしろと言ってるのかわかりません
自分が何やってるのか書き出してみろよ
>>393 言ってることがやっとわかりました。
ポインタ変数の名前の後に ,100 と追加すればいいんですね
いや、ポインタ、要素数でググれってことか勘違いしました
見れました。ありがとうございます。
しかし、これってただvc使ってるだけだと気付かないですよね?
ヘルプも見たんですけど、載ってなかったような・・・
こういう機能ってどこで知ったんですか?
オレはヘルプたどってってみつけた。
ありがとうございました。 自分の調査能力が足りないみたいです
書式指定のところかあ 書式指定でどうこう出来るもんだとは全然思わなかったのでスルーしてました ありがとうございました
401 :
デフォルトの名無しさん :2008/06/10(火) 20:38:31
VisualC++の頂点を極めあらゆる質問に答えて下さる皆さんに質問があります。 VS2003のVC++のGDI+なんですが、 Font font = new Font(dc, &logfont); とするとフォントをインスタンス化できますけど、logfontのフォント名に "@MSゴシック" のように横に傾くフォントを指定すると、うまく指定され ないように思われます。 たとえば LOGFONT lf1, lf2; lf1.lfFaceName = "@MS ゴシック" Font* font = new Font(dc, &lf1); font->GetLogFontW(&graphics, &lf2); というように確認してみると、lf1には確かに"@MS ゴシック"がセットされて いるのに、lf2には"@"が外れて"MS ゴシック"がセットされてしまいます。 私は何を勘違いしてるでしょうか?
ぐぐったらサンプルいっぱい見つかるから 動くの使えばいいんじゃないか?
@が付くフォントと付かないフォントって何が違うんだっけ?^^;
@が付くと90度振られる
405 :
401 :2008/06/11(水) 09:30:19
>>402 何というキーワードでググったんですか?
名前よりも優先度の高い項目のセット忘れとか?
つーか、変な省略しないできちんと検証したときのコード書けよ。
408 :
ごー :2008/06/11(水) 14:49:52
Visual C++ (2003) のデバッグモードで、 プログラム側からコールスタックの情報を取得することってできる? __FILE__ と __LINE__ だけでは、その場所の情報しか取れないのが不満。
できなきゃプログラム動いてない
411 :
デフォルトの名無しさん :2008/06/12(木) 22:14:37 BE:280248454-2BP(380)
class test { public: test(void){}; ~test(void) {}; }; #include <stdio.h> #include "test.h" int main() { test x = new test(); printf("Hello World! \n"); } 1>c:\documents and settings\default\my documents\visual studio 2005\projects\test\test\main.cpp(7) : error C2679: binary '=' : no operator found which takes a right-hand operand of type 'test *' (or there is no acceptable conversion) なにこれ?
test* x = new test(); にしろといってるんだろ
413 :
デフォルトの名無しさん :2008/06/12(木) 22:35:32 BE:1008893489-2BP(380)
やだ! test x = new test(); にしたいびょん オペレ〜タ定義しないといけないにょ?
GerDlgIntの戻りがおかしい unsigned short ss = (u_short)GetDlgItemInt( hDlg, IDC_TBX, &FLG, FALSE ); と書いてるのにIDC_TBXに入力された値と違う値を返すときがある 数値が10000超えたあたりからおかしい
415 :
デフォルトの名無しさん :2008/06/12(木) 23:26:03 BE:672595968-2BP(380)
こういうのって ありびょん? test x = *(new test());
つーか、65535を越えるとおかしくなるんだろ。
これならおk。 test &x = *(new test());
421 :
デフォルトの名無しさん :2008/06/13(金) 22:36:17
>>411 test x = new test();
を
test *x = new test();
ライブラリのファイルって? .libのプロジェクトを作りたいってのなら、 Win32のウィザードでスタティックライブラリを選ぶだけだが。
>>423 ごめんなさい。初心者なんで全然わかんないんです。
スタティックライブラリは選びました。プロパティでもスタティックライブラリって
なってるんですが、プロジェクトのファイルの中に.libのついたついたのは
Debugフォルダの中に1つだけあります。それでいいんですか?
.cppのはビルトできたのですが、ライブラリってそれをどこからでも使えるってことですよね?
もしかして新しいプロジェクトではそれをincludeしても使えないんですか?
>>424 インクルードするのはlibファイルじゃなくてヘッダ。
ライブラリに入れた関数の、プロトタイプ宣言やらなんやらのヘッダは自分で作らないと駄目。
(あるソースの関数を、別のソースから参照する時と一緒)
libファイルはリンカで結合するものなんで、
VC++のIDEなら、プロジェクトの構成プロパティのリンカ→入力→追加の依存ファイルに
追加しとけばリンクしてくれる。
他にもソース中に、#pragma comment(lib, "hoge.lib") とか書く方法もある (VC++依存)。
正直、自分用のプログラムをlib化する意味なんて ほとんど無いと思うんだが。
>>425 すいません。全くできません。上のページの次のページの
#include <time.h>〜 return (day_of_week[mytime->tm_wday]);
}を.cppに、int get_time(int *, int *, int *);とchar *get_date(int *, int *, int *);
を.hに、プロジェクト名は1です。構成の種類はスタティックライブラリ。
そしてprivateという別の(構成の種類は実行)プロジェクトのcppに
#include <stdio.h> #include "1.h"〜 return 0;}を、(hは空です)とやっている
のですが、1.hをincludeできませんNo file みたいなのになるんです。
そもそもどうなるのかさえわかりません。追加の依存ファイルも候補みたいな感じで
出てきませんし、手打ちで入力してもビルドしても同じ結果です。
ライブラリの作り方がわからないんじゃなくて ライブラリの使い方がわからないんじゃないか?
質問です。一応、自分でも調べてみたんですが、分からなかったので・・・ 長いので2つに分けます。申し訳ない。 /* windowsapp.h */ class CWindowsApp{ /* 中略 */ public: void Initialize(HINSTANCE,INT,char*,int,int); bool CreateWindow(); // 53行目 } /* windowsapp.cpp */ bool CWindowsApp::CreateWindow() // 48行目 { // 49行目 /* 中略 。やってる事は、WNDCLASSを作ってCreateWindowEx()を使って ウィンドウを表示させるという流れ */ } /* script.cpp */ bool initialize(){ /* 中略 */ // ウィンドウの作成。成功or失敗をそのまま返す // g_WindowsAppInstは、既述したCWindowsAppクラスのインスタンス return g_WindowsAppInst.CreateWindow(); // 76行目 }
/* エラー */ C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\windowsapp.h(53) : warning C4003: マクロ 'CreateWindowA' に指定された実引数の数が少なすぎます。 C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\windowsapp.h(53) : error C2059: 構文エラー : 'constant' C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\script.cpp(76) : warning C4003: マクロ 'CreateWindowA' に指定された実引数の数が少なすぎます。 C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\script.cpp(76) : error C2059: 構文エラー : ',' C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\windowsapp.cpp(48) : warning C4003: マクロ 'CreateWindowA' に指定された実引数の数が少なすぎます。 C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\windowsapp.cpp(48) : error C2059: 構文エラー : ',' C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\windowsapp.cpp(49) : error C2143: 構文エラー : ';' が '{' の前に必要です。 C:\Program Files\Microsoft Visual Studio\MyProjects\addressbook\windowsapp.cpp(49) : error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関数ヘッダーがありません。 関数のオーバーロードは、引数が異なれば可能というのは調査済みだったのでやってみたら、こんなエラーが・・・ しかし、このCreateWindow()関数の名前を、CreateWndとかCreateWindowCという名前に変更したら、すんなりコンパイルしてくれました。 どうしてこのようなエラーが出るのでしょうか。オーバーロードの条件について、何か勘違いをしているのでしょうか・・・
>>430 CreateWindowはマクロでCreateWindowA/CreateWindowsWのどちらかになるが、
さらにCreateWindowAとWの両方ともCreateWindowExAとWを呼ぶ関数マクロになっている。
つまり、関数でないCreateWindowに多重定義は無理だから、ほかの名前にするしかない。
たとえばMFCやATLみたいにCreate()とか。
なるほど、そもそも関数のオーバーロードとは少し異なる原因だったのですね。 迅速な対応、ありがとうございました!
>>427 プログラミング以前にフォルダとかパスとか判ってなさそう・・・
>>433 すいません。
ようするにどうやったら違うプロジェクトで
あるプロジェクトで作った関数を使えるようになるかってことなんですけど。
ソースファイルをプロジェクトに追加する。
>>435 つまり同プロジェクト内で作った関数のソースファイル、それを
一般化?したヘッダファイルの一対がライブラリってことですか?
ヘッダは何のためにあって誰がどこで使ってるかわかってる?
>>437 いろんなソールファイル内の関数をメインのソースで使うためのまとめ役?橋架け役?
みたいな感じじゃないんですか?
ググれ
入門書ぐらいは読め
スコープとか理解してるのかな?
とりあえず、
>>427 については、
lib と .h を使うプロジェクトのフォルダにコピーするか、
プロジェクトのプロパティの、
「追加のライブラリディレクトリ」と「追加のインクルードディレクトリ」を設定するか、
#includeと「追加のライブラリファイル」でパスまで指定するか、
好きなの選べ。
最後のは、あんまり推奨しないが・・・
>>439 めちゃググリましたよ 逆にヘルプでわからなくなった感じです すいません。
>>440 入門者のゲームプログラム作る本とか他にも入門書はいくつかやりました。
>>441 変数のスコープは知ってますが関数のスコープはわかってないかもしれません。
ゲームプログラムの本の経験も含めて、1つのプロジェクト内でcppとhを対にしていくつも作る、
それで各対の関数を引き出す?そしてメインで使うみたいなのはできてるんです。
要するに疑問というか想像なのは、標準ライブラリみたいにcppとhの対が見えない、タグが無いというか・・
内部にしまわれてるというか、そうゆう状態で、どのプロジェクトでもhをincludeすれば
使えるようになる のを作るのがライブラリを作るってことではないのですか?
>>442 ありがとうございます!わかりやすかったです。
>>443 ありがとうございます。
プロジェクトのプロパティの、「追加のライブラリディレクトリ」に今なにも入ってない状態なんですが、
参照で見ていっても条件に一致するファイルはありません。となります。
そもそもここにどうゆう拡張子のものを追加できるかもわからないので、なぜ、どんな候補が無いかも
全くわからない状態です。
なんで候補があるとか思うのか・・・ フォルダの指定だから、ファイルの候補は無くていいんだよ。
>>446 今フォルダごと追加のライブラリ ディレクトリに指定しましたが、やっぱり<1.h>をincludeできません。となります。
>>427 の状態です。
ライブラリとインクルードは別物だし 全然別の場所に置いて使うのが普通
釣りじゃないなら、 ライブラリ作成に挑戦するのは、 もうちょっとプログラミングそのものが 判ってからにした方がいいと思うよ。 個人的なライブラリなら、 別にソースファイルのコピーでも十分だし。 ちなみにヘッダをインクルード出来ないのは ちゃんと.hファイルのあるインクルードディレクトリとファイル名を指定出来て無いだけで、 ライブラリとか関係無いからね。
ライブラリとインクルードは全然別の場所に置いてあると考えて下さい。 たまたま同じ場所にあってもいいけど
>>448 >>449 >>450 みなさんありがとうございます。ライブラリからincludeしたhの関数を探し出してくる
ぐらいに考えてたのですが、違うようですね。
もうちょっと総合的な本を読んでみたいと思います。
いや違わないけど・・ (正確には、includeした関数じゃなくて、 実際に呼び出しされてる外部関数を探し出す) 君がひっかかってるのは、それ以前の ヘッダファイルとライブラリファイルの ディレクトリ指定段階でしょ。 イロハで言えばイ以前だよw
>>452 >ヘッダファイルとライブラリファイルのディレクトリ指定段階
こうゆう風に言うんですね。ありがとうございます。
#include<1.h> と #include"1.h" の違い理解してる?
高学歴の俺の意見 お前と関わるにおいて高学歴であることが何の意味もなさない(位お前とかどうでもいい) お前の前で本当の自分(頭がいいこと)でいてもメリットが無い。アホなふりしてるほうがマシ、失敗を笑いにできるから。 お前から吸収できることがないと思われてるってこと。知り合いとしての優先順位の潜在的低さがでてる。 まだ情で関わってもらえるだけ有り難いと思え。
コンパイラ・リンカについて勉強するべし。
>>454 知りませんでしたが、調べました。自作のhは""で囲むんですね。
ゲーム作りの入門本に似たようなのがあって、
ツール→オプション→ディレクトリを表示するプロジェクトで
ライブラリファイル、インクルードファイルのそれぞれで1のファイルを追加したのですが、
そうすると、未解決のシンボルというエラーに変わりました。
>ライブラリファイル、インクルードファイルのそれぞれで1のファイルを追加したのですが、 ディレクトリを指定するところにファイルを追加するというのはどうかと(単なる記述ミス?)。 その関数が記述されてるソースをプロジェクトに追加するのが一番楽。 1.プロジェクト開いてる状態でソースファイルをドロップ。 2.開いたソースウィンド上で右クリック→プロジェクトへファイルの挿入。 これで出来んかな?
>>458 ありがとうございます。コマンドプロンプト的なので軽く見た程度
なのでディレクトリ=ファイル=フォルダぐらいな感じの理解しかないんです。
したのやり方ですがもう少し具体的に書いていただけませんでしょうか?
それと既存項目の追加とは違うのでしょうか?
いいかげんにしろよ。
つーか、ゲームとか作る前にC言語とVCの使い方を習熟するのが先だよチミィ。 そのレベルで教えて君じゃ、ゲーム出来てもバグだらけで遊べんだろうよ。 何のために本やグーグル先生があると思ってるんだね? 味噌汁で顔洗って出直してこい。
>>461 わっかりました!みなさんいろいろありがとうございました!
習熟までは行かずとも、ある程度使えれば特に問題ないんじゃね
>ディレクトリ=ファイル=フォルダ ダメだこりゃ。 ディレクトリ=フォルダ≠ファイル
ディレクトリとフォルダは違う
フォルダとは 【folder】 - 意味・解説 : IT用語辞典 省略 WindowsやMac OSではフォルダと呼ぶが、UNIXやMS-DOSでは同様の概念を「ディレクトリ」と呼ぶ。
Windows ではシェルから見える物がフォルダ、 シェルを通さず見える物がディレクトリと区別している。
してねーよ。
してるよ。
パスをアイテムIDリストで扱う関数名ではFolderが使われ、 C:\みたいな形で扱う関数名ではDirectoryが使われている。
してねーよ。 普通にNTFSフォルダとか言うから。
フォルダとディレクトリの違い 一般的な解釈 Windows 95以降 や Mac OS ではフォルダ、 MS-DOS や UNIX ではディレクトリと呼びます。 二つは同義です。 細かく言えば 物理的に存在していて、絶対URI(file:///C:/WINDOWS/ とか)を使って場所を示せるのがディレクトリ。 ディレクトリに、あたかもディレクトリのように見える仮想的なものをあわせたのがフォルダ。 マイコンピュータに入っている「コントロールパネル」などは、フォルダではあるけれど、ディレクトリではありません。 Mac OS: フォルダ、ディレクトリ、パス名について “フォルダ”とは、ディレクトリを見てわかるように表現したものです。 Finder(図 2 参照)と合わせてフォルダを使うことにより、ファイルシステムを見たり、操作することが理解しやすくなります。 Finder でフォルダからある項目を出したり入れたりすると、基本的なディレクトリが変更されます。 “フォルダ”と“ディレクトリ”という用語は、特に区別する必要がない場合は、同じ意味で使用されることがあります。 面倒だから同じ意味でいいよ。
>シェルを通さず見える物がディレクトリと区別している。 少なくともこれは間違いだな。
この中に意味を理解し、普段から正確に使い分けている人がいるのだろうか…。
>>474 シェルって何なのか分かってないんだろうな。
判ってないのはお前。 ファイルシステムの段階で、フォルダって言ってるんだから、 Windowsシェルは関係無い。
こうなると思ったw
CreateDirectory ディレクトリを作成します。ファイルシステムがファイルとディレクトリのセキュリティをサポートしている場合は、 指定されたセキュリティ記述子を新しいディレクトリに適用します。 BOOL CreateDirectory( LPCTSTR lpPathName, // pointer to a directory path string LPSECURITY_ATTRIBUTES lpSecurityAttributes // pointer to a security descriptor );
ディレクトリっていってんじゃん
誰もディレクトリとは呼ばないなんて言ってないような。
プログラミング環境では慣習や過去からの互換性から、 Directoryを使ってるだけでしょ。 普通は、 >一般的な解釈 >Windows 95以降 や Mac OS ではフォルダ、 MS-DOS や UNIX ではディレクトリと呼びます。 >二つは同義です。 で問題無いよ。
マイコンピュータをディレクトリとか言うのはナシだろ
みんなオナホのために争わないで!
>>484 Macの真似してフォルダにして無かったら、
パネルとか言ってたかもよ。
3.0時代からあった、コントロールのフォルダは
コントロールパネルだし。
C++でグラフの描画をしたいんですがなにから手を付けていいのかまったくわかりません アドバイスまたは参考になるサイトとかあれば教えてください・・・
C++にグラフなんてない
えーとそれはGUIがどうのこうのって話になってくるのでしょうか?
棒グラフ **************** ******* ************************* ************
491 :
デフォルトの名無しさん :2008/06/14(土) 22:24:44
今度 C++ でタイピングゲームを作ることになったのですが、 if,printf,switch,while,int,char これしかまだ知らないのにできるわけがない。。。 と、いうわけで誰か教えてください(つω・`)
>>491 ifとwhileが出来れば大丈夫
プログラムなんてどんなえらそうなこと言っても順次・選択・繰り返ししか出来ないんだから。
それが分かってるんなら後はC++独特の方言を覚えるだけ。
C++の簡単な入門書とかサイトでじっくり勉強してみなよ
>>491 あと、キーの読み取り方と、文字の表示方法さえ知ってれば何とかなる。
494 :
デフォルトの名無しさん :2008/06/14(土) 22:41:26
できればサイトのURLお願いします!
最初に本を買うことを薦めるぞ。
フォルダは概念でディレクトリは実装ってことでいいよ、もう。
違うからw
マイクロソフトがMacに対するコンプレックスを解消するために、ディリクトリをフォルダーに読み替えたり、拡張子の表示を隠してみたりした。
シェルネームスペースではフォルダ ファイルシステムではディレクトリ
ファイルシステムでもフォルダだよ
ググればNTFSフォルダと言ってる例がいっぱいひっかかるが。
マウントはレジストリ使うんじゃなかったかな? よくトラぶって起動しなくなるらしい
DOSやWindows 3.1やWindowsNT → ディレクトリ Windows95以降 → フォルダ NTFSはWindowsNTで作られた物だから、 解説ではディレクトリと言う事も多い。 今では、区別なくフォルダと言っている。 例えば、圧縮フォルダはNTFSの機能だけど、 あんまり圧縮ディレクトリとは言わない。
つまりディレクトリとフォルダは違うものなんだ
>>491 じゃないけど作ってみたyo〜
#include <stdio.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR sKey[] = _T("test") ;
printf("plz enter [ %S ] \n", sKey) ;
unsigned int nCount = 0 ;
for(;;)
{
if(::_getch() == sKey[nCount])
{
printf("hit! [ %C ]\n", sKey[nCount]) ;
if(_tcslen(sKey) <= ++nCount) break ;
}
else printf("miss\n") ;
}
printf("\(^o^)/") ;
return 0;
}
あれだろ、 昔からDOSやWindowsでプログラミングやってる老人が、 ディレクトリをフォルダって言う事に抵抗感じるって事でしょ。
もうフォルダとかディレクトリとかどうでもいいよおまえら 専用スレでも立ててほかでやれ と思ってるやつが何人いるんだろう 一人もいないのか?
どうでもいいよ
他人の間違いに一々噛み付くのはアマチュア。 脳内で的確に修正し、さりげなく指摘できるのがプロ。 間違いを訳のわからん理論で正当化しようとするのは厨ニ病。
悪いのはいちいち名前を変えて同じ物をローテーションしてるMSだろ 俺たちゃ振り回される被害者だってばよ!
Express Edition 使っているんですけど ソリューションにソリューションを追加できないものでしょうかね 自分は MFC や ATL を使わないので この機能のためだけに Standard 買うのもちょっと…
Stdにだってそんな機能はありませんよ 異なる言語のプロジェクトをひとつのソリューションで扱えるだけ なんでそんな要求が出るのかしらないけど MSBuildあたりを調べればなんか代替案出てくるんじゃない?
>>461 >何のために本やグーグル先生があると思ってるんだね?
何のために2chに初心者質問スレがあると思ってるんだね?
という発想。
EEには無いがSEには有るというなら多分ソリューションフォルダのことだろう。
VS2008 MFC使用です CStaticオブジェクトに絵を描いています。 OnPaint()でLineTo()等を組み合わせて絵を描いているのですが、 ウィンドウの大きさを変えたとき、OnSize()で描画領域の大きさも変えて、絵も拡大縮小するような処理を行っています。 しかし、絵を拡大したとき、新たに描画されるところは拡大されて表示されるのですが、 既に表示されている部分の再描画が行われません。 これが処理を早くするための工夫(仕様?)であるところまでは調べられたのですが、 実際にどのように対処したらいいかがわかりません。 OnSizeでサイズを変更したときに全体が再描画されるようにするにはどうしたら良いでしょうか。
>>518 Invalidateで全体が無効領域だということをシステムに教えてやる
けちけちしないで全体を再描画すればいいだけじゃん。
521 :
518 :2008/06/16(月) 18:48:09
>>519 Invalidateを初めて知りました。ありがとうございます。
OnSizeでInvalidate(TRUE)
OnExitSizeMoveでInvalidate(FALSE)
とする事で対処しました。
ダイアログクラス間での、構造体データのやりとりで悩んでいます。 [ダイアログA]から、作成した登録ボタンを押して[ダイアログB]を開き、 Typdef struct Data { int Number; char Name[10]; }stDATA; をそれぞれに用意した2つのエディットボックスで入力して登録するもの なのですが、UpdateData(TRUE);で取得したデータを、[ダイアログA]の保存ボタンを 押したときにファイルに保存するための処理が作れません・・・。 [ダイアログB]でファイルオープンし、そのまま保存することならできる のですが、ダイアログAの保存ボタンで保存したい場合は、構造体のデータ をどのようにやりとりすればよろしいでのしょうか? もしかしたら、MFC以前の問題なのかもしれないのですが、 C言語とC++を初めて1か月半なので、なにとぞよろしくお願いします。
失礼しました。ファイルへの保存は、 FILE *fp でファイルを開いて、fprintfで保存します。
fwriteでメンバを一個ずつセーブ freadで一個ずつロード
525 :
デフォルトの名無しさん :2008/06/17(火) 11:33:24
Visual Studio2005のC++を使っています. 複数のフォルダーを取得するにはどうしたらいいでしょうか? 複数のファイル名を取得するにはCFileDialogを使って、Shift+ マウスクリックで複数ファイルを同時に選択できました. それと同じようなことをフォルダーに対して行いたいのです。 BROWSEINFOを使って一個のフォルダは選択出来ますが、 同時に100以上のフォルダーを選択したいので、Shiftやcntlなどを 使ってさくっとやりたいです。 なお、フォルダー選択後、各フォルダー内にあるデータファイルを 順番に全て処理していきます.
>>522 ダイアログBが生きてるなら、Bのパブリック変数なりゲッタなりで。
Bが消えるなら、消える前に上記。あるいは、AのポインタをBに渡しておいて
BからAのパブリック変数に代入なりセッタなりで。
527 :
デフォルトの名無しさん :2008/06/17(火) 16:14:55
VisualC++2005でMFCアプリケーションをダイアログベースで作成しています。 メイン画面からサブ画面を開くのに DoModal(); を使って開いているのですが、 このときサブ画面のエディットボックスなどに初期値を入れたいです。 メイン画面ではOnInit関数内でセットできたのですが、 サブ画面ではどこに記述して良いかわかりません。 初歩的な質問で申し訳ありませんがよろしくお願い致します。
サブ画面のダイアログのクラスにOnInitDialog()を作れ。 クラスビューからクラス選択してプロパティでオーバーライドをクリックして OnInitDialogを探せ。
529 :
527 :2008/06/17(火) 16:48:10
>>528 おぉ☆★☆
早速のレスありがとうございました!!
早々に解決できました。
ありがとうございましたm(_ _)m
>>524 >>526 まだ完成はしていないのですが、無事解決しそうです。
どうもありがとうございました。
531 :
デフォルトの名無しさん :2008/06/17(火) 20:59:57
すいません。すごく今困ってます。 今先生から内緒でCDに焼いてもらったVisual Stadioなんですが、 #include <stdio.h> void main(void) { printf("Hello"); } これを実行すると プロジェクト : error PRJ0003 : 'cmd.exe' の起動中にエラーが発生しました。 ってなるんですが、どうしたら良いですか?? お願いします。
とりあえずMSにメールしといた
環境変数のpathに %SystemRoot%\system32 を追加。 PCを再起動 コピーは良くない。逮捕されるぞ Visual studio のアカデミック版は安いんだから、買え。 一番基本的なバージョンは無料ダウンロードできるんじゃなかったっけ?
534 :
デフォルトの名無しさん :2008/06/17(火) 21:11:24
>>533 あの・・・すいませんが
環境変数ってどこですか?;
流石にこれにはレスしない方向にしたいな
無料で使えるExpressEditionがあるのになぜこの程度の 事をするのにコピーしてもらうのかと、そもそも学校の課題とかなら EEでも十分すぐる
ていうか先生に聞けよw
ていうか、学校名晒せよ。
539 :
デフォルトの名無しさん :2008/06/17(火) 23:17:23
>>531 これはさすがにまずいな、まして教職者がやる行為ではないね
TV用
内緒って書いてあるな、 約束を破っちゃいかんよ
これはすごい釣りですね
国際学生証作ればMSから正規にタダでダウンロードできるだろう
MouseButtons & Windows::Forms::MouseButtons::Right ; Noneになるクソワロタ あれ・・・?
544 :
デフォルトの名無しさん :2008/06/18(水) 10:50:59
こんにちは! ボタン押しでファイル保存をしたいのですが、エクセルやワードを保存するときのように、 フォルダを選べて、名前をつけて保存したいです。 まず、その画面はどうやって表示したら良いでしょうか?? 環境はVisualC++2005のMFCです。よろしくお願いします。
CFileDialogで検索
546 :
デフォルトの名無しさん :2008/06/18(水) 12:21:17
クラスについての質問です。 class MakeWindow { public: char Name[256]; int Width; int Height; int Bit; int ScreenMode; } MakeWindow mWindow = new MakeWindow("A", 640, 480, 32, SELECT_MODE); このようにしてオブジェクトを作成したのですが、 エラー 2 error C2661: 'MakeWindow::MakeWindow' : 5 個の引数を伴うオーバーロードされた関数はありません。(Line 6) と表示されます。 受け取り側の変数も5個で設定しているのですが、何が原因なのでしょうか。
コンストラクタでググれよ
エラーをよく見ろ 'MakeWindow::MakeWindow'という関数はないと言ってる そのまんま
548はアホ スレ違いだから終了
550 :
デフォルトの名無しさん :2008/06/18(水) 16:01:45
質問させていただきます。 Microsoft Visual C++ .NET でアプリケーション (.exe)作成しました。 void main()を実行した所 実行画面が立ち上がりません。 出力の表示は ”XX.exe: ネイティブ' はコード 0 (0x0) で終了しました。” となっています。 実行画面が表示されれば Sleep(2000)が入っているの目視できるはずです。 ステップインで実行した所次のようになっていました。 ・appmodul.cppの_tWinMainが実行 ・crtexe.cのif ( !managedapp )でmanagedapp=0 ・exit(mainret)が実行 ここで終了しているようです。 何とかmainの中身を実行させたいのですが何が原因なんでしょうか? 当方のスキル:社内プログラマ1年目 申し訳ありませんが何とかお力を御貸し頂きたいと思います。
551 :
MFC始めて3週間目 :2008/06/18(水) 16:12:49
CEditView でフォントを設定するのはどうするの。 ちなみに以下ではできない。 int CDeepPurpleView::OnCreate(LPCREATESTRUCT lpcs) { if(CEditView::OnCreate(lpcs) == -1) return -1; CDC* pDC = this->GetDC(); CFont screenFont; screenFont.CreatePointFont(600,"MS ゴシック",pDC); CFont* pOldFont = pDC->SelectObject(&screenFont); return 0; }
>>550 MFCのプロジェクトを選んでいないか?main関数から始まるプログラムを作りたいなら、
Win32コンソールアプリケーションのプロジェクトを選ばないといけない。
あるいはMFCを使いたくてそうしているのなら、
プログラムの実行開始はmain関数でないというのがMFCの流儀。
フォントの寿命がOnCreate終わるまでなんだろ
554 :
550 :2008/06/18(水) 17:10:31
>>552 ありがとう御座います。
MFCを使用しないため
Win32コンソールアプリケーションで
プロジェクトを組みなおした所
問題が解決しました。
ありがとう御座います。
>>554 そういえばvoid main()は普通やらない。int main()にしろ。
>555 そのあとに、NyaRuRuセンセが「CLR上でフック動かすとか無謀すぎ」 って書いてるのに、何でコンパイルしたの?
>>543 MouseEventArgs^ a = (MouseEventArgs^)e;
a->Button == MouseButtons::Right
こうですか!わかりません><
559 :
デフォルトの名無しさん :2008/06/19(木) 04:09:40
MFCで使われるCrectをCLRでも使いたいんですけど代わりのものってありますか?
代わりって言うと微妙かもしれないけどRectangleとかかな?
>>551 まず、CFontが破棄されないように自動変数はやめてメンバーにでもして、
↓でどうよ。
int CDeepPerpleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CEditView::OnCreate(lpCreateStruct) == -1)
return -1;
screenFont.CreatePointFont(600, _T("MS ゴシック"));
SetFont(&screenFont);
return 0;
}
TimerProc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) のdw1とdw2って、ドキュメントには予約って書いてあるけど、実際には使えないの?
そこに値設定する方法無いのに、どうやって使うつもりなんだ。
予約領域のある関数や構造体なんてイヤというほど有るぞ。
565 :
デフォルトの名無しさん :2008/06/19(木) 23:02:34
みなさんすみません。5日前からC++を始めた初心者です。 >383さんと関連するのかもしれませんが、下記のコードを実行すると、 期待した結果と異なる(結果は同じになると思うんですが)出力されます。 関数の引数を値渡しすると、初期化と同じとテキストに書かれているので、 こういう結果がなぜ起こるか分からないのです。 Visual Studio 2008 Express Edition Windows Vista void Print(char str[]) { cout << "サイズは" << sizeof(str) << endl; } int main() { char str[] = "Test"; cout << "サイズは" << sizeof(str) << endl; cout << "サイズは" << sizeof("Test") << endl; Print("Test"); Print(str); } 結果: サイズは5 サイズは5 サイズは4 サイズは4
>>565 "Test"の文字列を長くしたらどうなるか見てごらん。
>>565 Print関数にはポインタを渡してるに過ぎない。
サイズが4なのはポインタのサイズ(32ビット)
570 :
デフォルトの名無しさん :2008/06/20(金) 11:36:05
>>569 >>566 565です。ありがとうございます。そういうことなんですね。
すっきりしました。
571 :
デフォルトの名無しさん :2008/06/20(金) 11:43:06
こんにちは! 現在VisualC++2005のMFCでプログラムを組んでいます。 Cのstr関数を使用しているのですが、下記のような警告が出ます。 warning C4996: 'strcat' が古い形式として宣言されました。 string.hを見ろって言われて見たのですが、 まだまだ未熟な為、よくわかりません。 一応動作は問題なくできるのですが、気になったので教えて頂けませんか? 自分としてはこの警告を、 問題はありませんが、古い形式で宣言されてるので新しい形式にした方が良いよ。 というニュアンスでとらえています。 それでOKでしょうか?また、OKな場合新しい形式とはどういう形式でしょうか? よろしくお願いします。
これを抑えるのは、_CRT_SECURE_NO_DEPRECATE をdefineする。 新しい形式は、strcpy_s を調べてね
strcat だったか、こっちに対応するのはもちろん strcat_s ね
574 :
デフォルトの名無しさん :2008/06/20(金) 14:45:50
>>572 ありがとうございます。
確かに _s をつけたら警告がなくなりました。
ANSIではstrcatとかですが、
VisualC++では _s を付加した新しい形式になってるってことでいいんですか?
ちなみに
>これを抑えるのは、_CRT_SECURE_NO_DEPRECATE をdefineする。
やってみたんですが、警告は消えませんでした・・・orz
標準入力をファイルへリダイレクトした時のデバッグ (コマンドから[c:\hoge.exe < c:\hoge.txt]と入力した時のhoge.exeのデバッグ) をするにはどうしたらいいですか? プロジェクトのプロパティ→デバッグ→コマンドライン引数 に" < c:\hoge.txt"を足せばいいかと思ってやってみたのですが、上手くいきません。
>>576 それでうまくいくはずだけど、どうなるの?
>>577 hoge.exeの中身です↓
int _tmain(int argc, _TCHAR* argv[])
{
std::string line;
while (std::cin)
{
std::getline(std::cin, line);
std::cout << line << std::endl;
}
return 0;
}
hoge.txtの内容が出力されるはずですが、何も出力されないのです。
(コマンドプロンプトから[hoge.exe(のフルパス) < c:\hoge.txt]とした場合は内容が出力されます。)
引数は
argv[0] --- hoge.exe (のフルパス)
argv[1] --- <
argv[2] --- hoge.txt
になっているのですが・・。
それがコマンドライン引数で出来たのは VisualStudio6以前だけ。 リダイレクトはシェルの機能なんで コマンドライン引数には書けない。
580 :
574 :2008/06/20(金) 17:42:07
>>575 ありがとうございます。
参照させていただきました。
ネットだと、_CRT_SECURE_NO_WARNINGS を
ヘルプだと、_CRT_SECURE_NO_DEPRECATE を
定義すれば良いとありますが、どちらを定義しても警告が消えません。
ちなみに
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES を 1 として定義する
もやってみましたが警告が消えません。
もしかして定義する場所が違っていますか?
str関数を使用しているファイル内で定義してるのですが。。。
>>580 多分、<string.h>をインクルードする前に
定義しないと駄目だと思うぞ。
>>578 VC++のバージョンは?
こっちでやってみたら、VS2005だとそのまま動作して2008だと無理だな
583 :
579 :2008/06/20(金) 18:06:32
あれ、2008のヘルプにも出来るって書いてあるな。
>>579 は取り消し。
ヘルプには両方できるって書いてあるんだけど、2008はできなかった。 2005だとそのままでできるから設定がいるか、ヘルプが間違ってるか、どっちかかもね
なんか、2008でも「デバッグ無しで開始」だとうまくいった。 バグっぽいな。
Sleepとダミーの行置いてデバッグ無しで開始してからプロセスにアタッチしたら なんとか動いたw
VC2008で作成したDllをVC2005をインストールしているPC上から呼び出したところ dlがありませんといわれました。 VC2005で作り直すとちゃんと呼び出せるdllができます。なにが原因でしょうか? VC2008で作ったdll→VC2008のPCでは動くがVC2005では認識されない。 VC2005で作ったdll→VC2005のPCでもVC2008のPCでも動く
他に依存しないなら単体で動く
VC入れてないと使えないんじゃ普通の人には使えない
featurepackどうですか?
591 :
578 :2008/06/20(金) 22:34:52
>>582 バージョンはVS2008です。
皆様の言うとおりデバッグ無しでは動作しました。
バグ?ですかね。あきらめつつ設定でできないか頑張ってみます。
レス下さった皆様ありがとうございました。
>>587 dllがないなら、dll入れればいいじゃん
DLL自体じゃなくてプロジェクトのことだというオチじゃないだろうな? 2005のプロジェクトは2008でも読めるが、逆はできんぞ。 まあソリューションとプロジェクトのヘッダ書き換えればほぼイケるけど。
594 :
デフォルトの名無しさん :2008/06/21(土) 22:51:53
本当にくだらない質問だとは思うんですけど Visual C++っていうのはソフトなんだよね? それはれっきとした売り物でフリーじゃないよね? そしてプリグラムを勉強したかったら何かしらのプログラミングソフトを購入することが必要?
>>594 マイクロソフトのホムペを隅から隅まで確認しろ
>>594 Visual C++ 2005/2008 Express Edition はフリー
598 :
デフォルトの名無しさん :2008/06/21(土) 23:08:12
ありがとうそれを落としていろいろ勉強してみるわ
599 :
デフォルトの名無しさん :2008/06/22(日) 01:36:36
>>597 のを落として実際にプログラムをサイトからみたの拝借して打ち込んでるんだけど再現できない
#include <iostream.h>
void main()
{
int i;
i = 5 + 15;
cout << "計算すると";
cout << i;
cout << "になります。" << endl;
}
これなんだけどなぜだろうか?
600 :
デフォルトの名無しさん :2008/06/22(日) 01:56:16
>>599 iostream.hはC++標準の一部ではありません。
現代的なCompilerの多くではサポートされません。
VC7以降も同様です。
#include <iostream> using namespace std;
都合上 using namespace std; してるところが多いけど 本当は using namespace は使わない方がいい。 今は気にしなくていいけどな。
603 :
599 :2008/06/22(日) 07:52:34
ということは<iostream.h>を<iostream>にかえれば大丈夫になるわけかな?
ここはC++を教えるスレじゃないよ
std::endl; を書くのがめんどくさいです(><
前から気になってたんだけどC++の話駄目だとこのすれってどんな話題が主なの? Win32やMFCもNGだよね? そうすると環境の設定とか?w
VCの入門書よりC/C++の本を読んだ方がいいやつは、そういうスレヘ行った方がいいだろ
そうだな
std::e と打った時点でインテリセンス効いてない?
大量に発生するC4146の山 VCは素晴らしいコンパイラ
今VC++2008勉強してるんだけど、これって標準のC++と全然違う? string型使おうと思ったらPTSTRに変換できないって何だよそのエラーorz 最終的にはstringのdataメソッド使えば問題無かったけど・・・ Win32APIとか難しすぎるぜ!
c_str 使え。
PTSTR は Unicode 環境を対象とする設定でコンパイルする場合は wchar_t* で typedef されるので wstring を使う必要があると思うんだが、 VC++2008 ってデフォルトで Unicode 環境を対象にしてなかったっけ? 今手元に環境が無いから何とも言えないが。
>>618-
>>619 セックス!
今までPerlとかPHPとかスクリプト系のプログラミングしかまともにしたことが無かったから
処理系(コンパイラ?)によって方言があるっていうのがなんとも理解しづらいorz=3
とりあえずなんか小さなアプリをチョコチョコ作ってそこから方言の意味を勉強していくよ。
これは方言ってわけではないね。 言語仕様が変わってる訳じゃないから。
VC++には何故 C99 標準の vsscanf が無いんですか?
visual studio 2008のWindowsフォームアプリケーションでアプリを作成中です groupboxの中に複数のcheckboxを配置し、 同じgroupboxの中にあるボタンを押すと、全部のチェックボックスがチェックされる、という仕組みを作ろうとしています。 とりあえず、ボタンが押された時にグループボックス内のコントロール分のループを回すところまでは上手くいったのですが、 1.そのコントロールがチェックボックスと判定するにはどうすれば良いのか 2.そのコントロールがチェックボックスだった場合、それにチェックを入れるにはどうすれば良いのか が判りません。 if(groupbox1->Controls[i]がチェックボックス){ groupbox1->Controls[i]->Checked; } …みたいな感じのことがやりたいのですが、どうすれば良いのでしょうか。
キャストが成功するかどうかで判定すれば?
>>623 、 〜->checked=true; でした。
>>624 ControlからCheckBoxへのキャストのやり方がわからないので困っているのです。
628 :
デフォルトの名無しさん :2008/06/23(月) 20:00:03
C++で作った『ハイ アンド ロー』のゲームで ハイスコアを記録させたいのですが、 どうやったら記録できるのでしょうか?? 本当に初心者なんでよろしくお願いします。
629 :
デフォルトの名無しさん :2008/06/23(月) 20:55:11
>>628 class CScore
{
~~~~
public:
void SetScore(int score)
int GetScore(void)
private:
int m_HiScore = -1;
};
// スコア登録関数
void CScore::SetScore(int score)
{
if (m_HiScore < score) m_HiScore = score;
}
int CScore::GetScore()
{
return m_HiScore;
}
630 :
デフォルトの名無しさん :2008/06/23(月) 20:59:18
VC++ 2008 Express で、どのあたりまで作れるの? ウィンドウズアプリケーション作れる? 製品版とどのくらいの差があるのかな。
631 :
デフォルトの名無しさん :2008/06/23(月) 21:04:43
632 :
デフォルトの名無しさん :2008/06/23(月) 21:08:22
633 :
デフォルトの名無しさん :2008/06/23(月) 21:40:57
>>629 何が書いてあるのかさっぱりなんですが・・・
ワロタ
>ハイスコアを記録させたいのですが、
>>628 記録方法で、3点
・ハイスコアの出し方
・画面表示のしかた
・ファイルへの書き方
ファイルへの書き方のような気がする。間違ってたら言って。
>>635 何が書いてあるのかさっぱりなんですが・・・
641 :
デフォルトの名無しさん :2008/06/24(火) 23:32:04
質問です VC++のMFCで計算したデータを、 作成しているExcelテンプレートの特定の文字列に上書きすることは可能ですか? 例 MFCのexe → テンプレート起動 → 「kekka」に計算結果を上書き → 別名で保存(テンプレートはそのまま) こんな感じで
poiがいいよ
643 :
デフォルトの名無しさん :2008/06/24(火) 23:59:51
>>642 JAVA?のほうがやり易いんですかね・・
ググってきます
DirectXでゲーム作るのが目的でVC++始めた よくありがちな厨房ですが Win32APIなプログラムでオセロ作るのに1ヶ月もかかった馬鹿な漏れに MFCとは一体何なのか勉強すべきなのかを教えてください
・ExcelをCOM経由で叩く。ライセンスとプロセスの残りには注意 ・Excelを純な「表」として使ってるなら、ODBCドライバ。 SQLの言う「テーブル」に当たらなければ涙目 ・(Excel2007形式)、ドトネト3.0+OpenXMLSDK ・Java+POI ・Lotus123形式が扱いやすいってJoelがいってた
646 :
641 :2008/06/25(水) 01:04:25
>>645 Excelのバージョンでも違うみたいですね
ちょっとほかの方法を考えてみます。ありがとうございました
647 :
デフォルトの名無しさん :2008/06/25(水) 02:30:52
>>644 Studioに支援機能があったりして感じ大掛かりだけど、ぶっちゃけ、ただのWin32APIのラッパークラスだよ
だから、ちょっとしたツール作るには便利だけど、覚えたからと言って何か新しい事が出来る訳では無く、
知ってて困る事は無いけれど、知らないからと言って何か作れない訳じゃないって事で判断ヨロ。
Visual Studio.NET2003を使っているのですが、リソースを開いたとき プロパティが灰色で全く何も表示されなくなってしまいました。 戻し方はありますでしょうか? もしくは、VCの設定を完全に初期状態に戻したいのですが、 どの辺をいじったら良いでしょうか?
649 :
デフォルトの名無しさん :2008/06/25(水) 05:52:15
>>644 MFCはWin32をラップするクラスを集めたライブラリではありません。
Windows上で動作する一般的なアプリケーションソフトは、win32API
だけで完成するものではありません。
簡単に理解できる例をあげると、ワードプロセッサーで範囲を選択し、
これをドラッグアンドドロップする。
ただこれだけの動作が、COMを必要とします。
そこで現在のMFCは、ビジネスソフトウエアにとって必要とされる機能を
含むフレームワークとして構築されています。
フレームワークが想定しているアプリケーションを開発する場合には、
とてもうまく機能すると思われますが、そうでない場合には不満も
あるでしょう。
フレームワークが対象としている開発対象の場合でも、標準の見た目や
コードの古臭さに不満を持つ場合も多いようです。
今後、それらの不満の一部が解消される可能性もあります。
Visual C++ 2008 Feature Pack について調べてみてください。
Win32APIだけでもCOMは使えるんじゃなかったっけ?面倒なだけで。 MFCってのは、やろうとおもえば出来るが面倒だ、ってのを わかりやすく、扱いやすいようにしたものだと思ってただ
やればできるといっても現実的にはどうか アセンブリ言語でWindowsアプリを作るみたいにつらい
コメントで、 /* * */ の部分が折りたためるのですが、「宣言」となります。 「宣言」の部分にコメントの概要を表示したいのですが、可能でしょうか? 可能なら記述の仕方を教えて下ください。環境は2008EEです。
一度Win32アプリケーション プロジェクトでダイアログベースのアプリを作った後 MFCで同じものを作ると有難味がわかる。
MFCはゲーム作るには要らないな
>>644 にとって、ただの回り道でしかない
ゲームつくるのにMFCほどクソなものはない
ゲーム作るならC#がいいな
HSPならDirectXも使えて一石二鳥
DirectXならどれも使えるじゃないか、二鳥と言えるかどうか
659 :
644 :2008/06/25(水) 17:12:21
>>647 649 654
ありがとうございまつ
ちょっと面倒なことをやるときの便利なクラスくらいに認識することにします
今のところDirectXのゲーム作るくらいしか目的ないので後回しでよさそうですね
>>656 C#育ちなのでゲーム作りでC#が楽というのは同意なのですが
ランタイムの配布がめんどくさすぎます
「そのランタイムはなんで必要なの?」とか聞いてくるやつに説明するのもめんどくさすぎです
XNAなんかはランタイム地獄のくせに配布も考慮してくれないクソっぷりでorzです
VC++勉強し始めたのも「DirectX使うゲームの配布が楽そうだったから」という理由だけです
ランタイムなんて気にしちゃだめだ。 それを言ったらWindows自体がランタイムだ
いや気にしろよ
そんなの気にするやつはドM
まあソレを言ったらDirectXもランタイムだがw
VCつかってもWindowsフォームアプリケーションで作ったら結局ランタイムが必要な罠…
VBランタイムだけは入れない。 RPGツクールランタイムも入れない。
VBのランタイム、Vistaには最初から入ってるよ
>>641 MFC関係なくVC++で可能。どうやるかは、自分でがんばってください。
(OLEを使うだけ。MFCならOLEラッパクラスもあったはず。)
>>659 MFC便利だよ。俺はとりあえず入れてる。
STL代わりにもなるし、ちょっとした時に便利。基本APIのラッパーだから軽いし。
objdump 見たいなコマンドはVCでは何になるのでしょう?
671 :
デフォルトの名無しさん :2008/06/28(土) 15:37:24
IntelliSenseについて質問させてください。 #ifdef TEST #include <hoge.h> ・ ・ #endif 上記のような内容のインクルードファイル"master.h"を、 main.cpp内でインクルードし、IntelliSenseでhoge.hで定義 されたメンバを表示させたいんですが、できません。 解決策はないでしょうか? 環境はXPsp3+VC++2008です。
>>671 表示させたい直前で1分待つ。その後、ctrl+space
673 :
671 :2008/06/28(土) 16:07:04
>>672 待ってもだめでした。ncbファイルを削除してもだめです。
#ifdefと#endifをコメントアウトすればIntelliSenseは問題ないんですが、
先の例のmaster.hは外部ライブラリなので中身をいじるとコンパイルでこけます。
書き忘れましたが、VC++2008はExpress版です。
常識的に考えて、 コメントアウトされてるヘッダでインテリセンス出来るわけが無いだろ。
#define TEST
Win32APIプログラムがメインですが VC++2005 から VC++2008 に移ったときに プラットフォームSDKが標準でインスコされる以外のメリットを教えてください またこれはやばいだろというデメリットもあったら教えてくださいお願いします
劇的ってほどではないが2008の方が軽かったりする
な、なんだって〜?! 真っ先に2005よりは重いと言われると思ってたのに 軽い・・だと・・?!
>>669 世の中のほとんどのフリーソフトは、VC++。
速度が違う。映像処理のソフトなんか作れば、他のVB、C#、JAVAなんか使い物になんない。
>>667 胡散臭いな。OSかプログラムの差じゃね?
timeGetTimeで実測出してよ。
680 :
671 :2008/06/29(日) 00:38:48
>>675 それでIntelliSenseは効きますが、コンパイルで定義済みだと怒られます。
外部ライブラリの中身は把握してませんし、中身もいじれないので・・・
>>679 ほとんどは言い過ぎ
フリーソフトは大分Delphi、BCB製も含まれてる
もちVBもあるけど
最近は.netもちらほら
個人で作る場合は自分の環境に合わせて作るし 企業で作る場合は環境に合わせるか汎用にするかで違うっしょ
683 :
204 :2008/06/30(月) 00:16:57
Visual Studio .NET 2003のVisual C++で コマンドライン引数としてファイル名を指定するにはどうすればいいですか?
通信をするプログラムを作ったんですが、環境によりセキュリティソフトがwinsockをラップして通信を遮断してしまいます。 winsockをOSのものから強制的に使わせるにはどうしたらよいでしょうか? SPIというらしいんですがどうしたらよいのか。
685 :
204 :2008/06/30(月) 02:18:00
すみません。 過去に一度聞いたことがありました。 コマンドライン引数をファイル名で指定するとき、ファイル名の半角スペースが パラメータ区切りと見なされて別々の引数になってしまうとのことでしたが ファイル名のスペースは何で置き換えればいいのでしょうか?
>>685 スペースを置き換えるんじゃなくて、引数をダブルコーテーションで囲んであげればいいよ。
>>684 パソコンの所有者がブロックさせてるんだからブロックされるのはしかたがない。
どーせAdminで実行してるんだろ、という前提で、 現存するファイヤーウオールソフトを列挙して 自動的に殺すコード書けばええやんw
そんなこと簡単にできるの?
スパイウエアでも作る気か?
>>204 ・ソリューション
+プロジェクト を右クリックしてプロパティのページを表示する。
−構成プロパティ
+デバッグ でコマンド引数を指定する。
現在、「TMPGEnc 4.0 XPress」というソフトを自動で操作しようと思い、 プログラムを作成しているのですが、ファイルのドラッグ&ドロップ処理の所でつまっています。 DLLインジェクトを使い、DLL内からドロップ処理を行うことで、他プロセスへのドロップは可能になり、 「メモ帳」などのアプリでは、うまくいったのですが、「TMPGEnc 4.0 XPress」では、まったく動作しません。 そこで「Spy++」を使い「TMPGEnc 4.0 XPress」を調べてみたところ、 ドラッグ&ドロップしてもWM_DROPFILESメッセージが発生していないことが分りました。 そこで質問なのですが、本当にWM_DROPFILESを使わずにドロップされたファイルを取得することは可能なのでしょうか? また、この場合の解決策を提示して頂けるとありがたいです。
DragAcceptは?
>>693 どうもです。
DragAcceptをtrueにし、ドロップ処理を行ったところ、WM_DROPFILESは発生しませんでした。
手動でこのソフトにドラッグ&ドロップを行ってもWM_DROPFILESは発生しません。
しかし、ファイルはちゃんと開かれます。
やはりWM_DROPFILESを使わずに取得していると思われるのです。
ここ初心者スレですけど
>>696 どうもです。やはりそうなりますか。
「OLE DragDrop」はこの問題について調べている時に、いくつかサイトを見つけていたのですが、
他プロセスのウィンドウにドロップするという課題は解決していたので、必要ないと思っていました。
「OLE DragDrop」は最終的にSendMessageでWM_DROPFILESを投げるものでは、ないのでしょうかね?
手動でドロップしてもWM_DROPFILESが発生しないのであれば、SendMessageでWM_DROPFILESを送っても、
動作しないのでは、と思いまして。
「OLE DragDrop」について調べてみます。
わざわざ解答者が少なそうなスレを選んで質問する変態
>>697 ちょっと前にどうしてもWM_DROPFILESが発生しなく困ったことが
あったけどOLEDragDropにしたらあっさり解決したよ。
701 :
デフォルトの名無しさん :2008/06/30(月) 23:30:33
702 :
デフォルトの名無しさん :2008/07/01(火) 00:02:28
指定したファイル名のファイルが存在するかどうかを調べる 関数ってありますか? 今は以下のものを自分で定義して使っています。 bool exist_file(const string& fname) { _finddata_t data; return _findfirst(fname.c_str(), &data) != -1; }
>>701 すいません。勘違いして安定するVer(2005)のほうをいれていたので、外部エディタは必要なくなりました。
せっかくだからこのまま使います。
VC++2008でWNDCLASSのhIconの指定にLoadIconを使ってきているのですがMSDNライブラリを見るとLoadImageへ移行しろとあるので置き換えたところ 「: error C2440: '=' : 'HANDLE' から 'HICON' に変換できません。'void*' から非 'void' 型への変換には明示的なキャストが必要です。」と出てしまうのですがどうしたらいいのですか?
つーか解説書(サイト)の型についてを再読して来い
まずはLoadImageの説明を読むのがいいかな
>702 FindFirstFile
VC2008のエディタの設定についての質問です。 行間の幅を調整することは不可能なのでしょうか。
templateの使い方を教えてください class parent; class child : parent; の2つのクラスがあって、 void hogeFunc(vector<shared_ptr<parent> > & param) を呼び出したいとき、 vector<shared_ptr<parent> > vp; は渡せるけど、 vector<shared_ptr<child> > vc; が渡せないのはなんでかわからないです。 お分かりの方、理由を教えていただけないですか。 ちゃんと、pとcは親子関係にあるので問題ないと思っています。
vector<shared_ptr<child> >& から vector<shared_ptr<parent> >& に変換できないから。
ここはC++スレじゃなくてVCスレだよ
すごく初歩的な質問ですいませんが… Visual C++ 2008 Express Editionを使っているのですが、 リソースの追加の仕方がわかりません。 ヘルプを見てやろうとしたのですが、「プロジェクト→新しい項目の追加→リソース ファイル (.rc)」が無く、 メモ帳で空のリソース スクリプトをプロジェクトに追加しても「ソリューションエクスプローラでプロジェクトを右クリック→追加→リソース」が選択できない状態になっていて困っています。 どうしたらいいのでしょうか。
製品版を買う
割る
Visual C++ 2005 で下のようなクラスを作ったんですが、Key_input()で i に代入、読み込みの操作を加えようとエラーが出ます。 変数の使い方を間違ってるのでしょうか?C++のクラスの使い方を見ながらやったつもりなのですが…… ---------- Button_sousa.cpp ---------- #include "StdAfx.h" #include "Button_sousa.h" Button_sousa::Button_sousa(void){} void Button_sousa::Key_input( KeyEventArgs^ e ) { // 入力されたキーに対する操作を呼び出す switch( e->KeyCode ){ case Keys::A: MessageBox::Show( "push A" ); break; default: MessageBox::Show( i.ToString() ); // ここでエラーがでる break; } } ---------- Button_sousa.h ---------- #pragma once using namespace System::Windows::Forms; ref class Button_sousa { public: Button_sousa(void); void Key_input( KeyEventArgs^ kc ); private: int i; };
半角スペースで書いたからインデント全部消えたorz
MessageBox::Show( i.ToString() ); // ここでエラーがでる そもそもこれで何をしたいのか意味が分からん ToStringメソッドを使うの?int型に?
別にいいじゃん、それは。
エラー内容ぐらい書けよ。
検索するとJAVAの資料ばっかり出てくる…
i なんか使ってないんだからコメントアウトしとけ // MessageBox::Show( i.ToString() ); // ここでエラーがで
char buff[256]; wsprintf(buff, "%d", i); MessageBox::Show(buff); でおk
CLRなんだし、MessageBox::Show( i.ToString() ); 自体は問題なく動く 未初期化のiだっておっけー。 エラーが出る原因は別にあるはずなんだけど。
なんで、VC++2008の、strftime _tcsftimeは、 書式に無い文字を渡すと例外終了するのかなあ。 単に無視してくれりゃいいのに。 自前でパースしてから、渡してやるしか無いのかな。
そんなくだらないことで文句いうやつも珍しいな
ちょっと見てみたけど _ASSERTE( ( "Invalid format directive" , 0 ) ); だからデバッグ時だけの話じゃん。
730 :
717 :2008/07/03(木) 14:34:48
いろいろとすみません。 発生したエラーは、 『追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。』 というものです。 iはクラスで変数を使うテスト用に用意したものです。 static int i; にするとエラーなく使えるんですがこれが正しいのかもわからず今検索中。。。 作りたいのはAを押すとiが増えてBを押すとiが減るみたいな感じです。あくまでもクラス内で完結したい。
intはプリミティブな変数じゃないの?Integerにしないと。
とにかく
>>717 の通りに書いて実行しても何も問題出ないんだが?
その追加情報の前に何かメッセージ出てるだろ?
隠さずに全部書けよ
プログラムとエラーを書きます。 CLRのWindowsフォームアプリケーションで作りました。 ---------- エラー ---------- 'System.NullReferenceException' のハンドルされていない例外が test.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。 ---------- Button_sousa.h ---------- #pragma once using namespace System::Windows::Forms; using namespace System; ref class Button_sousa { public: Button_sousa(void); void Key_input( KeyEventArgs^ e ); private: int i; }; ---------- Button_sousa.cpp ---------- #include "StdAfx.h" #include "Button_sousa.h" Button_sousa::Button_sousa(void){i = 123;} void Button_sousa::Key_input( KeyEventArgs^ e ) { switch( e->KeyCode ){ case Keys::Right: i++; break; case Keys::Left: i--; break; default: MessageBox::Show( i.ToString() ); break; } }
手入力で追加した部分を //########## 追加 ########## と書きました。 ---------- Form1.hから抜き出し ---------- #pragma once //########## 追加 ########## #include "Button_sousa.h" ---------- 中略 ---------- private: /// <summary> /// 必要なデザイナ変数です。 /// </summary> System::ComponentModel::Container ^components; //########## 追加 ########## private: Button_sousa^ buttonSousa; #pragma region Windows Form Designer generated code ---------- 中略 ---------- //########## 追加 ########## Button_sousa^ buttonSousa = gcnew Button_sousa(); } #pragma endregion private: System::Void Form1_KeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e) { //########## 追加 ########## buttonSousa->Key_input( e ); } }; }
Button_sousa のインスタンスはどうやって作ってる?
>>734 Button_sousa^ buttonSousa = gcnew Button_sousa();
を
buttonSousa = gcnew Button_sousa();
こうしてみ。
737 :
717 :2008/07/03(木) 15:41:52
これ以外は何もいじってません。 この状態でコンパイルするとフォームが表示されます。 予定では、左右キーで数字の増減、そのほかのキーで現在の数字を表示です。 ですが、どのキーを押しても、 ---------- エラー ---------- 'System.NullReferenceException' のハンドルされていない例外が test.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。 が表示されます。 エラーの場所は case Keys::Right: i++; break; case Keys::Left: i--; break; default: MessageBox::Show( i.ToString() ); break; のいずれかです。 『int i;』を『static int i;』とすると予定通りの動作をしますが、これが文法的に正しいのかはよくわからないので今調べてるのが現状です。
738 :
717 :2008/07/03(木) 15:43:59
>>736 なんと!できました!
宣言というか作り方というか、そこら辺が間違ってたんですね。。。
ちょっと勉強しなおしてきます。
ありがとうございました。
VC++2008EEでeventと打ったら青字になりました。 eventなんていう予約語C++にはないと思うのですが、どういうことですか?
そのeventにカーソル置いてF1押せばいいじゃない
>>741 レスthx
おお・・こんな便利な機能が。
しかし、何もインクルードしてないのに、EventClassとか意味がさっぱり・・。
event keyword [C++] のほうで。 CLRじゃなきゃ関係ないけど、色は変わるね
VC6 MFC ダイアログベース ボタン設けてウィンドウをキャプチャしてビットマップ保存するコードない?
745 :
デフォルトの名無しさん :2008/07/06(日) 16:32:44
WinDef.h にて宣言されている typedef int INT; って、何のためにこんなことしてるのでしょうか。 将来の型サイズが変わったときの互換のため? また #define CONST const; に至っては何のための宣言か想像すら出来ないです、 これらの宣言は何を意味してるのでしょうか。 よろしくお願い致します。
小文字と大文字が入り乱れるとキモイから。 const DWORD hoge CONST DWORD hoge 大文字が宣言で、小文字が変数冥。 このほうがわかりやすいし、マブいっしょ?
>>746 レスありがとうございます。
VC++でソースを見る際に、予約語が青文字になるのに対して、
置換後の INT や CONST だと青くならないので、逆に見にくいと思ってたのですが
そういう思想があったのですね。
.NET ではクラス名称に大文字と小文字が入り乱れてますが、
それはまた違う思想なんでしょうかね。
設計者が違う
min,max マクロが非常にウザい
#define NOMINMAX
Win32APIでマルチスレッドプログラムを作ってますが、 排他処理をするにはセフォマやミューテクス以外で手段はありますか? ある変数に複数のスレッドが同時にアクセスするのを防ぐためミューテクスを使ってますが ミューテクスだと遅いだの、プロセス間で使用しないなら使うべきでないとか聞きます 他に手法がわからないのでとりあえず無名のミューテクスを使っていますが、 もっといい手法があったら教えてください
クリティカルセクションかな。あと、セマフォだと思うぞ。
簡単なことしか出来ないが、Interlocked〜とか
CTest* h = new CTest[100]; h[0] = new CTest(); delete[] h; 上記のコードでVC++6.0でコンパイルすると 二項演算子 '=' : 型 'class CTest *' の右オペランドを扱う演算子は定義されていません。(または変換できません)(新しい動作; ヘルプを参照) というエラーが発生します。 どこが間違っているのかわからないので教えてくださいませ。
h[0] = * new CTest(); としたらいけました。なぜ?
>>756 >h[0] = new CTest();
h[0]はCTest型。
っつぅか1行目でCTestを100個作ってるのになんでこれをするんだ。
>>756 おお!
CTestの実態を100個作るということなのですか
CTestの入れ物を100個作るのかと思ってました。
>>757 h[0]の型はCTest、
new CTest()の型はCTest* のため。
そもそも756の1行目の時点でh[0]にはCTest型のオブジェクトが
入ってるから2行目は不要だし、メモリリークするよ。
Javaから来た人?
>>760 なるほどー。なんとなくわかってきました。
てっきりh[0]には &CTestが入るのかと思っていました。
>Javaから来た人?
VBのほうから来ました。
あれ?そうすると当初の予定の CTestのポインタが100個入る配列は どうやって宣言すればいいのでしょう???アホですみません。
CTest* h[100];
CTestへのポインタの配列が欲しいなら、CTest * h[100];。 でもこれにnew CTest[100]の1回で詰めるのはできないよ。 ほんとにポインタが100個欲しいの?CTestが100個並んでればいいんじゃないの?
>>763 おお!なるほど。
>>764 ありがとうございます!
これでポインタと配列をマスターできた気がします。
オレがC/C++からjavaに行って混乱したものの逆パターンだなw
そういえばJavaも少々かじりました。
配列の限界っていくつですか? a[9999999999]とかってできるんですか?
配列のサイズが1Mバイト超えたらエラーが発生した。
それは配列のサイズの限界じゃなくて 設定したスタックサイズの限界。
1.5G配列でも問題無くできる、どんなボロイPC使ってるのか? ほんとにVCなのか?
自動変数で作ればスタックサイズの影響を受ける。 それ以外なら、連続でとれるメモリの大きさに影響される。
スタックか、そんな巨大なデータをスタックに持つ時点で設計が間違っている。
32ビットコンパイラなら2Gが限界だろ
絵を描くとき、点の座標を配列で記録していくのは設計が間違ってるんですか? たとえば座標1000ポイントある絵を座標を計算で変化させながら移動させて 1秒間に100コマとか作るのって配列でやる以外にいい方法はありませんか
int *a = (int*)malloc(sizeof(int) * 9999999999); これでヒープ領域に確保される
メモリ不足の前にオーバーフローしてそう
メモリストリームに書いていくのはどうか
1秒間に100コマとかいうレベルだと 適当な思いつきで作っても使い物にならない。
関数は抜けてないので消去されない、ヒープ領域の意味がわからないですが、もっと早い段階でメモリは消去されているってことなんですか? つまり使い終わったらもう消去されてるんですか?
描画1000点目近くになると表示している時間が短すぎて線が消えてるんですよね 1点目近くは1000点描画する間描画されてるんで見えるんですが・・・むずかしいですね
思いつきで作っても使い物にならない。
PC用モニタに倍速液晶でもきたの?
DirectXにまかせたほうがいい
#includeとか#defineの多重定義を防ぐのは #pragma onceしかないのでしょうか? AとBがincludeされていたらCをdefineとかやりたいんですが可能ですか?
#ifndef hoge // hoge が define されてなかったら #define #endif ---------- #ifdef hoge // hoge が define されていたら #define #else // hoge が define されてないとき #define #endif とか
>>786 ありがとうございます
#defineについては期待通りの挙動を得ることができました
#includeも同じような処理ってありますか?
#defineを違うのに変えてみればいいんじゃないかな
ここで聞くのが適切かわからないのですが、まずお聞きします。 連想配列を使いたいんですが、使い方がわかりません。 ぐぐってみた感じ、「C++のSTLでmapがある」というのはわかりました。 とりあえず、STL、CLI、MFCとか単語だけはわかったのですが、どういった環境での開発がSTLとかCLI、MFCとかの状態に当てはまるのかわかりません…。 で、とにかくやってみたのですが、コンパイルエラーでした。・゚・(ノд`)・゚・。 [やってみたこと] とりあえずチェックボックスを2つ配置。 iniView.cpp の上の方に #include <map> と書き、下のほうで void CiniTestView::OnBnClickedCheck2() { map <CString, CString> m; //ここの行がエラーの対象 } [結果] エラー 1 error C2065: 'map' : 定義されていない識別子です。 エラー 2 error C2275: 'CString' : この型は演算子として使用できません エラー 3 error C2065: 'm' : 定義されていない識別子です。 エラー 4 error C2275: 'CString' : この型は演算子として使用できません
[作りたいもの] WindowsMobile6用のiniファイル読み書き機能つきタイマー →iniファイルの情報の取得に連想配列を使いたいです。 →タイマー機能はとりあえず実現できたので、設定ファイルを作りたいと思いました。 [開発環境] OS : WindowsXP ツール : Visual Studio 2005 Pro(90日評価版) [プロジェクトの設定] ・MFCスマートデバイスアプリケーション ・SDKとして、Windows Mobile 6 Professionalを選択 ・シングルドキュメント、ドキュメント ビュー アーキテクチャサポートあり、スタティックライブラリでMFCを使用 ・基本クラスにCFormViewを選択 よろしくお願いいたしますm(_)m
std::map エラーメッセージ読めよ
std::map <CString, CString> m;
>>791-792 ありがとうございますm(_)m
エラーメッセージで「定義されていない」というのはわかったのですけど、
includeしているものがいけないのか、何が足りないのか、はたまたMobileでは使えないのか、判断がつかなかったのです。
名前空間の解決のみの話だったのですね。。。
コンパイル通りました!
どうもありがとうございました。
VC++6でMFC ダイアログアプリと、そこから動的に呼び出されるDLLの作成で困ってます。 開発を楽にしようと上記二つのプロジェクトを1つのワークスペースにまとめたのですが、 コンパイル確認しようとするとき、DLLのソースをアプリのプロジェクトに参加させそうになったり(プロジェクトの構成切り替え忘れ)、 DLLのビルド忘れ防止に依存関係を有効にしたら アプリのビルド時のリンクでDLLファイルが読み込めないとエラーが出たり。 どうプロジェクトを構築すればいいのでしょうか? よろしくお願いします。
>>795 IDEが対応していないことをしようとしても、無理が出て結局楽にならないでしょう。
2003以降に移行してソリューションを使いましょう。
ありがとうございます。 VC++6では無理ですか。 アマゾンでVisual Studio 2008 Standard Editionの値段調べたら28,161円。 ・・・うーん・・・。 アカデミックの方買えないかなぁ・・・。
プログラマが28161円に躊躇しなくてはいけない現状をなんとかしないとな もっと給料うpを訴えよう!
Expressつかえよ……と思ったらMFCか。
MFCがなくともAPIで同じことできるんじゃないの?
めんどいじゃん。
Upgrade版なら2008stdは19000円くらいになると思たけど アレならExpressからのUpgradeにしとけばいいし。
28161円に躊躇するような奴はプログラマじゃない 例えば本当に切れ味のいい28161円の包丁に躊躇する料理人がいると思うか? 例えば本当に切れ味のいい28161円の村正に躊躇する侍がいると思うか? 例えば本当にゆうこりんみたいな28161円のダッチワイフに躊躇する変態がいると思うか? つまり、おまえは本当の変態じゃない
30000円しか持ってなかったら、28161円のダッチワイフに躊躇する
オリエント工業のダッチワイフなんてエンタープライズエディションより高額なんだぜ?
俺の息子が元気な内に600kのを買いたいな
アカデミック版の2005が安かった。
それより虹にいく方法を… せめて抱き枕+会話可能なAIを…
抱き枕の中にスピーカー入れればいいだけだろjk
VC6 は for 文で定義した変数のスコープが for 文の外でも有効なのでちょっとびっくり。 あと STL に max がなかったり・・・。
for は #define for if(0); else for で解決。 あと、std::max はあったと思う。
ないあるよ。標準的なマクロにmaxがあるからだと思う。
質問です。 VC++6.0 ダイアログベース MFC WindowsXP SP3 の環境で作成した、ウィンドウをBMPで保存するプログラムが、 別のPC VC++6.0 WindowsXP おそらくSPなし の環境ではBMP画像が「描画できませんでした」となってしまいます。 SPの有無でうまく動作しないのでしょうか? どうかご教授おねがいします。
>>814 ありがとうございます。
ただいまソフトが動作しなかったPCが手元にないので、確認してもらっているところです。
そのPCはインターネットに繋がっていないので、おそらくアップデートしていないのではないかと思われます。
また確認できたら報告します。
おまんこちゅっちゅしたいお
昔のPCでパラレルポート使ってH/L自由に出力するプログラム作ったことがあるのですが、 XPやVistaなどで同じようなことをするにはどうすればよいのですか? 尚、パラレルポートには限らず、ポートなら何でも良いです。 出来ればタダで実現できる方法が良いです。
MSにカネ払わないと無理
819 :
デフォルトの名無しさん :2008/07/14(月) 22:04:08
VC++ 2008 Express Edition を使っています. 名前空間中のヘッダファイルの関数宣言と,ソースファイル中の関数定義が, クラスビューで重複して表示されるのは仕様なんでしょうか? ------------------------- // Foo.h namespace Test { void Hoge(); } ------------------------ ------------------------ // Foo.cpp namespace Test { void Hoge(){;} } ----------------------- と書くと,クラスビューで {}Test . Hoge() Hoge() と表示されます.どっちをクリックしても関数定義に ジャンプしてくれるので実害は無いのですが.. # static メンバ関数にしようかな.
>>818 やっぱそうなんですか。嫌な予感はしてたんですが。
カネか・・・・・・
>>817 COM1とかLPT1とかというファイル名でCreateFileすればいい。
それとSetCommStateとかでググればサンプルも見つかると思う。
823 :
デフォルトの名無しさん :2008/07/15(火) 01:55:10
VC++2005を使用しています。LibraryのImportについてうまくいかないので質問させてください。 QuickTime SDKをいれ、QuickTime SDKのAPIを使用したいのですが、 コンパイルで外部シンボルエラーになってしまいます。 (InitializeQTML(long))というのが LNK2001: 外部シンボル ""extern "C" short __cdecl xxxxx" (?xxxxx@@$$J0YAFJ@Z)" は未解決です。 以下のことは行いました。 Windows用のQuickTimeSDKをインストール プロジェクトのプロパティで該当するlibの入っているフォルダを参照するように 設定(libをバイナリファイルで覗いてみると、使用したいAPIがみつかりました) 使用するAPIを定義したヘッダファイルのインクルード 共通言語ランタイムを://clr:pureから://clrへ 外部ライブラリは上記で大丈夫だと思っていましたが、コンパイルエラーになってしまいます。 何か、さらに必要な点、確認すべき点はありますでしょうか。
「追加の依存ファイル」は?
825 :
823 :2008/07/15(火) 02:25:14
>>824 さっそくのお返事ありがとうございます。
追加の依存ファイルでlibファイルを指定してみました。特に使用していない関数のシンボルエラーになりました。存在するlibは全て追加してみたのですが・・・
基本交換法の関数化ってどうやるんですかね
827 :
デフォルトの名無しさん :2008/07/15(火) 08:08:00
pragma warning(disable) と同様の効果を、プロジェクトのプロパティで指定する方法はありますか
>>823 エラーにextern "C"まで出てるのはおかしい。
その部分、いったいどうやって書いた?
>>813 です。
確認したところSP2だということがわかりました。
SP3にアップデートすれば解決するのでしょうか?
>>829 原因の一つとして考えられるってだけで、なおるかはわかんないよ。
でももしそのプログラムがGDI+を使ってるんだとしたら、HotFixを試してみるのがいいし、
単体HotFixじゃなくても、SP3でその原因は排除できるね。
>>830 SP3を入れて、また試したいと思います。ありがとうございました。
SP3いれるときは、最悪の場合クリーンインスコする覚悟で。 重要なデータのバックアップを忘れるな。
Visual C++ 2005 でCLRのフォームアプリケーションを使用しています。 クラスを作成してそこからあるDLLの関数に関数のポインタを渡したいのですが、 渡したポインタが『__clrcall』だから『__stdcall』には使えないと言われてしまいます。 どうやればstdcallの関数を作ることが出来るのでしょうか?
>>833 プロジェクトのプロパティの全般で、共通言語ランタイムサポートが
/clr:safeや/clr:pureになっているならそこを/clrにして、
問題の関数に__stdcallを付ける、void __stdcall hoge()のように。
よくわからんが、 #pragma unmanaged
>>827 プロジェクトのプロパティ→(構成プロパティ)→C/C++→詳細→指定の警告を無効にする
>>834 hoge.hで、
----------
public:
static void __stdcall mes( void );
----------
とし、hoge.cppで、
----------
void __stdcall hoge::mes( void )
{
MessageBox::Show( "呼び出すよ!" );
}
----------
としましたが、どちらも以下のワーニングが出てしまいました。
「warning C4441: '__stdcall ' の呼び出し規約が無視されました。代わりに、'__clrcall ' を使用しました」
/clr:pureでも/clrでも出てしまうので、現在試行錯誤中です。。。
>>835 はよくわからないので勉強中です。
質問です。 Visual C++ 2008 Express Editionをインストールしたのですが、 libc.libやlibcmt.libなどのランタイムが見当たりません。 別途ダウンロードする必要があるのでしょうか?
>>837 そのクラスの外に関数を書け。
ref/valueクラス内ではその警告も言っている通り__clrcallしか選べない。
>>838 実際にコンパイル・リンクしてみてエラーにならなければ、どこかにインストールされているはず。
まあlibc.libは無いけどな。 libcmt.libはあるはず。
842 :
838 :2008/07/16(水) 18:13:02
>>840 ,841 レスありがとうございます。
libc.libはありませんでしたがlibcmt.libはありました。見落としていました。
申し訳ありませんでした。
エディタの行間を広くするにはどうすれば良いでしょうか。
上下が広いフォントを使う
845 :
デフォルトの名無しさん :2008/07/17(木) 21:56:18
例えばどんなフォントがありますか? 自分が持ってるフォントを色々試したのですが、相応しいのが見つかりませんでした。
Ariel Unicode MS なんか広かった気がするが。 フォントは自分で探す方がいいよ。いろいろあって面白いから。
847 :
837 :2008/07/17(木) 23:29:33
>>839 たぶん出来たんだと思う…… 曖昧ですみませんが。ありがとうございました。
デバッグするハードがうまく動かないので試せないorz
ワーニング等は出なくなりましたので大丈夫だと思います。
今日はじめたばっかの初心者なんですが、.NETとか使わない、バイナリexeプログラムを作りたいんですが、どのプロジェクトを選べばいいんでしょうか??
849 :
デフォルトの名無しさん :2008/07/17(木) 23:57:23
NETは使わない
850 :
デフォルトの名無しさん :2008/07/18(金) 00:06:11
VisualC++の空のプロジェクトからはじめろ
851 :
デフォルトの名無しさん :2008/07/18(金) 00:12:42
【ソースファイル→追加→新しい項目】で出てくるウインドウに、 cppファイル?(ソースコード)の追加が無くなってしまったのですが、 どうしたらでてきますでしょうか?
852 :
デフォルトの名無しさん :2008/07/18(金) 00:51:18
853 :
デフォルトの名無しさん :2008/07/18(金) 00:55:08
原因がわからずじまいで気持ち悪いですが、修復インストールしたら出てきました。
>>852 ありがとうございました。
また、VCのversionなど環境を書かずに質問してしまって申し訳ないです。
ζ / ̄ ̄ ̄ ̄\ / | | ⌒ ⌒ /| | (・) (・) ||||||| | ⊂⌒◯-----∂)___ ___ | ||||||||_ / ゙Y" \ \ヽ_/ \/ \ \ / \ / ̄ ̄ ̄ ̄) * ( ̄ ̄ ̄ ̄) | ─< |\ >─ ( | ) / (|ミ;\ ( ) ヽ  ̄ ̄) /(___人|,iミ'=;\ (  ̄ ̄ ) /" ̄ ̄ ̄ ̄ / 《v厂リiy\  ̄ ̄ ̄ ̄\ / / ゙|,/'' v:,,、.¨)z,_ \ / / ミ/ .-─ .゙》z、 \ / / 〔」″ノ‐ 、u ¨\ ) ( / ゙|, ..冫 .rー  ̄\_ | | 〔 ミ./′ ..r-ー __,,ア┐ | | | {. .,,,, .′ .´′ .¨\| | | ∨ ノ冖′ =vvvvvv¨\ | / ミ. ,i' .゙\_ | / .{. ノ ,r¬″ .¨\
855 :
デフォルトの名無しさん :2008/07/21(月) 04:26:20
856 :
855 :2008/07/21(月) 11:36:47
すいません、自己解決しました。
>>856 どうやって解決したか書いていただけると
後からこのスレを見た人に役立ちますよ
質問の文章すらまともに書けないやつに 読んでためになるようなことが書けるわけがない。
860 :
デフォルトの名無しさん :2008/07/21(月) 21:12:26
漏れはVisual C++を10年以上使い続けて来たが、ごく最近になってはじめて エディタの「Ctrl + Tab」の挙動を理解することができた。今までは理解しておらず、 混乱しながら「Ctrl + Tab」を使っていた。 あまりに自分が情けないので、ダメなのは自分だけではないことを知るために、 クイズを出したいと思う。Visual C++を使ってる人は以下の問題にチャレンジして 間違えて欲しい。 [問題] あなたはVisual C++で6枚の.cppファイルを開いている。ファイル名は A, B, C, D, E, Fとする(.cppは省略)。Aが一番上に表示されていて、 その下に B, C, D, E, Fと続く。 (1) Ctrlキーを押しながらTabキーを1回押し、両方のキーを離す。この操作を4回 繰り返した。ファイルの順番はどうなったか? (2) Ctrlキーを押しながらTabキーを4回押した。ファイルの順番はどうなったか? 答えを考えた後、実際やってみて答え合わせをし、間違った人は告白して下さい。
Ctrl + Tabなんかwin3.1の時ぐらいしか使ってない
Ctrl+Tabでウィンドウ切り替えられることを教えてもらった時に、1分で把握したよ
863 :
860 :2008/07/21(月) 21:21:03
>>861 1つ下にあるファイルに切り替えるときどうやってるの?
告白しちゃった///
VC++2008での質問です 変数の宣言時の初期化方法で、正しい方法がわからないので教えてください ○ double goukei = 0.0; × double x[1000] = 0.0; x[1000]を初期化するには、forループで回すしかないでしょうか? 何か良い方法があれば教えてください
〜 = {0.0};
869 :
デフォルトの名無しさん :2008/07/24(木) 00:11:52
vectorつかえよ
870 :
867 :2008/07/24(木) 00:12:35
>>868 無事、コンパイルできました
どうもありがとうございました
871 :
867 :2008/07/24(木) 00:37:31
vectorを調べてみました #include <vector> using namespace std; typedef struct{ double x = 0; } X; vector<X> x; ありがとうございます
872 :
デフォルトの名無しさん :2008/07/24(木) 00:39:41
ちがう
873 :
867 :2008/07/24(木) 00:49:51
typedef struct{ double x = 0.0; } X; vector<X> x[1000]; こうでした
874 :
デフォルトの名無しさん :2008/07/24(木) 00:50:53
ちがう
なにこの流れw
876 :
867 :2008/07/24(木) 01:14:24
#include <vector> struct x1000 { double x = 0.0; } std::vector<x1000> x(1000); 今度は自信があります
877 :
デフォルトの名無しさん :2008/07/24(木) 01:17:19
std::vector<double> x(1000,0);
878 :
867 :2008/07/24(木) 01:33:19
>>877 ありがとうがざいます
こちらの方がアクセスが速くなるのですね
勉強になりました
ベクタは、配列と同様に格納された連続要素を保持する。
ベクタ要素へのアクセス、ならびに要素の追加は 定数時間 で完了する。
一方で特定の値を突き止める、ならびにベクタへの要素挿入は 線形時間 を要する。
ZeroMemory( x, sizeof( x ) );
RtlZeroMemory( x, sizeof( x ) );
memset
全ビットを0で埋めたからといって値が0.0になることは保証されてなかったと思う。
x[0]=0.0; memcpy(&x[1],&x[0],sizeof(x)-sizeof(x[0])); ダメ?
std::fill(x, x + sizeof x / sizeof x[0], 0.0);
インテリセンスが機能しなくなったのですが、どこか設定をいじってしまったのでしょうか。 該当する項目などがあれば教えてください。
>>886 VisualStudioを落として.、ncbを消して、VisualStudio起動して、リビルドしてみて。
888 :
886 :2008/07/25(金) 17:09:11
>>887 ありがとうございました。無事、機能させることが出来ました。
女子がみただけでおまんこぐちょぐちょになるようなコードの書き方を教えてください。
マスでもかいてろ
男子がみただけでちんこびんびんになるようなコードの書き方を教えてください。
o->i;
((i))
プログラマの想像力ってやつはすごいな。
// とある技術書より GetSakura()->Insert(GetMyStick());
>>895 GetSakuraクラスにInserメソッドがあるのが気に食わん!!
受動態にするべきではないだろうか!?
MyJoyStick.InsertTo(Sakura);
でも std::vector やコモンコントロールのリストビューとかも、同じ意味で insert 持ってない?
…折角のネタの流れをぶった切ってスマンが質問させてください C++/CLIで、コンソールアプリケーションを操作するアプリを作ろうとしてます。 コンソールアプリは標準入力から情報を受け取って標準出力に吐き出す、というモノ。 でもって、コンソールアプリに情報を送り、返ってきた情報に応じて処理を分岐し、 さらにコンソールアプリに情報を送って…ということをやりたいと思っています。 ところがその第一歩目から躓いてしまいました。 myProcess->StartInfo->UseShellExecute = false; myProcess->StartInfo->RedirectStandardInput = true; myProcess->StartInfo->RedirectStandardOutput=true; myProcess->Start(); StreamReader^ myStreamReader = myProcess->StandardOutput; StreamWriter^ myStreamWriter = myProcess->StandardInput; myStreamWriter->WriteLine("list"); textBox1->Text=myStreamReader->ReadLine(); myStreamWriter->WriteLine("exit"); myStreamWriter->Close(); myStreamReader->Close(); myProcess->WaitForExit(); myProcess->Close(); …というコードを書いたら、「list」のコマンドは実行されるのに、「exit」が実行されません。 listの位置にexitを持ってきたら正しく動作します。 何故期待通りに動いてくれないのでしょうか。また、どうしたら正しく動作するようになるのでしょうか。
900 :
デフォルトの名無しさん :2008/07/29(火) 09:36:35
スピンボタンで増減値を浮動小数点型にするにはどうすればいいですか?
intだから浮動小数点型は不可 でも小数だろうが増減は整数倍だろ
902 :
デフォルトの名無しさん :2008/07/29(火) 10:37:46
ボタンを押したときに0.1単位で値が増減するようにすることはできるんでしょうか?
そりゃできる。
904 :
デフォルトの名無しさん :2008/07/29(火) 10:52:16
教えてくださいお願いします。 いろいろ検索したけど分からないんです><
環境は? spinコントロールの内部では整数で持たせておいて、 エディットには自分で整数を割り算とかして表示させればいいだろう。 で、UDN_DELTAPOS のタイミングでエディットに反映させればいいかと。
906 :
デフォルトの名無しさん :2008/07/29(火) 11:29:14
VC++6.0でOSはXPです。 UDN_DELTAPOS関数の中にどういうコードを書けばいいんでしょうか?
907 :
デフォルトの名無しさん :2008/07/29(火) 11:30:09
うどん出るタポス
>>899 先ずは、ReadLine()で"list"の結果が正しく読めているのか確認するところから始めてはどうだろう。
或いは、コンソールアプリケーションの方に起動メッセージを出力するようにして、それをStart()の後にReadLine()して読めるか試すとか。
まさかとは思うが、コンソールアプリケーションの方ではちゃんと改行を出力しているよな?
909 :
デフォルトの名無しさん :2008/07/29(火) 11:32:36
質問です void Hoge::Foo1() { static int a = 0; } void Hoge::Foo2() { static int a = 0; } 上記のFoo1とFoo2の関数内のstaticな変数aは共有されているのでしょうか?
>>909 いいえ。仮令static変数であろうとも関数内で定義した変数は関数内でしか見えません。
やってできないことではありませんが、そのケースの場合はHogeがクラスならHoge内に置けばいいでしょう。
或いは、Hogeの非staticメンバ変数にする方がいいかもしれません。
912 :
909 :2008/07/29(火) 11:38:10
今VC++の環境がなくて、C++のソースを読んでいて疑問に思ったものですから・・・
913 :
909 :2008/07/29(火) 11:39:31
914 :
909 :2008/07/29(火) 11:42:51
>>911 >やってできないことではありませんが
ん?共有はされてるの?
>>914 いいえ。
アクセスすることは、不可能ではありません。
916 :
909 :2008/07/29(火) 11:46:11
>>911 宣言しないと見えないのか、スコープの問題で見えないのか、どっち?
わかるとは思うが、
>>910 は
>>906 宛てね。
ググって先を見てる間にこんなにレスがつくとは、、リロードすべきだった。
0.1をかける
919 :
909 :2008/07/29(火) 11:50:03
>>915 よくわかりました
ありがとうございました氏ね
920 :
909 :2008/07/29(火) 12:00:21
>>911 >そのケースの場合はHogeがクラスならHoge内に置けばいいでしょう。
>或いは、Hogeの非staticメンバ変数にする方がいいかもしれません。
知るかよ・・・
そのソース書いた奴に言ってくれ
>>915 曖昧過ぎてわからん
おまえそれで人とコミュニケーション取れてるのかよ
>>920 だから、共有はされていないんだよ。アクセスする方法はあるけど。
922 :
909 :2008/07/29(火) 12:08:24
Visual C++ 2008 Express Editionで正規表現を使おうと思い、
http://homepage3.nifty.com/k-takata/mysoft/bregonig.html の正式版のlibやdllにリンクさせようとしたのですが、
ビルドしようとするとエラーになってしまいます。
ソースは↓のようにしています、どうすれば良いのでしょうか。
#include stdafx.h
#include <windows.h>
#include <tchar.h>
#include bregexp.h
int main(){
TCHAR msg[80];
BREGEXP *rxp = NULL;
TCHAR t1[] = _T( Yokohama 045-222-1111 );
TCHAR patern1[] = _T(s/(\\d\\d)-\\d{4}-\\d{4}/$1-xxxx-xxxx/g);
BSubst(patern1,t1,t1+_tcslen(t1),&rxp,msg);
}
直リンしてしまったorz エラーはこんな感じです。 1>regex.obj : error LNK2028: 未解決のトークン (0A000017)extern C int __cdecl BSubstW(wchar_t *,wchar_t *,wchar_t *,struct bregexp * *,wchar_t *) (?BSubstW@@$$J0YAHPA_W00PAPAUbregexp@@0@Z) が関数 int __cdecl main(void) (?main@@$$HYAHXZ) で参照されました。 1>regex.obj : error LNK2019: 未解決の外部シンボル extern C int __cdecl BSubstW(wchar_t *,wchar_t *,wchar_t *,struct bregexp * *,wchar_t *) (?BSubstW@@$$J0YAHPA_W00PAPAUbregexp@@0@Z) が関数 int __cdecl main(void) (?main@@$$HYAHXZ) で参照されました。
925 :
デフォルトの名無しさん :2008/07/29(火) 15:16:04
ダブルクオートがことごとく消えてるけど、貼り付けるときに消えたのか?
あと 中の lib はリンクするようにしたか?
>>925 BREGONIGを使いたいのです。
>>926 携帯に送ってから貼り付けたので、
その時に消えてしまったみたいです。
929 :
デフォルトの名無しさん :2008/07/29(火) 15:34:40
>>928 では自前のラッパー提供するので使うか参考にしてくれ
3つにわける
#include <string>
#include <windows.h>
using namespace std;
#define BRNOJAPANESE 1 // \wが2バイト文字にHitする default
#define BRNOZENGO 2 // ^', '$'が文の前後にHitする default
#define BRDOTENTER 4 // ドットが改行にHitする
#define BRGLOBAL 8 // グローバルな検索 default
#define BRNOEIGO 16 // 大文字と小文字を区別しない default
typedef struct bregexp { const char *outp; const char *outendp; int splitctr; const char **splitp; int rsv1; char *parap; char *paraendp; char *transtblp; char **startp; char **endp; int nparens; } BREGEXP;
typedef int (WINAPI *bregfnc)(char * , char * , char * , BREGEXP ** , char *);
typedef void (WINAPI *bregfnd)(BREGEXP *);
int bregreplace(string &, string, string, int);
int _bregfind(string &, string, int&, int);
930 :
デフォルトの名無しさん :2008/07/29(火) 15:35:40
int bregreplace(string &x, string p, string q){return bregreplace(x, p, q, 27); } int bregreplace(string &x, string p, string q, int opt){ if(x.size()==0 || p.size()==0)return -1; string str = "s " + p + " " + q + " "; if(opt &1)str+="k"; if(opt &2)str+="m"; if(opt &4)str+="s"; if(opt &8)str+="g"; if(opt&16)str+="i"; int n; for(n=1;;n++) if(str.find(n)==0xFFFFFFFF) break; str[1]=str[p.size()+2]=str[p.size()+q.size()+3]=n; HINSTANCE hd = LoadLibrary("bregonig.dll"); if(!hd){cout<<"bregonig.dll load err\n";return -1;} bregfnc BSubst = (bregfnc)GetProcAddress(hd,"BSubst"); bregfnd BRegfree = (bregfnd)GetProcAddress(hd,"BRegfree"); char msg[80]; BREGEXP *rxp = NULL; n=BSubst( &str[0], &x[0], &x[x.size()], &rxp, msg); if(n>0){ int m=(rxp->outendp)-(rxp->outp); x.resize(m); memcpy(&x[0], rxp->outp, m);} if(rxp)BRegfree(rxp); return n; }
931 :
デフォルトの名無しさん :2008/07/29(火) 15:36:16
char *bregfind(string &x, string p, int &size, int opt){ int n=_bregfind(x, p, size, opt); if(n==-1)return NULL; return (char*)n; } char *bregfind(string &x, string p, int &size){ return bregfind(x, p, size, 19);} int _bregfind(string &x, string p, int &size, int opt){ if(x.size()==0 || p.size()==0)return -1; string str = "m " + p + " "; if(opt &1)str+="k"; if(opt &2)str+="m"; if(opt &4)str+="s"; if(opt&16)str+="x"; int n; for(n=1;;n++) if(str.find(n)==0xFFFFFFFF) break; str[1]=str[p.size()+2]=n; HINSTANCE hd = LoadLibrary("bregonig.dll"); if(!hd){cout<<"bregonig.dll load err\n";return -1;} bregfnc BMatch = (bregfnc)GetProcAddress(hd,"BMatch"); bregfnd BRegfree = (bregfnd)GetProcAddress(hd,"BRegfree"); char msg[80]; BREGEXP *rxp = NULL; n=-1; if( BMatch( &str[0], &x[0], &x[x.size()], &rxp, msg) ){ size = (rxp->endp[0])-(rxp->startp[0]); n=(int)(rxp->startp[0]);} if(rxp)BRegfree(rxp); return n; }
932 :
デフォルトの名無しさん :2008/07/29(火) 15:46:04
vb.netなんですが、あるフォームから別のフォームを開いて その別のフォームにある変数を渡したいのですがどうすればいいでしょうか
メソッドとかプロパティとか
935 :
906 :2008/07/29(火) 16:45:28
>910 ありがとうございました、 VisualC++初めて1週間なんでちょっとまだよくわかりませんが参考にしてみます。
C言語で何ができんのよ?
937 :
デフォルトの名無しさん :2008/07/29(火) 19:41:34
visual C++ 2008 express editionインストール中(特にその中のNet Flameのインストール中です)にパソコンの電源が落ちてしまい、 その後インストールしようとしてもそこで止まってしまいます どうにかしてインストールする方法はないでしょうか?
>>929 ラッパーありがとうございます。
おかげさまでBREGONIGを使えるようになりました。
かなり利便性が高いライブラリなので助かります。
>>934 マルチバイトやユニコード版は試しましたがダメでした。
>>938 駄目ってどう駄目だったの?
君が貼ったコードとリンク先のライブラリで、こっちでエラーが出ないことは確認済みなんだが
Acrobatを操作したいのですが下記コードで Acrobatは起動するのですがファイルを読み込むと パラメータの数が無効です。というエラーメッセージが表示されます。 どこかおかしいところがありますでしょうか? CAcroApp *objAcroApp = new CAcroApp(); CAcroAVDoc *objAcroAVDoc = new CAcroAVDoc(); objAcroApp->CreateDispatch("AcroExch.App"); objAcroAVDoc->AttachDispatch(objAcroApp->m_lpDispatch); objAcroApp->Show(); objAcroAVDoc->Open("D:\\hogehoge\\bin\\hoge.pdf", "");
941 :
デフォルトの名無しさん :2008/07/30(水) 12:33:48
エディットボックスで値を設定して ボタンを押すと実行されるというようなプログラムをつくりたいんですが。 SetDlgItemText(IDC_EDIT1,ss); このエディットボックスのテキストssの値を onbutton1() の関数の中で使うにはどうすればいいですか? エディットボックスに入れた値をボタンを押したときに反映させたいんですが。 やってみるとssは定義されていない識別子ですとエラーがでてしまいます。
SetDlgItemText(IDC_EDIT1, _T("あほ")); とりあえずこれでやってみ
>>941 onbutton1の中ではGetDlgItemTextで取り出せばいいと思う。
944 :
デフォルトの名無しさん :2008/07/30(水) 12:51:12
キモチ悪いんでこっち見ないでくれますか?
945 :
デフォルトの名無しさん :2008/07/30(水) 13:00:28
>943 ありがとうございます GetDlgItemText(IDC_EDIT1,ss) でやってみたけどssは識別されていない識別子です、 ってエラーがでました。
946 :
945 :2008/07/30(水) 13:02:45
定義されていない識別子でした。
>>945 onbutton1の中ではssという変数は存在しない。
だから別の変数を作ってそいつへGetDlgItemTextで内容を受け取るんだ。
948 :
デフォルトの名無しさん :2008/07/30(水) 13:24:44
ありがとうございます、やってみます。
pow識別子が見つかりませんでした。と出て実効できません。 どこを直せばいいのか教えてもらえないでしょうか? #include<stdio.h> int f(int x,int y) { return pow(2*x,y)+x-3*y+5; } int main(void) { int x; int y; printf("xを入力せよ:"); scanf("%d",&x); printf("\nyを入力せよ:"); scanf("%d",&y); printf("\n答え:%d",f(x,y)); return 0; }
C初心者はCスレへ行け
>>950 mathにすると今度はprintfとscanfの識別子が見つからなくなるんですよね…
stdioではできないんでしょうか?
>>951 スレ違いでしたか…すみません
>>952 pow関数はdouble使わないとエラーでるってのは分かりましたが今度はprintfとscanfがエラーにorz
>>953 #include <stdio.h>
#include <math.h>
つーかほんとにVC++以前の話だな
>どこを直せばいいのか教えてもらえないでしょうか? C言語の認識
頭だろ jk
958 :
940 :2008/07/30(水) 14:06:27
できました!
>>954 それにすると今度は他の部分でエラーが出るように(つд`)
う〜ん、ちょっと初歩的過ぎるみたいなのでスレ移動します。
お目汚しすみませんでしたorz
1のexeからボタンを押して1を開いたまま2のexeを起動し、 2のexeのボタンを押したら1に引数を渡したいのですが、 どのように引数を渡したらよいのでしょうか? 環境はWinXP Pro、Visual C++2005、MFC ダイアログベースです。
プロセス間通信の実装には以下のようなものがある。 メッセージ - メッセージキュー ソケット パイプ、名前付きパイプ 同期(セマフォ、ミューテックス、イベント) 共有メモリ RPC、ORB Local Procedure Call 出典: フリー百科事典『ウィキペディア(Wikipedia)』
グローバルアトムとか
VS2005 なんですが、生成したアプリケーションがランタイムエラーで起動しません。 VC6.0では問題なく動いたのですが・・・・。 なぜなんでしょう? MSDN等ではマニフェストファイルを作成するようにとのことでしたが、 特に問題は無いと思っています
いきなりなんだよ、もっと状況を詳しく。 移行したやつなのか?プロジェクトにマニフェストファイルが混ざってないか? もしあるなら、右クリックでそれ無効にしてみ。
VisualC++2008 ExpressEdition、OS vistaでWindowsAPIが使えません。例えば #include <windows.h> void main(void){ ::Beep(3000, 500); } Sample.exe の 0x762042eb で初回の例外が発生しました: 0x000006BA: RPC サーバーを利用できません。 このようになってしまいます。なにがいけないのでしょうか?
967 :
960 :2008/07/31(木) 09:56:49
>>961 ありがとうございます
1のListCtrlから1行取得して、2で編集したものを1に渡して再び1に表示したいのですが
その中ですとどれが一番使いやすいですか?
>>967 とりあえずソケットでやっとけば間違いない
if(((x-1)^2)+((y-1)^2<)=1) { inside++; gw_color(gw,00,80,00); gw_point(gw,480+(x*150),160+(y*150)); } else { gw_color(gw,80,80,80); gw_point(gw,480+(x*150),160+(y*150)); } 上記のようなif文を記述しているのですが、 error C2181: else 文が if と一致しません。 というエラーが出ます。 括弧などは確認したのですが・・・
970 :
デフォルトの名無しさん :2008/07/31(木) 10:19:31
969 ちょう初心者
971 :
デフォルトの名無しさん :2008/07/31(木) 10:21:05
if ( (x-a)*(x-a) + (y-b)*(y-b) <= 1 ) のように書く。
言って頂いて気付きました! 演算子が括弧の中に・・・有難う御座います、すみませんでした;
973 :
デフォルトの名無しさん :2008/07/31(木) 10:34:51
あと2乗は^でできないから
974 :
デフォルトの名無しさん :2008/07/31(木) 11:03:34
すいません。 エディットボックスとスピンボタンを使って。エディットボックス上に表示されている値を0.039で割って int型整数Aにして使うというプログラムでエディットボックスの中身は0.039の倍数である必要があります。 現在はスピンボタンを押すと0.039プラスされる設定になっており、 スピンボタンだけつかって値の設定をする分には問題ありません しかしエディットボックスに一度0.001など0.039の倍数以外の値を入れてしまうと、 スピンボタンを押すたびに0.039プラスされ 0.040,0,079......のように0.039の倍数でなくなってしまいます。 エディットボックスに5などの値を入れてスピンボタンを押した場合5に一番近い0.039の倍数、 に修正してint型の整数Aにして使いたいんです。 エディットボタンを押したときにプラスされる値は特に0.039にはこだわらなくて大丈夫です。
丸めの問題なの?常に文字列で管理しては?
976 :
デフォルトの名無しさん :2008/07/31(木) 12:32:06
え〜と、 引数が16進数で0x00〜0xFFまでの範囲だとしていされていて、 実際に設定する値は0〜10なんです。 0x00~0xFFまでを10進数に直しと 256になるんで1~10までに256個の数字を入れようとすると、 だいたい0,039刻みになるという感じなんですが。 どうやったらいいのか全然わかりません。
5が0.039の何倍か求める たぶんこれは少数で、倍数→整数倍だから、小数点以下を処理する。 これに0.39をかけると「5に一番近い0.039の倍数」の完成。 さらにこれを0.39で割りAを求める。(実質2行目の結果と同じ)
1.スピンボタン(UP)が押された 2.エディットボックス上の値を1000倍して取得 3.値を39で割る(小数切り捨て) 4.値を1足して、1000で割る 5.エディットボックスに書き戻し 1.スピンボタン(DOWN)が押された 2.エディットボックス上の値を1000倍して取得 3.値に38を足してから39で割る(小数切り捨て) 4.値を1引いて、1000で割る 5.エディットボックスに書き戻し
間違った 4.値を1足して(引いて)39倍してから1000で割る
980 :
デフォルトの名無しさん :2008/07/31(木) 12:59:31
>977 >978 ありがとうございます試してみます。
981 :
デフォルトの名無しさん :2008/07/31(木) 14:06:36
VC++2008で、フォームアプリケーションを作成してるのですが、 チェックボックスなどのCheckedChangedイベントは画面操作による変更によってのみ呼ばれるのですか? それとも、コードによってチェック状態を変更した場合にも呼ばれるのですか? どなたか教えてください。
たぶんこうだろうというのは想像つくけど 一応試して確認したほうがいいから自分で試してみればいい
>>982 すみません、実は初期化とイベントで同じ処理を書いていて、2回実行されてたのでおかしいと思って聞きました。
初期化でチェックボックスを変更してるのですが、イベントというのは画面での操作によって起こされるものだと思っていたので、ちょっと信じられなかったのです。
984 :
980 :2008/07/31(木) 15:05:17
>977 >978 できました!ありがとうございました!
985 :
デフォルトの名無しさん :2008/07/31(木) 16:06:33
スライダを動かすとエディットボックスの値が変化するようにするにはどうすればいいですか?
FormなのかMFCなのかWin32なのか。 どれにしても、スライダのメッセージハンドラでエディットの内容書き換えればいいかと。
同じ人間なの? とりあえずトラックバーで検索する
本ぐらい買って一通り読んだ方がいいよ
次スレのテンプレに入れてほしいな FormなのかMFCなのかWin32なのか。
文字列から指定の文字列で分割したいのですが、 そういった事が出来るsplitっぽい関数は何があるでしょうか。 System::StringのSplitだと文字列だとダメだったので。
関数はいくらでも自分で作れる
>>991 では何か良い方法を教えて貰えませんでしょうか。
strtokでも文字列で分割が出来ないんですよね。
その文字列とやら(char*?)をstringにしてSplitして文字列に戻せばいいじゃな。 つか、スレ終わっちゃうな。
>>993 std::stringにSplitってありましたっけ、検索しても出てこない…。
>>994 自分で
>System::StringのSplit
って言ってるじゃないか。
もっと詳しく環境やら書いてよ。それに単に文字列と書かれてもどれを指してるのかわからん。
>>996 すみません、小文字だったのでstdの方かと思いました。
環境はVC++2008で、文字列の型はどんなのでも構いません。
"abcdefg abcdefg"の文字列に対して、
"cd"の文字列で分割するといった事がしたいのです。
"cd"検索して"cd"の次から次の"cd"の前までコピーするだけだろ あと先頭と最後を考慮
うめーこ
千の風になって
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。