★初心者にVisual C++を教えるスレ★ Part32
Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。
■質問するにあたって
・エラーや警告のときはエラーメッセージを書きましょう。
・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。
・できるだけ具体的に。
質問の仕方については次のページが大変参考になります。
http://www.hyuki.com/writing/techask.html ■回答するにあたって
・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。
(MSDNのどの項目だとか、何のキーワードでGoogleするとか)
・ネタや煽りは軽く流しましょう。
過去スレ、関連スレなどは
>>2-5 辺り。
>>1 乙!
CPaneDialog::Createのパラメータ、nIDは何を入れればいいんですか?
>>1 乙
>>7 自分で決めたID
同じ親をもつ同士でかぶらなければいい。
たとえばCRectとかのインスタンスは作った関数を出る前に解放したほうがいいんでしょうか?それとも関数を出る時に変数と同じで解放されるんでしょうか?
解放する手段があるってことは解放する必要がある。 でも通常関数内で宣言したら消しようがないべ? スコープ抜けるときに消えるし、ちゃんとデストラクタも呼ばれる。 ただし、newで作ったら、delete必要。
なるほど、普通は関数を出たら消滅するとして、たとえば1秒間に何百回も関数が呼ばれる場合、 何度も同じオブジェクトを繰り返し作るのは速度的な問題以外に何かまずいことはありますか?
ダイアログにエクスプローラのように、ファイルを選択していろいろやれるコントロールを追加したいんですが これはTree Controlで頑張るしかないんですか?
>>11 newして作ったのなら開放が必要。auto変数なら無用。
>>13 シングルスレッドに限定すれば速度以外は問題ない。
マルチスレッドの場合に関しては情報不足。
Unicode 文字セットを使用して、LPTSTR型の変数の文字列を コンソール上で出力するにはどうすればよろしいでしょうか?
VisualStduio2005EEとVisualStudio2008EEって何が違いますか? やっとインストール終わったと思ったら20008があると知って変更したほうがいいか調べてます エディタの使いやすさは変わったでしょうか?
>>15 ありがとうございます。メモリが壊れやすくなるからなるべく無駄のないように作るのが普通だとかそういうルールがあるのかとおもいました。
newの意味がやっとわかりました。関数を抜けても消滅させないためにあるんですね。
>>16 printfでワイド文字列の書式指定するとか、wprintfみたいなワイド版の関数をつかう。
あとロケールを設定しないと正常に表示されない。
Windowsのコマンドプロンプトはchcpでもwcharは表示できないよね UTF-8なら出来るけど
21 :
16 :2008/11/01(土) 10:54:57
>>19 どうもありがとうございました。以下の内容でできました。
setlocale(LC_ALL, "");
printf("%S", LPTSTR);
設定に関わらず必ずUnicode文字列と決まってるなら、LPTSTRじゃなくてLPWSTR使っとけ。
23 :
デフォルトの名無しさん :2008/11/01(土) 13:50:40
・Visual C++2008 express ・開発環境・・WindowsForm・windowsXP プログラムを作ろう!という本を見ながらプログラムを組んでいるんですが、 // dicegame.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "Form1.h" using namespace dicegame; [STAThreadAttribute] int main(array<System::String ^> ^args) { // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; } この箇所で 1>.\dicegame.cpp(6) : error C2059: 構文エラー : 'namespace' 1>.\dicegame.cpp(6) : error C2238: ';' の前に無効なトークンがあります。 1>.\dicegame.cpp(20) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\documents and settings\user\my documents\visual studio 2008\projects\dicegame\dicegame\Form1.h(4)' で見つかる前に EOF が検出されました。 と言うエラーが出てデザインが表示できないんですが、どなたか原因がわかりますか??
クラスをウィザードで作ったあと、クラスビューを見てもクラスがリストに載ってないんです。 VS2008を再起動して見てみるとリストにあるんですけど、再起動なしで出てくるようにするにはどうすればいいんですか?一度ビルドしてもだめでした。
VC++2008EEを使ってCの勉強しようと思ってるですけど インスコした時の設定のままだとコンパイル等がC++基準になってるじゃないですか それをC基準にするには設定のコンパイル言語の選択をCにする以外に変えるところはありますか? あとその設定を既定値にするにはどうしたらいいですか? よろしくお願いします。
拡張子をcにすればc言語、cppにすればC++言語
有料版の製品を一切使わずにVC++ 2008 EEを使って SQL Serverに接続することは可能ですか?
可能です。.NET使えば楽だと思う。 VC++ 2008 EEで.NETやるときはC++/CLIという言語で書くことになる。 SQLConnectionで検索してみ。
>>29 ありがとうございます。
さっそく検索してみますね。
現在Visual C++でゲームを製作していて
ttp://homepage2.nifty.com/natupaji/DxLib/program/ActionSample.cpp を参考にしてアクションゲームを作っているのですが
// マップの描画
{
int i, j ;
for( i = 0 ; i < MAP_HEIGHT ; i ++ )
{
for( j = 0 ; j < MAP_WIDTH ; j ++ )
{
// 1は当たり判定チップを表しているので1のところだけ描画
if( MapData[i][j] == 1 )
{
DrawBox( j * CHIP_SIZE, i * CHIP_SIZE,
j * CHIP_SIZE + CHIP_SIZE, i * CHIP_SIZE + CHIP_SIZE,
GetColor( 255, 255, 255 ), TRUE ) ;
}
}
}
}
// キャラクタの描画
DrawBox( ( int )( PlX - CHAR_SIZE * 0.5F ), ( int )( PlY - CHAR_SIZE * 0.5F ),
( int )( PlX + CHAR_SIZE * 0.5F ) + 1, ( int )( PlY + CHAR_SIZE * 0.5F ) + 1,
GetColor( 255, 0, 0 ), TRUE ) ;
のところを自分で書いた画像に置き換えようとしているのですが、なかなかうまくいきません・・・。
どのようにすればいいのか教えてもらえないでしょうか?
状況を「うまくいかない」としか言わない奴には教えない事にしてる。
えらそうに
いや実際教えようがないだろ。32とは別人だが。
35 :
31 :2008/11/03(月) 22:59:47
loadgraphなどを使って画像は表示されるのですが、表示されるだけで動かなかったり。 どうしてもキャラクタの描写を自分の書いた画像に置き換えることができない状態です・・・。
お客様にエスパーさんはいらっしゃいますか
その動かないコードをなんで書かないんだよ。 間違ってるところも指摘できないじゃないか。
知ってることを教えるのとソリューションを提供するのとは別なんだとつくづく
DrawBoxやloadgraphなんて聞いたこともない
URLにDxLibってあるから想像はつくが
>>31 loadgraphが全部小文字なのはおかしいな
つーか、普通に貼ったURLのとこちょっと見ただけで普通に画像に差し替えられるが どこが引っ掛かってるのだろうか。一応絵は出るらしいからパス設定じゃなさそうだし。
42 :
デフォルトの名無しさん :2008/11/04(火) 20:33:37
質問です。 PC初期化したのでVC++を再インスコしたんですが プログラム書いてもビルドできません。 2〜3秒フリーズして「応答なし」 となってしまいます。 これはスペックの問題なんですかね? OS vista CPU celeron M メモリ 2G のノートPCです。
XPでカーソルを変更するにはどうすればいいんですか? HCURSOR hCursor; hCursor = AfxGetApp()->LoadCursor(IDC_WAIT); SetCursor( hCursor ); hCursorがNULLになるんです
MSDNライブラリくらい調べてから質問しろよ
複数イベントから同一のデータを更新したい場合 たとえばグローバル変数を使って // グローバル変数 int g_count; // ボタン1押下時処理 void OnButton1() { g_count++; } // ボタン2押下時処理 void OnButton2() { g_count++; } のようにやることができますが、 同様のことをグローバル変数を使わずにやる方法はないでしょうか?
あります
ダイアログウィンドウで配置しないでクリエイトで作ったCButtonのキャプションのフォントサイズを変更するにはどうすればいいんですか?
>>47 言語とか環境は何?
まあWM_SETFONTで。
おっと、言語はC++か。
CButtonならおそらくMFC
ああ、そっか
で、CFontがスコープ外れて消滅し フォントが変わりませんと、また質問が来る・・・と
フォントの変更できました。ありがとうございました。
ボタンが灰色になっていて押せません。 m_Btn1.EnableWindow(TRUE); でも m_Btn1.SetCheck(BST_UNCHECKED); でも出来ません。起動後一瞬黒くなるんですが、すぐ灰色になります。どういうことですか?
55 :
デフォルトの名無しさん :2008/11/05(水) 22:38:10
iostreamはどこからダウンロードすればいいのでしょうか? あるいはどこのフォルダに格納されているのでしょうか? iostreamを用いたプログラミングがしたいのですが…
C++で#include <iostream>してエラーが出るなら、再インストールでもしておけ。
マウスメッセージはポイントにあるコントロールにメッセージが送られるんですか? コントロールのクラスを作って、その中でメッセージ対応の処理を書く以外で、クラスを作らずに親ウィンドウでメッセージ処理をするにはどうすればいいんですか?
58 :
デフォルトの名無しさん :2008/11/05(水) 22:45:59
>>56 それででますね…
再インストールしたほうがよさそうですね
59 :
デフォルトの名無しさん :2008/11/05(水) 22:54:51
>>56 あ、違います。
#include <iostream>
じゃなくて
#include <unistd.h>がエラー出てました
unistd.hというヘッダファイルはどうやって登録すればいいんでしょうか?
unistd.hというファイルをどこからかダウンロードして#include ""の絶対パスで指定するんですか?
<unistd.h>はUnix/Linux固有のものがいっぱい詰まったヘッダ。 Windowsでいうとこの<windows.h>みたいなもの。 当然VC++用の<unistd.h>なんてない。 ようするに、VC++でそれをコンパイルさせないといけないのなら、 <unistd.h>なしでコンパイルできるようにすることこそがWindowsへの移植という君の仕事。 趣味ならCygwinでGCCでも使っておけ。
>>59 とりあえず、エラーが出た
#include <unistd.h>
をコメント行(//)に変えた状態でコンパイルしてみれば、<unistd.h>内で
宣言・定義された関数や定数のうち、実際にプログラム中で使われている
ものだけが未定義エラー等で出力されると思うので、それらの機能や値の
意味を調べて、Windows APIや、Windowsの定数に置き換えてやればよい。
ソース内で使われている場所は、コンパイルエラーや警告が出た行。
エラーとして出ない関数や定数は、今回のプログラム中では使われて
いないので、放置してよい。
バカ正直にUnix互換のライブラリを用意する必要はない。
>>62 ハンドラはこれだけではダメなんでしょうか?
ボタンが灰色なだけでなく、メッセージも受け取れません。
ヘルプを見れば全てわかるように書いてあるそうですが、仕組みがわからず読み取ることもできません
おしえてください。お願いします。
//FileView.h
CMFCButton m_Btn;
afx_msg void LButtonDown();
//FileView.ccp
BEGIN_MESSAGE_MAP(CFileView, CDockablePane)
ON_BN_CLICKED(7, LButton)
END_MESSAGE_MAP()
CFileView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_Btn.Create(_T("OK"), WS_VISIBLE | WS_CHILD, rectDummy, this, 7)
m_Btn.EnableWindow(TRUE);
}
void CFileView::LButton()
{
TRACE0("OK\n");
}
2008SP1のMFCはまだ触ってないからよくわからんが、 せめてIDは、、リソースをアクティブにした状態で編集メニューから リソースシンボル→新規作成で作ってそれ使ったほうがいいぞ・・ 今までのViewにそのやり方でボタン貼り付けたら機能するから CDockablePaneの仕様によるのかもね。
2008では、CDockablePaneなんて追加されたのか。 CSplitterWndクラスで作成する分割ウィンドウみたいなやつなら、ペイン 自体はCFrameWndみたいな枠だけじゃないのかな? 何がやりたいのか判らんが、CReBarとCDialogBarとかを使う方が簡単じゃ ないのかな? 慣れていれば、シンボルはresource.hを直接編集してもいいと思うけど、 とりあえずマジックナンバーはやめようよ。 VC6ではできたのに、2003以降、IDE内で開いているプロジェクトのリソ ースペインに、他のリソースを開いてドラッグ&ドロップでコピーしたり、 カット(CTRL-X)⇒ペースト(CTRL-V)できないけど、2008って直ってるの かな? リソース編集しててると、突然IDEが落ちるなんてこともある。
ありがとうございます。普通はこのやり方で合ってるというのがわかってよかったです。 ボタンではなくてドックパネルを徹底的に調べてみます。 他のコントロールは継承クラスを作ってそこでメッセージ処理をしていたのですが、 さすがにボタン1つのメッセージ処理のためにクラス作成は酷いんじゃないかと思い、、、が、うまくいかずはまりこんでしまいました。 マジックナンバーはアプリウィザードで作られたひな形がCreateのなかで連番を使っていたので そのまま続きの数字を使って追加してしまいました。いつかはIDSの登録物と重なるし、オブジェクトが判別しづらいのでは?とは思ったのですが 全て修正しないと気持ちよくないし、ひな形の流れに負けて連番にしてしまいました。
子ウィンドウから親ウィンドウで作ったオブジェクトのメンバ関数にアクセスするにはどうすればいいんですか?
解決しました
プリコンパイル済みファイルの名前のStdAfxってどういう意味をもっているんでしょう? 変更することもできるけれど、気にせずにそのまま使うのが普通なんでしょうか。
俺が前にここで聞いた時にはStandard Application Frameworksの略だって聞いた。
71 :
デフォルトの名無しさん :2008/11/08(土) 02:29:25
すみませぬ、質問させて下さい。 VC++2008で簡単なコンソールアプリを作ってみたのですが、 これをビルドして他人に渡してもエラーが出て実行できません。 他人のWindows環境で動作させるにはどのようにビルドすればよいのでしょうか?
自己解決しやした。
さっぱりわからんので教えてください。 VC++2008ExpressEditionで、Formでプログラムを作り始めて、 スクロールバーを縦横で表示・非表示を切り替えたい時、 ツールからフォームに貼り付けるとこうなります。 ↑ ← →↓ のように右下に小さい四角が出来ません。 ↑ ↓ ← →□ こんな風にしたい 上手いことスクロールバーを表示するにはどこをいじればよいでしょう?
貼り付けるんじゃなくて、Formが 内蔵しているメンバを弄るの。 this->HorizontalScroll->Visible = true; this->VerticalScroll->Visible = true; とか何とか
お手数ですが質問させてください。 SystemTimeToVariantTime 関数をを使いたいのですが、使用すると以下のエラーが発生します error LNK2001: 外部シンボル ""extern "C" int __stdcall SystemTimeToVariantTime(struct _SYSTEMTIME *,double *)" (?SystemTimeToVariantTime@@$$J18YGHPAU_SYSTEMTIME@@PAN@Z)" は未解決 です。 調べたところ、SystemTimeToVariantTimeを使うにはole32aut.lib が必要そうなのですが、どうやって ole32aut.lib を手に入れればよいか わかりません。(そもそもole32aut.libがないのかエラーの原因 なのかも微妙なのですが) 環境は Visual C++ 2005 Express です。
>>75 Windows SDKをインストールしろ。
インストールしたら、スタートメニューのMicrosoft Windows SDKの中のどっかにVisual Studioとの統合みたいな項目があるからそれを叩け。
77 :
75 :2008/11/09(日) 00:16:12
ありがとうございます。試してみます。
ウィンドウに、ダイアログリソースを張り付ける手順は ・ダイアログリソースを作成 ・スタイルを子に設定 ・ウィンドウのOnCreate関数に CDialog m_Dialog1; m_Dialog1.Create(IDD_DIALOG1, this); と CRect rectClient; GetClientRect(rectClient); m_Dialog1.SetWindowPos(NULL, rectClient.left + 1, rectClient.top + 1, rectClient.Width() - 2, rectClient.Height() - 2, SWP_NOACTIVATE | SWP_NOZORDER); を追加 これ以外になにをすればいいんですか? これでコンパイルできるのですが、向こう側が透けて見えてダイアログが表示されないんです。教えてください。お願いします
http://msdn.microsoft.com/ja-jp/library/yhth57kd (VS.80).aspx
MFC ライブラリ リファレンス
CDialog::Create
リソースからダイアログ ボックス テンプレートを使ってモードレス ダイアログ ボックスを作成します。
親ウィンドウを作成したときにダイアログ ボックスを表示する場合は、
ダイアログ ボックス テンプレートで WS_VISIBLE スタイルを使用します。
それ以外の場合は、ShowWindow 関数を呼び出す必要があります。
81 :
73 :2008/11/09(日) 14:44:41
いままでVC毛嫌いしててBCC使ってたけど、VCなかなか便利じゃないか 引数の型とかを教えてくれるのが感動した
すいません、自分のIPアドレスを変更するにはどうしたらいいのでしょうか。 確保するのはすぐに判ったのですが、変更方法がさっぱりです。
ダイアログ画面の中のコントロールをすべて再描画するにはどうすればいいんですか?
VC++をこれから始めようとしているものです解説書見ながらサイコロゲームを作っているところです
VC++2008WindowsXP
実は他の方のサンプルを試してみたいのですが
サンプルの使い方もわかりません
手持ちの解説書にはそういうことは書いてありませんのでどなたかお力貸してください
下記は先人の方が質問されて、大先輩の方がサンプル付きで解答されています
上のアドレスが最初の質問で下のアドレスが2回目の質問のようです
最終的にはサンプルの全角空白(書いた方がわざとそうしています)を半角空白にして
SendInput()関数を入れると問題なく動いているようです
質問「キーの自動入力」
ttp://okwave.jp/qa4023937.html?ans_count_asc=2 ttp://soudan1.biglobe.ne.jp/qa4027968.html 質問者の方と私は環境が似ているので
このサンプルを動かしてみたいのですが
VC++の開き方すらよくわからない状態ですので
どなたかわかるように説明していただけないでしょうか?
私がやったこと
サンプルの全角空白を半角空白に8箇所直した
VC++2008を起動する→ファイル→新規作成→プロジェクト→Win32→
Win32プロジェクト→プロジェクト名入力→OK
(Win32アプリケーションウィザード)次へ→何も変更しないで完了
出てきた”(グローバルスコープ)”というソースコードのページの
どこに上記のサンプルを貼り付ければいいでしょうか?
”// TODO: ここにコードを挿入してください。”の部分へ貼り付けたり
・このときエラーはいっぱい出ました
わからないので全てを削除して貼り付けてみたりしましたがビルドできません
・この時のエラーは下記の1つでした
fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?
VC++2008の開き方、サンプルの張り方教えてくださいm( _ _ )m
どの部分が抜粋でどの部分が関数丸ごとかわかるようになるまで もっと初歩的なことやったほうがいいと思うよ。
>>86 さん
そこをなんとか教えていただけないでしょうか?
よろしくお願いします
取りあえずサンプルの全角空白を半角空白に直した後どうすればよいのか教えてください
お願いします
VOID setKeybrd( LPINPUT lpKey, WORD wVKey, BOOL bKeyDown ) { ・ ・ } これが関数だよ。 適当に最後にでも置いて、 VOID setKeybrd( LPINPUT lpKey, WORD wVKey, BOOL bKeyDown ); の1行を先頭のほうの // このコード モジュールに含まれる関数の宣言を転送します: のあたりにでも置いておく。 INPUT Key[ 2 ]; ・ ・ ・ if ( SendInput((UINT)(lpKey - Key),Key,sizeof(INPUT)) == (UINT)(lpKey - Key) ){ //”S”を押すと実行する既存のプログラム } これが本体だ。 自分が使いたいとこに置けばいい。 この使いたいところ、ができないうちは何もできんからあきらめろ。 {} でくくって case IDM_ABOUT: の次あたりに放り込んでもいいけどな。
>>88 さん
マジでありがとう(;´д⊂ヽ
どうしていいのかわかんなくて困ってたんです
使いたいところってのはまだ(ソースコード作って)ないんです
取りあえずこのサンプルだけで自分の環境でも動かせないのか知りたかったんです
詳しく本当にありがとうございました
助かりました心から感謝してます
ありがとうございましたm( _ _ )m
お世話になります VC++とC++の違い教えてください C++のサンプルコードはVC++でコンパイルできますか? 先ほど1時間かけてこの地方で一番大きな本屋さんへ行って解説本を2冊購入したのですが なんと! 帰りの電車の中で気づいたのですが1冊はVC++ではなくC++用だったんですorz まだレシート持ってるから電話して交換してもらった方がいい? 自分としては応用できそうならこのままこの本で勉強したいです その本は「○○の絵本」シリーズでちょっと有名な本です 挫折はしましたがJAVAやPHPの時も購入して良本というイメージがあったんです それで「VisualC++500の極意」と「C++の絵本」を持ってレジに行って買ったんです 内容的にはCを知っている方にC++とはこういうものですって感じです 私はCを習得したわけじゃないですけど なんとなくわかります Cで使ったPrintfのソースをそのまま使えるけどエラーが出ます、それは戻り値がないからで そのままでも問題はありませんが気になるのならmainの前に型intを付けて最後にリザルト0をつければいい こんな感じでわかりやすいんです 私が実際に使っていこうとしてるのはVC++EEなのでC++との違いが気になります 前置き長くなり申し訳ないです C++のサンプルはVC++で使えますか? よろしくお願いいたします
なんかこの手の質問多いな。 C++は言語の名前、VC++はC++で開発するための製品、の名前。
>>91 さん
即レスどもありがとです!
ということは問題無しですね
ドキドキしちゃったよ
教えてくれてありがとうですm( _ _ )m
話にならん低脳っぷりだな……小学生か。
超初心者ならしょうがないでしょ VC++とC++で迷うのは想定外だったけど 確かに知らなかったら迷うよなーとは思った
初心者とか関係ないだろ。 人に聞く前に検索すれば済む話。
理解できてる人だけが検索する単語を絞ることができる
こんちわ お世話になります 先輩たちのお陰でなんとかブラウザ作れましたありがとうございます (実は解説本、そのまんま^^) これでファイルの読み書きとあわせて2つのことができるようになりましたw ありがとうです この先、目標はブラウザで読み込んだテキスト内で文字検索して保存するです 例えばヤフーのトップ画面を見て「年金」や「少年」という文字を検索して あればその記事を保存するってことをやってみたいです やりかたとしてテキストファイルに保存しないで トップ画面をダウンロードしながら検索もする方法を希望です 多分これが一番早い方法だと思うからです ダウンロード中のヤフートップ画面から文字列検索する方法教えてください ブラウザを作れたと言っても解説本のまま入力して作っただけなので 私はまだ難しいことは一切わかりません ヤフートップ画面のテキストを保存する方法もわかりません どなたか優しく教えてください お願いします
98 :
デフォルトの名無しさん :2008/11/14(金) 11:06:23
Visual C++ 2005 EEを使っています。 C++の参考書などでは、 new で配列を確保した場合に開放は delete [] で行うとなっていますが タスクマネージャで使用メモリを調べてみると、delete [] ではなく delete のみの表記でも 同じように開放されているようです。 (MB単位の配列の new と delete を何千何万回繰り返しても、使用メモリが増加していかない) これは、VC++ではdeleteの配列開放処理についてはコンパイラが 面倒をみてくれるという事でしょうか? それとも、現在のC++では delete でも delete [] でもどちらでも問題ないのですか?
>>98 new[]したなら必ずdelete[]。deleteするのは[]の無いnewしたもの。混同しちゃダメ。
コンストラクタ/デストラクタが無いものだと問題が起きない場合もあるのかもしれないけど。
>>99 レスありがとうございます。
なるほど、単純なデータ配列ではなくて、コンストラクタやデストラクタのある
オブジェクト配列だと問題が発生するということですか。
メモリの開放自体がされないわけではなく、そういったオブジェクト内部処理に
問題が発生するという解釈でいいですかね。
単純なデータ配列(int配列のような)の場合に何か問題が起きる事例はありますか?
もちろん本来の記述ルールとして[]を付けるというのはわかってはいますが、
具体的にどういう問題が出るのかというのがいまいち良く分かりません。
未定義なんだったらメモリ開放しようが、デストラクタ呼ぼうがVC++の勝手だろ・・・
何が未定義
なんでこういう方向に行っちゃうのかな・・・。 new[]してdeleteは単純に間違い。
でも結構、「配列の最初の1要素しか開放されない」って言い切った説明をしてる奴が多いよな。 未定義のものは未定義でいいけど、間違った説明はいかんよね。
>>104 頭固いな
ここはC++のスレじゃなくてVC++のスレだから、
VC++としての挙動についての話をしてるだけだよ
もちろんC++のルールとしては間違いだ
107 :
デフォルトの名無しさん :2008/11/14(金) 15:31:37
MSがドキュメントとして明言してない限り、未定義の動作であることにかわりないんではないだろうか 誰か該当する文書知らない?
VC++でのコードでもまず確実に間違い。 VC++がそういう動作をすることを狙ってわざとそんなコードを書いたって、全く利点無し。
>>108 あれか、委員長タイプか。ルール絶対主義というか
誰一人正しいか間違いかなんて質問はしてないだろうに
間違った記述をした時にこういう風に動くって事を知っておくだけでも
デバッグする上では役にたつもんだぜ?
イインチョタイプワロタw
>>105 多いなそういう本やサイト
思い込みだけで書いてるのは本当に困る
>>97 まず自分で調べてある程度のコードを書いてから出直してこいよ
こんちわ
お世話になります
>>97 です
何をどう調べればいいのかもわかんないんですよ
作成したブラウザでヤフートップを表示しているので
ヤフートップページのテキストは取り込めているとは思うのですが
どうやって文字を検索するのかわかんないです
すいませんが何を調べればいいのか教えていただけないでしょうか
お願いします
そんな手とり足とり教えるには、掲示板という仕組みは非効率すぎる。
>>103 ありがとうございます。参考になりました。
やっぱりそういう動きになっているんですね。
>>113 さようなら\(^o^)/
あなたのような人はプログラムなんてやめてパソコンを廃棄するのがベストかと
なんで? みんなできないくせに解答してるとか???
ヤフートップページを読み込んで任意の文字列を検索して保存する方法教えてください><
<a>タグ内の文字列調べて、キーワードが入ってたらそのurlのページをダウンロードして保存すればいい。 HTMLについては勉強した?
socketから直に受信データ取ってパーサ作らないと無理だろ・・・IWebBrowserしか知らん俺なんかは
>>120 IWebBrowserがあるなら、そこからIHTMLDocument2辺りを取得すれば、
HTML内のJavaScript同様、DOMでぐりぐり探れる。
>>119 誰がURLの話なんかしてるんだ?
HTMLから取得ってそのHTMLから取得する方法を聞いてるんだけど
どうやって取ればいいのかわかんない
一応、正規表現とかちょっとくらいはわかるよ
トップページのリンクから該当記事をDLするんじゃないのか? トップページには記事おいてないぞ リンクが貼ってあったとしても
だから、そのリンク先は作成したブラウザで見れるんだけど 見るだけで、どうやればここから文字列を取得するのかがわかんないんだ どこに対してどういう命令出すのかがわかんないんです
この質問者が日本人に思えないのは俺だけですか?
>IHTMLDocument2辺りを取得すれば これわかんないんです WEBブラウザの命令でそういうのがあるんですか? WEBブラウザを調べたけどわかりません><
検索しろよボケ 一週間はレスすんなゴミクズが
ボケとかゴミクズとか何それ お前どこのがきや
>>128 できないくせに解答者やってる奴ってお前のことかwww
はらいてー
なんでそんなに怒ってるの?
たかが2chでwww
>>130 IWebBrowser2のDocumentプロパティ
おい
>>128 お前は頭わるくは無いと自分では思ってるようだが
要領は最高に悪そうだな
意味もわからんやろなw
>>132 それでいけるんですか
ありがとです
とりあえず
>>128 の小僧はこの先、解答すんなよ
知っててもしゃべらねくていいから
つーかお前出入り禁止
もうくんなカス
喧嘩両成敗ってことで
>>134 も出入り禁止な。そしたらたぶん賛同を得られると思う。
単語もでてるのに検索しないでわめき散らすだけか アホとしか
自分で調べようともしない教えて君ってホント痛いな
ソースの編集は外部エディタのみで行い、VC++のエディタではread onlyで書き込みできないようにして開きたいんですが 設定で可能ですか?
ブラウザがどうたら言ってるのは釣りにしか思えん。 本気だったら病院から書き込んでるに違いない。
DQNてのはこんなもんだよ 期待しちゃ駄目
まさにこれからVC++2008EEを使ってプログラムを勉強しようとしている初心者です。 お勧めのサイトや書籍がありましたら教えてください。 とりあえずは猫でもわかるプログラミングを見て勉強しようと思ってます。
お前の現在のプログラミングに対する理解度による 全くの初心者なら猫でも〜でいいよ
143 :
141 :2008/11/16(日) 14:33:16
さっそくありがとうございます。 昔N88BASICとCをちょっとかじりました。 とはいえX6800とかの時代なので、最近のWindowsプログラミングはさっぱりな感じです。
>>143 C++を勉強しつつ
Windowsプログラムの作法を勉強しなきゃならん
っていうのが初学者が投げ出してしまうところ
最初は
CとWin32APIっていうのが無難なのかなあ
145 :
141 :2008/11/16(日) 21:09:08
>>144 なるほど、とりあずCからやってみているので、ある程度形になったらWin32APIを勉強してみます。
ありがとうございました。
EEはリソースエディタが無いのが痛いね フリーのツールつかえばええやんって言うだろうが 初心者ほどまとまったパッケージがオススメ つーことでウインドウプログラム作る様になったら 2万円もしないんだしStd買っちゃいな クラス図も作れるし
昔のWin32APIを勉強してた自分を振り返ると、デバッグが上手ければもっと楽に習得できたと思った VSの呼び出し履歴とか最初全然使ってなかったなぁ( ´ω`)
こんちわお世話になります intについて聞きたいです 整数型の型名にintってありますよね この型名のintと 関数mainの前に書かれているintは同じなのでしょうか? 私の所有する解説本ではmainについて int main (void) メイン関数の定義開始 とだけ説明しているだけなのです 意味を並べていくと int:整数型の型名 main:main関数の定義開始 void:戻り値のない評価式 ってことですよね なぜmainの前にintを書くのか凄く気になります 勝手に想像しちゃうと 最後に書かれているreturn 0(戻り値が0なら正常終了、それ以外なら異常終了) このゼロは整数なのでintを記載するのかな? main関数定義開始の行頭にintはなぜですか? 私の所有する解説本は結局、最後のページまでこのことには触れていませんでした 勝手な推測してしまいましたが どなたか正しい答え教えてください
あなたのもってる解説本が糞だということはわかりました。
int main( void ) ↑ ↑ ↑ 戻り値 関数名 引数 これを見て意味が分からないのであればプログラムはあきらめて下さい。
いやいやw、それで諦めるのはまだ早いだろ。 まだ148の読んでいた本がダメすぎただけという可能性が高いということしか分からない。
わかった!
>>150 さんのでわかったよ
みなさん夜分お疲れのところありがとうございましたm( _ _ )m
ていうか 私の推測は当たってたってことですよね もしかして私はセンスあるのかなwww
こんちわお世話になります 有料でも構わないのでC++の質問すれば 私が理解できるまで懇切丁寧に教えてくれるサイトないですか 解説本は解説するために専門用語連発でわかりにくい部分があるんです その専門用語を解説するページが無いので 結局、解説本→グーグル→解説本→グーグル(たまにIT辞書) こんな感じです 進行するのがかなり時間かかってしまいます かと言って基礎をすっ飛ばすわけにもいかず 超初心者用とか超入門とか書いてあっても中身は専門用語だらけ 無料の掲示板では解答者の善意で教えてもらってるわけで 解答者もいちいち注釈つけてられないですよね てことで嘘つき解説本はタイトルに「超入門」とか「超初心者」とか書いてるけど 内容は本当の初心者にでもわかるものはないですね だいたい解説に注釈無しで専門用語を使うこと自体 初心者には無理。 著者はタイトルに美味しそうな単語並べてとにかく売れる事が優先のものばかり 教えることが大前提の本はないでしょうか 超々ーーーぉ入門者でも理解できるサイト(有料可)か解説本教えてください
わかるまで懇切丁寧に教えて欲しいのならば学校に通ってください。 あなたの知能レベルで理解できるかどうかなど他人にわかるものではありませんよ。
156 :
141 :2008/11/17(月) 09:35:16
>>146 stdは2005EEからのアップデートが可能みたいですね。
確かにそれなら安いし購入も検討します。
まだリソースエディタがフリーだとどう辛いのかもわかりませんが…
リソースエディタだけIDEに統合されてない フリーソフトを使うってのは辛いって話でそ
coutとprintfの違いを教えてください
>>158 coutはC++でしか使えない
printfはCでも使える
リソースエディタなんてフリーで問題ないよ どの道付属のアイコンエディタは使い物にならんし
>>160 最後にgetch()を入れればキーを押すまで画面がとまるよ
>>159 了解です
Printfで書くようにします
Cout使わないといけない場合なんかはないですよね
ありがとうございます
164 :
141 :2008/11/18(火) 10:18:26
>>157 解説ページなどでResEditやXN Resource Editorでそれほど問題なさそうだったので、
どのようなデメリットがあるのかよくわからないということでした。
わかりにくくてすみません。
とりあえずフリーのものでやってみようかなと思います。
>>162 ありがとうございます
でも最後にgetch();を付けるとエラーが…
「デバッグ無しでビルド」を選択したら
とりあえずは消えない様になりました
そもそもデバッグしないでいいならCtrl+F5で実行すりゃいい
あとは 1.system("pause"); 2.getchar(); 3.main関数の最後の行("}")にブレークポイントをいれる から好きなのを選べばいいと思うよ
今まで少しの間でしたがVC#2005EEを使っていました。 今日からC++を学ぼうと思い、VC++2008EEを使ってみたのですが コード補完機能がないのが気になりました。 VC#2005EEのときは、1文字目から予測リストが出てくるので非常に使いやすかったのですが VC++2008EEにはそのような機能はないのでしょうか。
>>168 ないよ
せいぜい関数の引数リストやクラスのメンバリストが出る程度だがそれでもないよりましだ
あ、そういえばCtrl+スペースで出たな
質問です。Visual C++2005を使っています。 プロジェクトをつくるとそのフォルダにReadMe.txtが自動で作られますが ここに各ソースファイルの簡単な説明を追記したいのですが、どのようにすればよいのでしょうか? 作成されたReadMe.txtの最後の方に、 「AppWizard では "TODO:" コメントを使用して、ユーザーが追加またはカスタマイズする ソース部分を示します。」とか書いてあるのですが、 各ソースファイルのコメント部分にTODO:と入れればその行が自動的に ReaMe.txtに出力されるのかと思ったのですが、なんともなりません。 何かやり方が違うのでしょうか? そういったReadMe.txtへの説明の自動追記機能はありますか? それともRedMe.txtを直接開いて手書きで説明を加えなくてはならないのでしょうか?
あ、
>>171 はVisual C++ 2005 Express Editionです。
ひょっとしてエディションの問題???
>>165 コンパイルエラーならconio.hがインクルードされてないとかじゃね
// TODO: ここにコマンド ハンドラ コードを追加します
TODOコメント使うのはAppWizardであって、ユーザー(あなた)ではない AppWizardがあなたが追加、またはカスタマイズすべきソース部分を教えてくれているだけ AppWizardが生成するReadMeはあなたに対する説明文であって、あなたのアプリケーションを使う人に対するものではない
>>169 レスありがとうございます。たしかに、ないよりはましですね。
もやもやがなくなったので勉強してきます。
>>174-175 レスありがとうございます。
えーと、つまりReadMe.txtもTODO:コメントも、後から
自分で追記したりするようなものではないということでいいんでしょうか?
ReadMe.Txtはプロジェクト作成時にVCが自動作成したファイルだけを示し、
その内どこをいじるのかがTODO:コメントで指示されるという解釈であってますか?
いやあれウィザードが吐くだけの固定コメだから メッセージマップとかをクラスのプロパティからいっぱい作って見れ 全部同じコメだ
int型のポインタを宣言するときは int* pA; とするのがいいのか int *pA; とするのがいいのか教えていただけませんか。 テキストにはどちらでも良いと書いてありましたが、できれば多数派に合わせておきたいので・・・
>>179 ポインタをtypedefする
typedef int *LPINT
LPINT pA;
int * p; ではダメですか?
183 :
デフォルトの名無しさん :2008/11/22(土) 16:31:46
名前: E-mail: 内容: 超初歩の質問ですいません。環境はXP,VC++2008(SP1)でインストール直後のまっさらな状態です。 String *name = textName->Text; が error C3699: '*' : この間接指定を型 'System::String' で使用できません と、VisualStudio2008からダメ出しされまして、エラーメッセージどおりに、 String ^name・・・・ としたらうまく通りました。 エラーの原因はStringクラスが定数文字列前提だからかな?とも 思ってますが、それよりも^演算子(なんでしょうか?)の 意味がさっぱり調べられません。 ググってもこれといったものが出ませんでした^^; ^の意味をどなたか教えていただけませんでしょうか・・・。
185 :
デフォルトの名無しさん :2008/11/22(土) 17:08:32
183です。 助かりましたー。新仕様だったんですね。
ちょw
名前: E-mail: 内容: なんぞこれ
デスマの合図に決まってるだろ
質問です。VisualC++2008をつかっています。 ソースを書き換える前に保存をしたいのですが、 全部丸ごと別名で保存する方法を教えてもらえませんか? .cppや.hを個別に保存はできましたが、プロジェクトの中身を丸ごと別名で保存はできないのでしょうか?
逆に考えるんだ 元のプロジェクトの中身をコピーして別名にしたあと上書き保存すれば結果は同じだと
191 :
189 :2008/11/23(日) 02:01:38
Visual Source Safeを使えばいいと思うよ
次のVC++で改良される自動生成コメント ... // TODO: ここに 派遣さんが コマンド ハンドラ コードを追加します
SDKのダイアログリソースを見ると全部英語表記で記述してありますが VCでビルドするともちろん日本語で表示されますが 日本語用のストリングテーブルがどっかにあるんですか?
調べた事ないが、リソースDLLがどっかにあるんじゃまいか?
予約語にinterface ってのがあるんだがこれ何? Javaのinterfaceと同じ感じなのか? 言語仕様にはこんなのなかったとおもうんだが
C++/CLIのinterfaceではないだろうか
すみません、ゲームをリリース版でコンパイルして実行ファイルを作ってみたんですが MSVCR80.DLLというランタイムに依存してしまうようなんですが このDLLは再配布可能でしょうか?
201 :
デフォルトの名無しさん :2008/11/26(水) 07:43:24
プログラミング超初心者で
>>23 と全く同じ状況になってしまいました
デザイン画面は 「このファイルのデザイナに、デザインできるクラスがないため、デザイナを表示できませんでした。」というエラーが出てしまいます
↓ちなみにこのコードを追加したらなってしまいました
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//オプションボタン (ラジオボタン) の状態を確認
if (this->radioButtonKisu->Checked == true){
System::Diagnostics::Debug::WriteLine("奇数が選択されました");
}else if(this->radioButtonGusu->Checked == true){
System::Diagnostics::Debug::WriteLine("偶数が選択されました");
}else{
MessageBox::Show("奇数か偶数かを選んでください","お願い");
return;
}
}
前に成功したビルドの状態に戻せないんでしょうか
最初からやり直せば次に進めるんでしょうか
202 :
201 :2008/11/26(水) 11:04:56
あぁ、自己解決しました…
ゲームを配布しようと思ってるんですが コード生成のMTとMTdって何が違うんですか? Dllが付くものは駄目だということは知っているんですが…
ライブラリが最適化されてるか否か
もう少しわかりやすく説明して欲しいんですが…
デバッグ用じゃないかデバッグ用か
ggrks
じゃあ要するに配布の再はMTを使った方がいいってことですかね?
そういうことにしておけばいいんじゃないですかね
くたばれクソども
MTdはデバッグ用でこれでビルドしたやつ配布すると馬鹿にされる。
>>208 Releaseモードでビルドするんだよ
myfunc.h という名前のヘッダファイルに int max(int x,int y); という関数プロトタイプを宣言し main()があるソースファイルとは別のmyfunc.cppという名前のソースファイルに int max(int x,int y) の定義文を記述しました。 そしてmain()があるソースファイルのはじめに #include "myfunc.h" と記述して動いたのですが、はじめの#include文を消去しても、ヘッダファイルに適当な関数プロトタイプの宣言を追加しても 動きました。(定義はしていません)はじめに#includeを記述する必要はあるのでしょうか。 そもそもヘッダファイルの必要性がよくわかっていないので、教えていただけないでしょうか。
よくわからんが、とりあえず何か消したら念のためビルドのクリーンとかで クリアしてから試してみては。
普通はヘッダの方は必要に応じて外部参照関数呼び出しを記述 extern int max(int x,int y); で、cまたはcppソースの方にプロトタイプ宣言を入れる cpp内で関数を参照する時、呼び出し側の関数よりも上に本体のコードがあれば プロトタイプ宣言は必要ない。 本体が下にある場合はプロトタイプ宣言が必要。
>>214 ,215
ありがとうございました。いろいろ試してみます。
すいません、はじめてフォームアプリケーションを作ってみようと思ったんですが、 テキストボックスに入力した値がどこに入るのかわかりません。 Messagebox::Showでそれっぽいものを表示してみようとも思ったんですが、 System:::string この型は演算子として使用できません(String[0]とかも)となります。 private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {}の中で自分で何かをやるんでようか? 助けてorz
218 :
217 :2008/11/28(金) 12:16:01
MessageBox::Showを書いたのはbuton1_Clickの中です。
なんつーか、それ以前にやることやったほうがいい気がするが。 もしくは本でも読むか。 試しに、buton1_Clickの中に MessageBox::Show(textBox1->Text); とか書いてみ
>>219 ありがとうございました
おかげでスーパーハカーになることができました!
>>216 とりあえずmax()の本体を別のcppファイルに移してためしてみるといい
ヘッダーの使い方がわかるはずだ
>>221 ありがとうございます。max(int x,int y)が定義されているcppファイルを削除しても動いてしまったので
ためしに maxi(int x,int y)に名前を変えたところ、無事(? 動かなくなりました。
using namespace std; を main() があるcppファイルのはじめに記述していたのですが
stdの名前空間の中にmaxがあったのが原因だったみたいです。
その後、ヘッダーファイルをincludeしなかったりしてみたりと色々試してなんとなくですがヘッダの意味がわかった気がします。
日本語でおk
VC++2008無料版を使っています。 class の宣言文でpublic:を記述するとclassの位置までインデントが戻ってしまうのですが、 classの位置より1段階インデントした状態にオートインデントするにはどうすればいいのですか?
USBにエディタを入れて持ち歩きたいんですけど Visual C++ライクなエディタってありませんか? Notepad++Portableは知ってるんですけど、折り畳みがダサいので・・・
226 :
デフォルトの名無しさん :2008/12/03(水) 01:24:56
実行すると、Debugフォルダがかってに作成されちゃうんですが、仕様ですか?
>>226 仕様です。
どうしても作りたくなければReleaseビルド以外使うな
>>226 プロパティいじれば好きに出来るよ
$(OutDir)
とか
$(IntDir)
を好きな名前にしたらいい
ゲーム製作をしていてVC++2008 でコンパイルしています。 コード生成設定をMTdでやると通るのですが、MTでやると以下のエラーが出てしまいます。 LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 C:\Documents and Settings\***\デスクトップ\**\Debug\***.exe : fatal error LNK1120: 外部参照 2 が未解決です。 LIBCMTを無視しても逆にエラーが増えてしまうんですが、どうすればいいでしょうか? ゲーム配布時にはMTdでもMTでもdllが付かなければ問題ないですか?
>>229 libcpmtdはデバッグ用。内部でデバッグ用のmallocとfreeを呼んでるから/MTdじゃないとリンクできない。
リリースビルドならlibcpmtを使う。
ってか、プロジェクトの作成をウィザード任せにすればその辺を自分でいじることなんてないと思うんだけど。
なるほど、debugモードでコード生成する時はMTdで リリースモードでやるときはMTでやるものなんですね 試しにリリースモードでMT生成してみたら通りました。 どうもありがとうございましたー。
232 :
デフォルトの名無しさん :2008/12/03(水) 20:24:26
すいません windowsXP SP2で visual c++ 2005 Express Editionを使っているんですが 以前のエラーのため、Windows Forms Designer Package ({7494682B-37A0-11D2-A273-00C04F8EF4FF}) 以前のエラーのため、Visual Studio Explorers and Designers Package ({8D8529D3-625D-4496-8354-3DAD630ECC1B}) 以前のエラーのため、Visual Studio Explorers and Designers Package ({8D8529D3-625D-4496-8354-3DAD630ECC1B}) 以前のエラーのため、Visual Studio Common IDE Package ({6E87CFAD-6C05-4ADF-9CD7-3B7943875B7C}) というようなエラーが出てしまいます コマンド プロンプトで 'VCExpress /resetskippkgs' を入力しろと出るので試しましたが無理でした 調べたところbeta版がどうこうとあるのですが、自分はそのようなものは入れていません beta版のアンインストーラーを使用しても、該当するものはありませんでした 何か解決策はないでしょうか?
そのエラーは何をする時に出るの?
234 :
デフォルトの名無しさん :2008/12/06(土) 01:18:55
お願いします。 WinXP SP2でVisual c++ 2005 Express Editionです。 UNICODEのIniファイルの情報をGetPrivateProfileStringで取得しようと しているのですが、lpReturnedStringにはlpDefaultの値が入ってしまいます。 IniファイルがANSIのときはうまくいきます。 GetPrivateProfileStringの引数はワイド文字にしているつもりです。 意図的にGetPrivateProfileStringWにしてもダメでした。 UNICODEファイルの際の注意点などあるのでしょうか? ご教授ねがいます。
>>234 INI系の関数はAでもWでもファイルの中身はマルチバイト文字として扱われる。
そのおかげで、Aで書き込んでWで読み取るなんてことができるんだけどね。
もちろん、文字コードの自動判別なんてやっていない。
>>234 > UNICODEのIniファイル
拡張子がINIってだけで中身がUnicodeじゃあ、INIファイルとは呼べ
ないシロモノだな。
自分で、CStdioFileクラスのCStdioFile::ReadString()/WriteString()
なりを使って、1行ずつ読み込んで文字列処理するコードを書くしか
ないな。(w
そうだったのか。 たしかにINIファイルって、ASCIIしか使わないけど……
> INIファイルって、ASCIIしか使わないけど…… んなこたぁない。シフトJISであれば漢字やカナ文字だって使える。 でなきゃ、漢字やカナ文字を含むパス名やファイル名の文字列保存に 使えない。
マジ?シフトJISなら良かったのか。 それは気がつかなかった。今度試してみよう。 ていうか、レジストリ弄りたくなくて、いまだにINIファイル使ってるんだよね。
Windowsフォルダに際限なくINIファイル作られるより、レジストリの方が ずっとマシだと思えるんだが? ログインユーザー単位で設定が分けら れるというメリットもあるし。 第一、レジストリなんて意識せずともWindowsのシステムでいじられ まくりだぞ。
>>239 Shift_JISというか、そこで使っているコードページの文字コード。
欧米ならWindows-1252だし、繁体中国語圏ならBig5という具合。
>>240 ファイルでもApplication Dataあたりに置けば、ユーザ別設定はできる。
>>241 > ファイルでもApplication Dataあたりに置けば、ユーザ別設定はできる。
MFCフレームワークのデフォルト処理を前提に書いてしまった。言われ
れば、まぁ確かにそうだ。 ところで、複数インスタンス起動した
アプリからiniファイルへの同時アクセスとかって、今は問題ないん
だっけか?
たんなるアプリの設定データはWindowsフォルダなんかにつくらんだろ。 自フォルダにINIファイル作るなんて普通じゃないか?フリーソフトなんかは特に。 わざわざ選択肢減らす必要なんてないしケースバイケースでよかろう。
>自フォルダにINIファイル Program Filesに置いたらVistaで問題が出る。 All UsersのAppDataとかでどうか。
>>244 >Program Filesに置いたらVistaで問題が出る。
はじめやりずれーって思ったら他のユーザーでログインしたときを考えたら納得した
>>243 > たんなるアプリの設定データはWindowsフォルダなんかにつくらんだろ。
昔は作りまくりだったんで、レジストリが搭乗したんだが?
今もMFCでCWinApp::SetRegistryKey()呼ばないとiniファイルを使うけど、
iniファイルが作られるデフォルトの場所はWindowsフォルダだよ。
>>244 > All UsersのAppDataとかでどうか。
自分(現在のログインユーザー)用の「マイドキュメント」フォルダの
パスはSHGetSpecialFolderLocation()で取得できるけど、これって取れる
んだっけ? もしかして決め打ち? それはそれで問題な気もするが?
なんて思ったら、
SHGetSpecialFolderLocation(hwndOwner,CSIDL_COMMON_APPDATA,...);
でいけるのか。 知らない間にCSIDLずいぶん増えているな。
ttp://msdn.microsoft.com/en-us/library/bb762494 (VS.85).aspx
昔話がしたいだけか。
VistaでProgram Filesのデータを読み書きするのって各ユーザー毎に仮想フォルダ作って 勝手にやってくれんじゃなかったっけ? 具体的にはどういう風になんの? 正直Vistaなんて糞OS使った事もないから知らんが。
全ユーザー共通のINIファイルじゃないとダメってソフトでも なければさほど問題はなさそうな気もする つかこれってINIファイルに限らず他のセーブデータにも 言える事だろ
「Program Filesに置いたらVistaで問題が出る。」っていうのは、他の スレでも見たような気がするが、実際何がどう問題なのかわからん。 すくなくとも、exe本体が存在するProgram Files下のアプリケーション フォルダ内にiniファイルを作成して読み書きは問題なく動作している けどな。 Administrator権限以外じゃダメとかなら、Vistaに限らず2000やXP等でも 問題になりそうな気がするし、セキュリティ上、別のログインユーザーに iniファイル内容を見られると困るというなら、All Usersに置いても同じ だと思う。
別のログインユーザに見られたら困る、じゃなくて 別のログインユーザから見られないから困るんでしょ。 Program FilesやHKLMに無駄に書き込むソフトなんざそもそもマルチユーザを前提としていないので これらの挙動はソフトとしては想定外なわけで。 あと、管理者権限を持つプロセスから呼ばれると仮想ストアじゃないとこから設定ファイル読みに行ってNotFoundとか。 なんにせよUAC程度で不具合出るようなソフトは単純に行儀悪いだけだと思う。
>>251 そうそ
Program Filesにおいちゃうとアドミニ権限ないと
書き込めないし見れないんだよね
なんでアドミニ権限ないユーザが起動すると落ちるソフトとか結構あったりする
行儀が悪いのはむしろこういう勝手な事をOSにさせるMSだと思うが 別にユーザー毎の設定で問題ないアプリなら不具合にならないわけだし 結局の所はケースバイケースって事でしょ ゲームアプリのセーブデータなんかはプログラムフォルダ内に入れとかないと セーブデータ残したままアンインストールする場合、普段ユーザーが見ない所に ファイルが残るしな 「行儀がいい」と「頭が固い」を履き違えてるんじゃね
>>253 いや、権限によってはProgram Filesを見れないから
アプリの起動自体できない
設定ファイルがないって感じで落ちる
ケースバイケースじゃなくてこう作らないと駄目ってところまできてる
さすがにそれは設定ファイルが存在することを前提にプログラムを組む方がおかしい なかったらデフォルト値で動かすのが普通。
>>254 設定ファイルがないと動かないなんて作りになってるのは
ProgramFilesだろうがなんだろうが終わってるだろ
>>256 仮にProgramFilesが駄目だったら今度どこに保存すんの?
Vistaは持ってないけどこの認識であってる?
1.ファイルを読むだけだったらProgram Filesから行われる
2.書き込みが発生した場合、バーチャルストアで行われる
3.一度書き込みが発生したファイルは、バーチャルストアで読み書きが行われる
Program Filesから読めないとか、どこに保存するとか言ってる人がいるから混乱してきたが。
この認識が違うなら
>>254 に詳しい説明をしてほしい
>>258 そんなのセキュリティのポリシーの設定で変わるじゃん
駄目にしてある会社だったら読み取りも駄目だろ
その場合ってそのユーザにアプリって起動できんの? インストールの設定も含めて
仮にそういうセキュリティ設定になってたとしたら
INIファイルどころかあらゆるセーブデータの読み書きができなくなるわけだから
INIファイルをどうしようが結局同じことだと思うけど
まあどうしても全てのユーザーで動作させたいんだったら全セーブデータを
>>244 のようにするか、レジストリに全てぶっこむしかないだろうね
アホ臭いとしか言いようがないが
でもきちんと対応するってならそれっきゃないってことだろうな まあ、業務でそういうところに当たらないとも限らないからちょっとメモっておこ 担当者がキチだと普通にこういうの要求されるよね
>>254 ファイルが読めないなら起動に必要なデータファイルはどこから読むんです?
264 :
234 :2008/12/07(日) 04:26:59
豚切り失礼します。
>>236 さん
遅くなりましたが、回答ありがとうございます。
そうですか。UNICODEはINIファイルとして使えないのですね。
勉強になりました。
言ってみたかっただけじゃね。
268 :
デフォルトの名無しさん :2008/12/08(月) 01:31:32
CとC++の違いってヘッダがiostreamになって使う関数が違う以外にないの? こんなんでオブジェクト施行とか騒いじゃってるの?拍子抜けなんだけど
クラス、テンプレート、多重定義、例外処理……、 オブジェクト指向に関係あるものないもの、CになくてC++にある機能なんていくらでもあるが。
クラスなんて構造体に毛がはえたようなものしょぼいんだよはっきりいって
271 :
デフォルトの名無しさん :2008/12/08(月) 02:18:40
馬鹿野郎! それのおかげでインテリセンスの恩恵があるんだろうが!
C→C++の一番の利点は コードが見やすいこと、これに尽きるだろ C++に慣れるとCのでっかいコードは耐えられん クラス化したくてウズウズしてくる 変数途中で宣言したくなる
C言語の勉強やってからC++に移行したほうが良いだろうか それとも最初からC++から勉強しても問題ない?
>>258 バーチャルストアに書き込むのはマニフェストがない場合だけだよ。
マニフェストがあればあとは管理者権限への移行が成功すれば直接書くことになる。
>>273 いきなりC++でいいと思う。
共通する事柄はいずれにせよ学ぶことになるし、
Cで良く使うテクだけどC++ではあまり使わないのとか意外とあるし。
>>274 つかそれって結局管理者権限で実行するってことじゃねーの?
他のシステムファイルからみとかで管理者権限が必要でマニフェストに組み込まれた
アプリじゃなければ
>>258 のようになるってことっしょ?
>>277 マニフェストがない場合、管理者権限でもバーチャルストア行き。
マニフェストがないという言い方は正しくない
一連の流れをみててもどうもわかりにくいです。 人によって言ってる事が違うというか。 管理者、制限ユーザー、マニフェスト関連で正確な挙動に ついての詳細情報が掲載されてるサイトないですか? VistaだけでなくXPや2000での情報も欲しいです。
日本語でおk
初心者スレで英文持ち出してくるヤツは死んでいいと思うよ 日本と米で仕様が違うのもよくある事だしな
英文にしか情報がないようなことを初心者スレで質問するヤツは死んでいいと思うよ
非標準言語のしか資料が無いと言うことが判っただけでも大きな進歩であり、 革新的な質問であったことは確定的に明らか。
誰か日本語でわかりやすくまとめてくだちぃ
ホームエディションだと管理者か制限ユーザーのカテゴリわけだけで 細かい設定はないんだよな プロフェッショナルの管理者による厳しいセキュリティ設定まで考慮してもきりがないと思う どうやっても管理者次第で動かない設定にできるんだし XPホームエディションでProgramFilesに入れたアプリを制限ユーザーで動かしてみたけど 普通にINIファイルを含むセーブデータを読み書きできた Vistaでマニュフェストの指定なしだとこの読み書きがバーチャルストアになるってことか それを想定して動くつくりであればセーブデータもプログラムと同じフォルダでいいんじゃね
まぁ仮想ストアは救済策ってーか、MSお得意の泥臭い互換性の維持だからな。 多分将来的にはユーザーのデフォの権限を制限ユーザーにしたいんだろうが、 それVistaでやっちゃうとProgram Filesに書き込むアプリなだけで動かなくなるわけだし。 マニフェスト無しでほっとくのも止めやしないが、管理者権限のコマンドプロンプトやファイラから 起動したら別々の設定ファイルをうっかり作っちまうとかも起こりうるので、 requireAdministratorで起動毎にUACダイアログを出した方がいい。 そしてアプリのユーザーにダイアログをうざがられてAppDataに 書き込まざるを得なくなるというプレッシャーこそがUACの真意だとかなんとか。
かなりどうでもいい条件付けだな
291 :
デフォルトの名無しさん :2008/12/10(水) 11:56:44
VS 2003からVS 2008にしてみました C++のソースファイルはUTF-8で書かれていて、VS 2003では概ね問題なくコンパイルできていました。 ところがVS 2008のcl.exeは、このソース内に定数として書かれた文字列を勝手にSJISに変換して内部処理するようです。これでは正常動作できません。 この余計な機能を、何とか避ける方法はないのでしょうか? 膨大な量があるので、今さらファイルをSJISに戻すとかすることは不可能なんです。
コードページは?
普通にコマンドプロンプトを開いて作業しているので、932のシフトJISです。
294 :
デフォルトの名無しさん :2008/12/10(水) 12:15:05
すいません、本当に簡単なことなのですが if(argc == 3){ if(argv[1] == L"-o"){ if((fp = fopen("argv[2]", "w")) == NULL){ printf("出力ファイルをオープンできません.\n"); exit(1); } fclose(fp); } この if(argv[1] == L"-o") の条件が通りません。 コマンドで test -o test1 のように打っても違うものとして認識しているようで・・・ 画面にプリントしてみると同じなのですが、Lをつけるとデータが違うものになってしまうのでしょうか?
chcpで変えてみては? つーか、UTF-8でダメな例が思いつかないな、再現可能なソース無いですか?
>>294 文字列の比較に直接 == は使えません。
>>291 コンパイルエラーなのか動作が変なのか
エラーメッセージがあればそれを書いてもらうと何かわかるかもしれません
>>294 argvの型はTCHARですか
またどこの言語からの転向者だろ VSつながりでVBかC#あたりか
template <typename Foo, typename Bar> class Baz : public Bar { なんたら void Qux( const Quux<Foo,Bar> & foobar ) {...}; }; class Bar { なんたら }; // (1) VC2008で上のをもう少し複雑に書くと Baz::Qux での引数の型 Quux<Foo,Bar> が (1) の Bar と解釈されてコンパイルエラーになってしまう GCCだと通るんだけどなあ
>"argv[2]" この書き方はPerlかPHPだろう
301 :
デフォルトの名無しさん :2008/12/10(水) 12:52:34
もともとCとVBAをやってました
>>296 やっぱりstrcmpを使わないとだめですか?
>>297 int _tmain(int argc, _TCHAR* argv[])
こう宣言してます
302 :
デフォルトの名無しさん :2008/12/10(水) 12:53:27
もともとCとVBAをやってました
>>296 やっぱりstrcmpを使わないとだめですか?
>>297 int _tmain(int argc, _TCHAR* argv[])
こう宣言してます
303 :
デフォルトの名無しさん :2008/12/10(水) 12:57:44
if( _tcscmp(argv[1],"-o") == 0 ) { では
305 :
デフォルトの名無しさん :2008/12/10(水) 13:00:32
if( _tcscmp(argv[1],_T("-o")) == 0 ) { では
306 :
デフォルトの名無しさん :2008/12/10(水) 13:01:43
if (_tcsicmp(argv[1],_T("-o")) == 0) { では
307 :
デフォルトの名無しさん :2008/12/10(水) 13:03:35
>>304 さんの方法でやってみたところ
エラー 1 error C2664: 'wcscmp' : 2 番目の引数を 'const char [3]' から 'const wchar_t *' に変換できません。(新しい機能 ; ヘルプを参照)
というようなことを言われました。
どうもこの変換できないというところが理解できないです。代入しているわけでもないのに何故?って感じです。
308 :
デフォルトの名無しさん :2008/12/10(水) 13:04:55
#include "stdafx.h" #include "string.h" #include "stdlib.h" int _tmain(int argc, _TCHAR* argv[]) { FILE *fp; if(argc == 3){ if( _tcscmp(argv[1],"-o") == 0 ){ if((fp = fopen("argv[2]", "w")) == NULL){ printf("出力ファイルをオープンできません.\n"); exit(1); } fclose(fp); } else{ printf("USage :\n"); printf("-o : **********\n"); } } else{ printf("引数の数が違います"); } return 0; } これが全文です。
通常 "-o" の文字リテラルは char で構成される 文字セットがユニコードの場合 _tsccmp は _wcscmp にマップされる _wcscmp が要求する型は const wchar_t * だからエラーになる _T マクロは文字セットにあわせてユニコードの場合には "-o" を L"-o" と変える L"-o" はワイド文字 wchar_t で構成されるリテラルだから通る すまん思いきり間違えた 304は俺
UNICODEに拘らなければANSI Cで十分なんだよな
311 :
デフォルトの名無しさん :2008/12/10(水) 13:21:00
>>291 で質問した者です
再現可能なソースを作っていて気がつきました。
chcp 65001やchcp 437としても動作が同じで、文字列リテラルが強制的にSJISに内部変換されていることが分かりました。
UTF-8のソースファイルなのですが、「BOM」を付けると、このような動作になるようです。
BOMを付けないUTF-8だと、warning C4819 が山ほど出て、化ける文字までありますが、何とかなりそうです。
今回作った下の再現プログラムも、BOMありのUTF-8と、BOM無しのUTF-8では、動作が違ってきます。
#include <iostream>
int main()
{
std::cout << "項目" << std::endl;
return 0;
}
一応解決したことにします。ありがとうございました。
313 :
デフォルトの名無しさん :2008/12/10(水) 15:35:09
すみません
>>294 で質問したものですが、
同じソースで _tcscat(argv[2],L".txt"); という処理を入れ、作成ファイルをテキスト形式にしようと思ったのですが
出力されたファイルが、テキストではなくファイルで出力されてしまいます。
画面表示させるとちゃんと****.txt となっているのですが・・・
314 :
デフォルトの名無しさん :2008/12/10(水) 15:49:13
>>313 はスルーしてください
アホくさい間違いでしたので(汗
315 :
デフォルトの名無しさん :2008/12/10(水) 22:29:54
Visual C++を使用していて、ちょっと困ってしまったので助けてください。
下記画像のようにスペース部分に色つき矢印やらドットやらが表示されて消えなくなってしまいました。
どこかでキーボード押し違えたみたいで・・
この設定の解除の仕方を分かる方いたら教えてください><
↓
http://imepita.jp/20081210/770880
メニュー > ヘルプのキーボード何とかに一覧がある
317 :
552 :2008/12/10(水) 23:45:14
ヘルプで見ても、そもそもコレが何なのか解らないので検索できないので 教えていただけませんか?
318 :
552 :2008/12/11(木) 00:19:36
質問に答えてくれなかったからってこんなこと言うのもなんだけど なんか、プログラマーって陰湿な性格の人が多いよね。 解るんなら教えてくれればいいじゃん。初心者用のスレだった気がするけど。 ついでに、編集→詳細→スペースの表示で自己解決しました。 だれも教えてくれんかった。
319 :
デフォルトの名無しさん :2008/12/11(木) 00:47:38
今MIDIファイルを開くっていうプログラムを作りたいのですが、 よろしければ教えてください。 バージョンはVC++2005 AEです。
320 :
319 :2008/12/11(木) 00:53:28
319ですがGETFILE関数を使いたいです。 よろしくお願いします。
>>318 君が質問したのは3、4時間前だろ?
誰もが同じスレをずっと監視してサポートセンターのように対応してくれるとでも思ってんのか?
自分で解決したならそれでいいし、自分で色々やってもできなかったらまた質問すりゃいいだろ
陰湿なのはちょっとレスがない程度でふてくされる君の思考回路だよ
>>318 オマエみたいなパーデンネンを弾くために、みな時間置いてから答えるようにしてるからね。
ゴクローサン。
>>315 [編集]→[詳細]→[スペースの表示]
>>318 つーかその質問、定期的に出るんでうんざりなんだけど。
過去レス調べることもできないのかよ。
あと質問なんか1日くらい待てや、答える人が24時間張り付いてるわけじゃないぞ。
325 :
デフォルトの名無しさん :2008/12/11(木) 10:10:52
こんにちわ。Visual C++でOPENGLを用いてゲームを作ろうと思うのですが、 ウィンドウを振動させるやり方がわかりません。。 何かコマンドややり方があるのならアドバイスください。よろしくお願いします。 ※JAVASCRIPTでウィンドウを振動させるみたいな感じです。
326 :
デフォルトの名無しさん :2008/12/11(木) 10:18:59
>>325 SetWindowPos APIとrand関数を使え
>>315 Ctrl+R、 Ctrl+Wを続けて入力
>318 試験勉強みたいに頭の中に全部記憶する必要ない。 というか情報量多すぎるからその都度自分で調べて解決していかないとだめ。 初心者の場合はどうやって調べたらいいかわからないから 調べ方を教えてあげるのが重要。 答えだけ教えたんじゃ、いつまでたっても自分で調べられようにならない。
330 :
M :2008/12/11(木) 11:35:21
今、VC++でMFCを用いたプログラムを作成中で、そのプログラムでRS232C通信を行いたいのですが、RS232c通信のプログラムの部分だけAPIを用いて記述したいのですがどのようにすればいいのでしょうか? 方法があれば教えてください。お願いします。
331 :
デフォルトの名無しさん :2008/12/11(木) 11:42:17
332 :
デフォルトの名無しさん :2008/12/11(木) 11:43:59
>>326 2つともよく分からないまま検索したらMOVEWinfowというのもあるみたいで、if関数を用いて頻繁に座標をずらし振動させることにしました。
こんなんでいいのかな??
マルチすいません。ありがとうございます。
333 :
M :2008/12/11(木) 11:48:46
>>331 ありがとうございます。
このプログラムをMFCのプログラムにどのように組み込めばいいのでしょうか?
あほな質問ですみません。。
334 :
デフォルトの名無しさん :2008/12/11(木) 12:55:47
>>333 WM_COMMANDメッセージでコマンドを受け取ったら、main関数の中身を実行すれば?
ファイルの読み書きとほとんど同じだな やってる内容が理解できれば使えるだろ
336 :
M :2008/12/11(木) 14:27:45
>>334 それでやってみようと思います。ありがとうございました。
337 :
デフォルトの名無しさん :2008/12/11(木) 16:38:53
VC++2008使ってます LogItemという独自クラスを作り、 LogItem item; ListBox.add(item); といったことしてます(単なるリストボックスへの追記)。 表示を変更する際に、 ListBox.add(〜.format("{1}・・・",item.name,・・・)) 等とすると、今度は削除時にいろいろ面倒です。 表示を適切に変更できるものの、削除時は、 ListBox.remove(item)でいけるような (追記時の表示に依存しないような) 簡単な方法はご存じありませんか? 参考になりそうなサイトやキーワードを 教えていただければ幸いです。
338 :
デフォルトの名無しさん :2008/12/11(木) 16:41:26
16ピンのPIC16F819のPICを利用してサーボモータや光電センサー、ディスプレイを制御したいのですがBASICのプログラムが分かりません サーボモータは Futaba S3002 を使用 ・計7個のサーボモータ使用 ・ボタンを押して入力したものをサーボモータに出力〔右に90度⇒左に90度〕 光電センサーは鏡とセンサーの間を通過するのを検出するもので omron E3R-R2E4 を使用 ・コインを検出してカウントする ・6個使用 ディスプレイは数字と文字の両方を表示したいです まとめると、コインを光電センサで検出してその検出したコインをディスプレイに表示する。たまボタンを押すとサーボモータが回転 するものを作りたいです。 この動作をBASICのブログラムで制御させるには、どのようなプログラムにすればいいですか
>>338 ここはBASICのスレでもPICのスレでもない。
340 :
デフォルトの名無しさん :2008/12/11(木) 19:13:55
337です。 自己解決しました。単なる調査不足&ありがちな混乱、でした ※ToStringをオーバーライドすればいいんですね・・・。 ってか。 質問の大半も意味不明でした。正確には「リストボックスにオブジェクトを そのまま追加した時に、表示のみを変更できるようにしたい。」とすれば よかったんでしょうね・・。 お騒がせいたしました。ほかに困っている人の助けになれば幸いです^^;
341 :
デフォルトの名無しさん :2008/12/11(木) 21:14:25
Visual C++ 2008 Express Editionについての質問です。 Windowsフォームアプリケーションプロジェクトを作成し、 フォームにボタンとpictureBoxを配置しました。 ボタンを押すと、pictureBoxのプロパティで設定した画像の画素値を取得したり 描きこんだりしたいと思い、画像にアクセスする手段を模索することにしました。 どうもpictureBoxクラスから直接画像にアクセスすることはできず、 いったんBitmapクラスに移さないといけないことが分かりました。 これでSetPixel関数を使って、画素値を書き換えることができるようになったのですが、 これをまたpictureBoxに戻して表示することができません。 コードは以下の通りです。(ボタンを押したときの処理関数) Bitmap bmp = pictureBox1->Image; bmp.SetPixel( 10, 10, Color::Red ); pictureBox1->Image = bmp; ← これで型が合わないというようなエラーが出る どのようにすればpictureBoxの画像を加工し、それを表示することができるのでしょうか?
pictureBox1->Image = Image::FromHbitmap(bmp.GetHbitmap());とかでどう?
343 :
デフォルトの名無しさん :2008/12/12(金) 17:44:23
すいません。C++でint型の変数ををchar型の配列にキャストして入れる方法ってどうやるのですか? int iAnswer = 0; int i = 0; char ChAnswer[256]; ChAnswer = (char)i; とやっているのですが、変換できないといわれます。
ChAnswer[0] = (char)i; じゃないの?
345 :
デフォルトの名無しさん :2008/12/12(金) 17:51:27
>>344 それだと、例えば123を変換した場合、1だけ変換ということになりそうな気がするのですが・・・違いますか?
>>345 何でそう思うのか、、もっと基礎からやり直すか
具体的にやりたいこと書いて手取り足取り教わるしかないと思うよ。
347 :
デフォルトの名無しさん :2008/12/12(金) 18:02:26
>>346 すいません。よく考えてたら頭の中にあったものが2次元配列でした・・・それにしても変な考えですけど。
逝ってきます。
エスパー回答で言わせてもらえばsprintf()使えばいいと思うよ
349 :
341 :2008/12/13(土) 07:31:03
>>342 それでできました!
ありがとうございました!!
しかし、.NET環境でもWin32apiレベルのビットマップハンドルを意識した記述をしないと
いけないのはどうなのかと思いました・・・
C++ Builderはもっとシンプルになりますし・・・
>>341 たぶんこうすればいける。
Bitmap^ bmp = gcnew Bitmap(pictureBox1->Image);
bmp->SetPixel(10, 10, Color::Red);
pictureBox1->Image = bmp;
Imageプロパティの型はImageへのハンドル。
にもかかわらず、341ではコード上Bitmapそのものを渡すようになっている。
本来、BitmapはImageの派生なので、Bitmapのハンドルなら渡せるというわけ。
351 :
341 :2008/12/14(日) 00:49:49
>>350 .NETでのハンドルという概念があるんですね。
勉強になりました。
ありがとうございました。
VC2008EEで↓がコンパイルできるようにする やり方を教えてください。 #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { return 0; }
エラーは↓です 1>.\a4.cpp(4) : error C2146: 構文エラー : ';' が、識別子 'WinMain' の前に必要です。 1>.\a4.cpp(4) : error C2065: 'HINSTANCE' : 定義されていない識別子です。 1>.\a4.cpp(4) : error C2146: 構文エラー : ')' が、識別子 'hInst' の前に必要です。 1>.\a4.cpp(4) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>.\a4.cpp(4) : error C2059: 構文エラー : ')' 1>.\a4.cpp(5) : error C2143: 構文エラー : ';' が '{' の前にありません。 1>.\a4.cpp(5) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
>>353 WINAPIが定義されてないっぽい感じのエラーメッセージだけど、
windows.hはインクルードされてるしなぁ。
>>352 普通にコンパイル通ったよ
プロジェクトの作成の仕方じゃないの?
ファイル→新規作成→プロジェクトの種類→Win32→Win32プロジェクト
356 :
デフォルトの名無しさん :2008/12/14(日) 12:25:43
Vc++2008でプロジェクトを開いた時に、 ▲ InteliSenseデータベースファイル C\......\Visual Studio\Projects|\ソリューションフォルダ\ソリューション.ncb を書き込み用に開けなかったため、 InteliSense 情報は VC++プロジェクトにりようできません。 ソリューションディレクトリが読み取り専用である場合、他の機能にも影響を及ぼします。 ってダイアログ出て、関数の引数とかが表示されなくなってしまいました。 フォルダの属性変えてみようとしたんだけど読み取り属性外せなくなったんですが、対処方ありますか? 他のソリューションでは問題ありません。ファイル壊れた?
メッセージの通りだろ
ncb ファイル消せばいい。
ボタンを二つ作ってサブクラス化しています。 DefStaticProcA = (WNDPROC)GetWindowLong(hBTNa, GWL_WNDPROC); SetWindowLong(hBTNa, GWL_WNDPROC, (LONG)TestProc); DefStaticProcB = (WNDPROC)GetWindowLong(hBTNb, GWL_WNDPROC); SetWindowLong(hBTNb, GWL_WNDPROC, (LONG)TestProc); if(DefStaticProcA == DefStaticProcB) MessageBox(NULL, _T("同じ"), _T("button"), MB_OK); ボタンのプロシージャはみんな同じアドレスに成るのでしょうか? プロシージャを一つにまとめたいです。
HWND HBTNv6[1000]; WNDPROC DefStaticProcBTN[1000]; void MakeButtonV6(HWND hWnd){ int i; for(i = 0; i < 1000; i++){ HBTNv6[i] = CreateWindow(_T("BUTTON"), _T("A"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 30, 30, 20, 20, hWnd, NULL, hInst, NULL); if(HBTNv6[i] == INVALID_HANDLE_VALUE){ MessageBox(NULL, _T("Error"), _T("CreateWindow"), MB_OK); break; } DefStaticProcBTN[i] = (WNDPROC)GetWindowLong(HBTNv6[i], GWL_WNDPROC); if(DefStaticProcBTN[i] == 0){ MessageBox(NULL, _T("Error"), _T("GetWindowLong"), MB_OK); break; } if(i > 0){ if(DefStaticProcBTN[i] != DefStaticProcBTN[i -1]){ MessageBox(NULL, _T("違う"), _T("ぼ"), MB_OK); break; } } } MessageBox(NULL, _T("終了"), _T("m"), MB_OK); } 保障されているのかな〜。誰か教えて。
何がしりたいのかわからん。 登録したウィンドウクラスにプロシージャも入ってるだろう。 でも同じプロセス内で差し替えできるから作った時期で違うようにはできる。
362 :
360 :2008/12/15(月) 11:38:13
ごめん、無かったことにして。
>>359 さらに別のだれかがサブクラス化しているなどといったこともあるから、
一般に同じと仮定することは危険。
ウィンドウハンドルと元のウィンドウプロシージャのどれとどれが対応するのか
分かるように保存しておけば、それぞれのアドレスが異なっていても
同じウィンドウプロシージャでサブクラス化できるはずだ。
3×n行のCSVファイルを読み込んで内部テーブル(?)にして、 後からそれを1行ずつ抽出してその項目を使って別の処理をするように今あるプログラムを書き換えたい。 VC++2005、WindowsXPで作業してます。 かなりの初心者ですがどうぞよろしくお願いします。
宿題なら宿題スレで一発ですよ。 そうでないなら、どこは分かるけどどこが分からないというのをもっとはっきりさせてください。
宿題じゃないんす・・・仕事なんですw CArrayとか使ってみたんだけど、なかなかうまくいかず・・・ あと、内部テーブルを1行ずつ読み込んでループさせる方法がよくわからん。 レベル低い質問で申し訳ないです
誰か来てくれると信じて書いてみるw INT CLogFileConditions::LoadAllSearchInfo() { CCSVFile file; CFileException fError; CString sSearchListFile; m_iResID = 0; m_iConditionStatus = 0; sSearchListFile = g_CurrentDir; sSearchListFile += LOG_SEARCH_LIST_FILE; if( file.Open( sSearchListFile, CFile::modeRead, &fError) ) { CString strLogKind, strServerName, intSearchLength, sVal ; m_LogKindToPath.RemoveAll(); while( file.ReadString() ) { if( file.GetFieldCount()>=3 ) { strLogKind = file.GetField(0); strServerName = file.GetField(1); intSearchLength = file.GetField(2); }
368 :
つづき :2008/12/16(火) 00:20:27
} file.Close(); if( !m_LogSearchCondition.GetCount() ) { m_iResID = IDS_ERR401; m_iConditionStatus = 401;//ErrorIDNumber } } else { m_iConditionStatus = -1; MsgBoxBySystemErrID( m_hwndParent, fError.m_lOsError,fError.m_strFileName ); } return m_iConditionStatus; } みたいな感じで処理条件を読み込む処理をまず作りたい。 ひとつめのレスの最後の方の処理をCSVを読み込む二次元配列にしたいんだ。 どうぞお力をお貸しください。。
普通に配列をnewして入れてけばいいじゃんか
ありがとう。 でもほんと全然わかんないんだw もうちょっと詳しく書いてくれると助かります。 ごめんな
コレクションクラスが使えるようになったほうがいいと思うけどねぇ・・ まずどこに入れたいのか、入れ物を定義しなさいよ。
すまんコレクションクラスがわからん・・・ まあ定義もよくわかんないんだけどw ネットで見ようみまねで public: CArray<double, double> GetLogSearchCondition(){ return &m_LogSearchCondition; } CDoubleArray& operator=( CDoubleArray& src ) { for( int n = 0; n < src.GetSize(); n++ ) { this->Add( src[n] ); } return *this; } }; こんなん書いたらエラーが270個くらい出ました。。
二次元配列にしたいって書いてるけど3つのフィールドは文字列文字列整数なんだよね? とりあえずその3つが入るクラスを定義して、それの配列なりArrayなりつくって入れてけばいい。 長さわからんなら、数える手段を考えるか随時伸びるようにすればいい。
そう、そうなんだけどそのやり方がわかんないんです。 ほんとすいません。。
クラスの定義ってこういう感じ? public: void SetLogKindForSearch( CString sLogKindForSearch ); void SetServerNamesForSearch( CString sServerNamesForSearch ); int SetSerachLength( INT sSearchLength ); だが、配列にしていく方法はさっぱりだぜ・・・
CArrayを先頭につければいいのかな? だかフィールド3つで下に続いていくようにする方法がわからぬ・・・
CMapStringObからCArrayに引数を変換できないっていうエラーが出るんだが、 意味が全くわからん・・・ 誰も起きてないかこんな時間・・・
言語の文法をろくに知らずにプログラムを書こうなんて、普通に不可能。 まず入門書を一通り読め。
そんな時間がないのでご助力をお願いしているのです。。
>>363 d。
ボタンのプロシージャはどれでも良いからボタンに返せばいいんですね。
仕事の話を2chで聞くとか信じられんわ……。
383 :
デフォルトの名無しさん :2008/12/16(火) 15:04:12
文字をドラッグで選択するとその部分が反転するプログラムを作りたいのですが、 マウスのクリックで範囲のポジションを取得して選択範囲は取得できたのですが、 反転をどうやればいいのかがわかりません。アドバイスお願いします。
まあ自分でコード書いて出してくれてるから対応はしやすいんだが、 出してくるコードが頓珍漢すぎてどこから説明したもんかわからんのだよ。 自分で理解してる範囲で書いてくれればいいんだが、適当にあちこちから断片集めてみました というコードじゃ直しようもない・・・ 仕様書いて0から起こしたほうがまだましだな・・
>>383 反転する前の表示はどうやってんのさ。
TextColorとBackColor入れ替えて書いてみるとか、
システムの標準の色から持ってきてそれで書いてみるとか。
>>385 元描画がいじれないとして、上から被せるような、CWndまでおおげさじゃなくてもいいんですが、
レイヤー的なもので半透明領域をかぶせられる関数は用意されていないでしょうか?
>>386 そんなのないと思うけど、、、再描画とかどうすんのさ。
いんちきだが、PatBlt()でDSTINVERTで反転とかどうよ。
なるどほ、元が動くと四角が付いてこないので被せるのは厳しいですね。 元をハッキングする方向にきりかえようとおもいます。ありがとうございました。
389 :
デフォルトの名無しさん :2008/12/16(火) 17:51:24
C++でint型変数の値をchar型に変換したいのですが、普通にキャストしてもエラーが出ます どうしたらいいのでしょう?
char配列の文字列にしたいと言っているのであれば、 ostringstreamか何かでstringにしてc_str()で取り出すとか、 あるいはsprintfなど。
391 :
デフォルトの名無しさん :2008/12/16(火) 18:03:23
ありがとうございます。試してみます
林晴比古氏のVisualC++のビギナー編を買ったのですが、自分の開発環境がexpress editionなのでMFCがありません。 サンプルがほぼMFCなので無駄な買い物をしてしまった…と見ていいのでしょうか? 他に手があるのでしょうか?
かわいそう・・・ 仲間だからわかる・・・
やはり無理でしたか… VisualStudioの基本的な操作を覚えるには役に立ちますよね? お互いがんばりましょう。
まったく役に立たないと思います。
MFCが使えるようになってからも役に立たない本でした。
林晴比古のC++シニア上下は、ぼろぼろになった今でも時々読みます。
http://www.kumei.ne.jp/c_lang/ 自分はMFCからなのですが、ここのWinAPIの最初の方だけ読んで一日でMFC使わないソフトも作れました。
最近の林本は.netのサンプルものってたような気がしたけど
>>395 そちらを買うか林氏の本を買うかで悩んでたんです。そちらのほうがよかったのですね!
>>396 .netのサンプルとは例えばどのようなものでしょう?
ソフトの操作だけなら林本でいいと思う
>>398 そう言ってもらえると助かります!
みっちり操作を体に叩き込みたいと思います!
MFCを使えるバージョンってどれですか 無償版では使えないらしいので購入しようと思います MFCを使えるバージョンと購入方法と価格を教えてください
401 :
M :2008/12/16(火) 23:30:14
C++でのラベリングで下のような場合で、簡単なプログラムのやり方を教えてくれませんか? 11111111 11111 1111111111 1111111 11111111 1 1 2222 2222 222222
MFCは全てのバージョンで使える
2003以前のバージョンなら確実に使える
上級者向けの本ってあるんですか?
>>400 です
>>403 さん
スタンダードバージョンでMFC使えるんですね
アマゾンで28000円かぁ
少々きつい出費になりますが
どうしても作ってみたいものがあるので思い切って購入しようと思います
詳しくありがとうございました
ヤマダ電機では売っていないのかなあ?
ヤマダポイント約6000円持ってるんだよね^^;
教えてくれてありがとうでした
VC++2008 Express使ってます。 Windows SDKを最新のものにしようと思い、2005使っているとき以来のPSDKを削除、 ついでにVC++2008も一旦削除して、さてインストールし直すぞ、と意気込んでいるのですが、 VC++2008をインストールすると、Microsoft Windows SDK for Visual Studio 2008とやらが自動でインストールされるそうで。 この場合、一旦これをアンインストールしてからMicrosoft Windows SDK for Windows Server 2008をインストール、でOK?
408 :
デフォルトの名無しさん :2008/12/17(水) 21:01:49
Microsoft Visual C++ 2008 Version 9.0.21022.8 RTM Win32コンソールアプリケーション ビルドの失敗 ソース↓ // test_1.cpp #include "stdafx.h" #include "test_2.cpp" class test_A{ static const int INT_A; static const char *TEXT_A; }; const int test_A::INT_A=1234; const char *test_A::TEXT_A="abcd"; int _tmain(int argc, _TCHAR* argv[]){ return 0; } // test_2.cpp #include "stdafx.h" class test_B{ static const int INT_B; static const char *TEXT_B; }; const int test_B::INT_B=1234; const char *test_B::TEXT_B="abcd";
>>408 のつづき。
ビルトをするとtest_Aは成功、test_Bは失敗します。ただし、一回目のビルドで
両方とも成功しているのに、その後同じ内容で二回目のビルドを行うと
やはりtest_Bだけ失敗するようになる、という場合もあります。
↓ ↓ ↓
fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
どこが原因なのか分かりません。
げっ・・・・・・プロジェクト→クラスの追加、でやってみたら、なんとなく やらなければいけないことが分かりました・・・・・・・・orz
>>408 ,409
// test_1.cpp
#include "test_2.cpp" // ←LINK1169
"test_2.cpp"をプロジェクトから除外するか、上記をコメントアウトすれば解決する。
>>412 _tmainでtest_Bが使えませんが・・・。
>>413 test_2.cppをプロジェクトから除外すれば使える。
>>414 「プロジェクトの外部」って扱いにしてから、呼び出すんですね?
>>415 そうだよ。どのみち #include "test_2.cpp" してんだから。
もっとも、#include "test_2.cpp"などというよーな書き方のほうを改めるべきだと思うがな。
// test.h
class test_A{
static const int INT_A;
static const char *TEXT_A;
};
class test_B{
static const int INT_B;
static const char *TEXT_B;
};
// test.cpp
#include "stdafx.h"
#include "test.h"
const int test_A::INT_A=1234;
const char *test_A::TEXT_A="abcd";
const int test_B::INT_B=1234;
const char *test_B::TEXT_B="abcd";
int _tmain( ・・・・) {
// To Do
}
ありがとうございました。 初歩の初歩でした。
cppをインクルードする奴ってキモチワルイ あとヘッダに関数の中身定義する奴も同様にキモイ
>>418 template関数全否定ですね、わかります
>>410 というわりにはExpression Blend 2のアップグレードが割引率高くて安いうえに
VS2008Stdが入ってるのは教えてあげないのね。
421 :
デフォルトの名無しさん :2008/12/18(木) 11:45:07
Visual Studio 2005 でC++をやっているのですが i = 0; for(i = 5; i < 0; i--){ printf("%d",i); fflush(stdout); Sleep(1000); } この処理を通ってくれません。forの頭までは来ているのですが次の処理でforを抜けてしまっています
422 :
デフォルトの名無しさん :2008/12/18(木) 11:49:24
C++なのにprintfなんだ・・・
>>421 i > 0
にしろ
それとi = 0は必要なのかね
424 :
デフォルトの名無しさん :2008/12/18(木) 11:52:40
すみません。書き間違いです コンパイラがC++で、書いてるのはCです
425 :
デフォルトの名無しさん :2008/12/18(木) 11:55:33
おお、いつのまに符号逆に・・・・最初は使えていたのにおかしいと思いました。すみませんありがとうございます i = 0 はなんとなく癖です
下らないかもしれないけど、助けて下さい・・・。 VS2008でC++作ってます。 Irvineとかそういうダウンローダーでよくあるグリッドの入ったリストを作りたいんだけど、そのパーツ?コンポーネント?の名前さえも全くわからず・・・。 ToolBoxでコレだよ、的なもので良いので教えて下さい。
>>426 Microsoft DataGrid コントロール
ActiveXのやつ
ってIrvineとかそういうダウンローダーを知らないんだけど LisiViewコントロールじゃだめなんかな?
ListViewってアイテムごとに枠がつかなくないか?エクセルみたいに
431 :
426 :2008/12/18(木) 12:55:29
出来たけどRowの部分に出てるのが気になる・・・orz
>>429 Excelみたいに各セルが選択できるタイプじゃなくて、選択の対象が行単位で出来るものが良いんですよね。
今ちょうど見たら良い例があったので出してみると、ギコナビの板の中身の表示部分(スレッド一覧)とか。
それにグリッドがついたようなものが欲しいです。
色々と足りてなくて申し訳ない・・・orz
リソースのストリングテーブルって1つ以上作れないんですが、 文字列をまとめて入れ替えたい場合はどうすればいいんですか? もしかして全てのloadstringの行でIDSを分岐させてるんですか?
433 :
あ :2008/12/18(木) 13:12:37
>>432 IDをずらす
LoadString(hInstance, IDS_MYSTRING + (f ? 10000 : 0), sz, 256);
えーまじですか・・・ めちゃくちゃloadStringあるんですけど・・・テーブル切り替えでがいいです!!!
DLL単位で作って切り替えるとか
おーーーthx!DLLで検索したら出てきましたよ!
Irvineはソース公開されてる
カスタムコントロールを派生させたいんですが、これ基本クラスなんですか? CCustamCtrlとかないんですが
MFCの話? コントロールはCWndから派生
カスタムコントロール自体のクラス名は何ですか?
そういうことかありがと
マクロで選択範囲の前と後に文字列を入れるにはどう書けばいいですか? "test" を選択してマクロ実行すると _T("test") になるようにしたいんです。 一度左に行って _T( を挿入するまでは出来るんですが、選択範囲が消えて ) を入れる位置がわからなくなります
馬鹿でした。コピーしたらできました DTE.ActiveDocument.Selection.Copy() DTE.ActiveDocument.Selection.Text = "_T()" DTE.ActiveDocument.Selection.CharLeft() DTE.ActiveDocument.Selection.Paste()
スタティックコントロールの背景を変えたいのですが、 CStaticの派生クラスのOnPaintの中で void CStaticEX::OnPaint() { CPaintDC dc(this); // device context for painting dc.SetBkColor(RGB(20,30,100)); } と書いたのですが、背景色が変わりません。これどこがいけないんでしょうか?
CPaintDC dc(this);
>>431 やっぱListViewじゃない?
ListView_SetExtendedListViewStyle(hListView, LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
みたいな。
「リストビュー 拡張スタイル」でぐぐってみたら?
他のダイアログボックスのオーバーライドOnOK関数呼び出しを、インテリセンスでは通っているのに コンパイルエラーでメンバでは無いといわれるのはなぜですか?
メンバでは無いから
もちろんメンバ関数として作成してインテリセンスでも通ってるんです。
インテリセンスがそんなに賢かったらコンパイルする必要ない
>>445 PAINTSTRUCT ps;
CDC* pDC = BeginPaint(&ps); にする。
もっとも、そんなことしなくても、スタティックコントロールの背景色の変更は、
親ウィンドウの CWnd::OnCtlColor() で簡単にできるんだが・・・。
すみません、このスレでいいのか分からないんですが、質問させてください。
全くのプログラム初心者に近い人間で、HSPをちょっと触ったことがある程度なんですが
C++を使ってみたいと思いました。
色々なサイトを回ってみたりしたのですが
開発環境の作り方がさっぱりわかりませんでした・・・orz
ttp://codezine.jp/article/detail/207?p=1 このページを参考に物を作りつつ勉強していこうと思ったのですが
最初の一歩目で躓きましたorz
どこか環境の作り方などが載っているサイトなどがあれば教えて頂けないでしょうか。
もし書き込むスレッドが間違っていたら教えて頂きたいです。
宜しくお願いします。
まずは窓のそばに観葉植物を置いて・・・。 という話じゃないとは思うんだが、開発環境って具体的には何を指してるんだ?
>>452 ありがとうございました。Ctlも調べてみますどうもです
>>453 エスパー的に答えれば
フリーのVisual C++ 2008 Expressをダウンロードしてインスコ(環境出来上がり)
でもそのレベルじゃ記事読んでも理解できないから
Cはある程度わかっているとして
猫でも読んでWin32APIの基本は少なくとも勉強する
メッセージループ プロシージャなど
ってことでOK?
その辺のってCLI系のヤツだろ それやるならC#でよいと思うがな 個人的には色々本買うより 初心者であってもCがある程度分かってるなら Petzold本読むのを進める
>>458 ああ、本当だ。.NET Frameworkって内容紹介に書いてあるな。
でもHSPをちょっとかじった程度だと、プログラミングWindowsとかムリだろ。
Express Edition c++ です。 フォームアプリケーションでファイルを開いて、フルパスからファイル名を抽出しようとしていて、 ググったところ、char ポインタ型で抽出していたので、System::Stringをcharポインタ型に変換してから抽出したのですが、実際に何度か連続で実行したところ エラーが発生しました。恐らくポインタの開放か初期化でミスってると思うんですが… ケータイからなのでソースは勘弁していただきたいので、System::String で直接ファイル名を抽出できないでしょうか? スレ汚しすいません。
>>460 です。
VisualStudio2008と書くのを忘れていました
>>460 System::String は使ったことがないので考え方だけ。以下のコードでできるかどうかは不明。
文字列の最後に出てくる \ の位置を求めて、先頭からその位置までの文字列をばっさり捨ててる・・・つもり。
検証は、まかせる。(笑)
String filename = pathname.Remove( 0, pathname.LastIndexOf('\\')); // pathname は フルパスが入っている String
>>462 最後の¥が残ってしまったものの抽出自体は成功しています!
後は自力でできそうです!
わずか一行で実装できるとは思いませんでした。
ありがとうございます。
System::IO::Path::GetFileName使えばいいだけの話じゃないの?
>>464 そんな便利な関数あったんですね…
すいません調べ不足でした。
>>463 ちなみに先ほどのは、ラストの¥の位置を表しているのでインクリメントしてあげれば解決しましたね。
お二方ありがとうございました。
>>463 >後は自力でできそうです!
そりゃできるだろ。^^;
String filename = pathname.Remove( 0, pathname.LastIndexOf('\\') + 1); // + 1 を追加
たったこれだけの修正ができなかったら、C++を勉強する前に
まずはCの基本から身につけたほうがいいと思うぞ。
VisualStudio2008 express、Windowsフォームです。 一つのイベントに対して複数のイベントを組むのは、どうすればいいのでしょうか。 具体的にはtoolStripのButtonをクリックした時に、名前をつけて保存と上書き保存と切り替えたいのですが…
468 :
デフォルトの名無しさん :2008/12/20(土) 23:43:49
Visual C++2008 ExpressEditionで、実行したときに全角文字が〓に文字化けしてしまうんですがどうすれば正しく表示されるんでしょうか? プログラムはこれです。 #include <iostream> using namespace std; int p,t,a,d,c,v,i,m[90]={0},s,r[]={-10,-9,-8,-1,1,8,9,10}; void k(){ if(m[p]==0)for(i=0;i<8;i++){ for(c=0,v=p+r[i];m[v]==3-t;v+=r[i])c++; if(c&&m[v]==t){ a+=c;v=p; if(d)do m[v]=t,v+=r[i];while(m[v]!=t); }}} char*h="・○●\n" ; int main(){ for(i=1,m[41]=m[49]=2;i<10;m[i++*9]=3)m[40]=m[50]=t=s=1; for(;;a=d=0){ for(p=9;p<82;++p)k(),cout<<h[m[p]*2]; if(a)for(d=a=s=p=8;a==8;k())t-2?(cin>>p>>i),(p+=i*9):++p; else if(s)s=0,cout<<"pass"; else break;t=3-t; } return 0; }
>>468 [構成プロパティ]-[全般]-[文字セット]がUnicodeがどうのこうのってなってね?
マルチバイトがどうのこうのってのに設定すれば多分動くんじゃね?
VC++2008EE SDK です。 hToolBar = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | CCS_ADJUSTABLE | CCS_NORESIZE, 50,200,200,20, hWnd, NULL, hInst, NULL); ツールバーに背景色を設定したいのですがやり方がわかりません。 教えてください。
471 :
デフォルトの名無しさん :2008/12/21(日) 19:25:33
>>470 SetWindowLongPtr
GCLP_ HBRBACKGROUND
void型の構造体からデータを取得したいのですがやり方がわかりません教えて
473 :
デフォルトの名無しさん :2008/12/21(日) 21:07:43
VS2005もしくはVC++6.0でリソース(ダイアログ、アイコンなど)を編集する実行ファイルの名前はなんなんですか?
msdev.exe
VS2008です。 右にTextBox(MainText)、左にパネル、パネルの上にTextBox(LineText) LineTextにはMainTextの行数を表示してあります。 こんな風↓ パネル|MainText 1 |文字 2 |文字 3 |文字 でMainTextがスクロールするときには、同時にパネルをスクロールしたほうが、いいでしょうか? LineTextをスクロールしたほうがいいでしょうか? また、どうスクロールしたらいいでしょうか?
477 :
470 :2008/12/21(日) 23:15:22
453です。暫く忙しくてPC触れず、返信が遅れました、すみません。
>>454 すみません、言葉が足らなかったようで。
開発支援ソフトというか、ソースを書いて、実行して・・・という動作を行うソフトを探していました。
こういったソフトを何というか、用語等が分からなくて・・・すみません。
>>456 直感で欲しかった返答を頂き、有難うございます。
少しずつ調べていく感じで、時間がかかっても一歩ずつ進んでいこうと思います。
>>457 ,458,459
参考書を探してみたのですが、書店で見てもイマイチどれがいいのか分からなくて・・・
購入して意味が分からない、というのも問題だと思ったのでいろいろネットを見回っていました。
Petzoldという本がどれかは分からないのですが、また今度探してみようと思います。
皆様、返信ありがとうございました。
試行錯誤で少しずつ勉強してみようと思います。
CListCtrlでレポートスタイルにアイコンを表示するにはどうすればいいんでしょうか DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | LVS_REPORT; m_ListCtrl.Create(dwViewStyle, rectDummy, this, ID_FileListCtrl) m_ListCtrl.InsertColumn(0, _T("NAME"), LVCFMT_LEFT, 100); m_Images.Create(IDB_NAME, 16, 0, RGB(255, 0, 255)); m_ListCtrl.GetHeaderCtrl()->SetImageList(&m_Images); ここまで来たんですが、どうしても表示されません、教えてください。
InsertItemの引数
すいません忘れてました。 m_ListCtrl.InsertItem(0, _T("TEST"), 2); // BMPの3つ目のイメージを期待 Insertはこうかいてます
SetImageList()呼んでないんじゃない?
つーか、ヘッダに載せたいの?
確認しましたが、SetImageListは呼んでません リストコントロールの0列目の頭にアイコンを付けたいんです。 BMPは16で区切って8インデックスあるので 2番目は空では無いとおもうんです
いや、ちょっと使い方に問題があると思うけどアイコンなくっても アイコンのある筈の場所が空白になるだけだから、それは確認できるはず。 で、 m_ListCtrl.GetHeaderCtrl()->SetImageList(&m_Images); これは m_ListCtrl.SetImageList(&m_Images); じゃないのか?
m_ListCtrl.SetImageList(&m_Images, LVSIL_SMALL); こうか
うおーーーできたーー GetHeaderってなんだったんだーーーー ありがとう。まじありがとう。 無駄に難しくはまり込んでいた・・・
488 :
デフォルトの名無しさん :2008/12/22(月) 20:19:26
VCで作ったwindowsのプログラムを全く別のパソコンで動かすにはどうしたらいいのでしょう? ソリューション構成のとこをreleaseにして、できたexeファイルと画像と音声リソースを 同じディレクトリに入れて、USBメモリで他のパソコンに移して実行しても、 アプリケーションの構成が正しくないとかいうエラーが出てしまいます。 どなたかアドバイスお願いします
まずは、正確なメッセージを貼るところから始めよう。
次に、そのメッセージでググってみよう。
アプリケーションをスタティックリンクするか、「他のパソコン」にランタイムをインストールするといいかも。
492 :
デフォルトの名無しさん :2008/12/22(月) 21:11:11
ググッてみたら解決方法がいっぱい出てきました。 出てきたページを参考にランタイムを入れてみようと思います。 ありがとうございましまろ
>>478 プログラミングWindows 第5版 (Charles Petzold著)
Win32APIを勉強する上ではバイブル的本だと思うが
君が理解できるかどうかは俺にはわからん
ただ訳もよくできてるから 初心者が読んでても結構楽しいぜ
それなりの値段だから 大きめの本屋で目を通してみると良い
とりあえず上巻だけでOK
VC++2003を使用しています テキストファイルやmp3等のリソースエディタでは埋め込みが不可能なものを リソースとして埋め込み、使用するにはどのようにしたらいいのでしょうか ググった所ビルドアクションを埋め込まれたリソースにするという事はわかったのですが、 追加したファイルのプロパティを確認しても項目がその他しか出ていませんでした どうかよろしくお願いします
VisualStudio2008 c++ です。 Regex::Matchesでパターンマッチした文字の位置を取得して、その列をSelectにすることできる? ABC ABC ABC ↑これでAをMatchesで取得したとして、3つ目のAを指定したら3列目が選択される。みたいに わかりにくくてごめん。
>>496 カスタムリソースで調べてやってみたら埋め込みリソースが成功しました
本当にありがとうございます
VC++上でコンソールアプリケーションを実行したときに printf()の出力先(標準出力)を、VC++の出力窓にすることはできます? (OutputDebugString()を使わずに・・・)
printfってオーバーライドできたっけ?
>>498 標準出力の出力先はSetStdHandle()で切り替えられるけど、VCの出力窓のハンドルって取得できるのかな?
調べたらできるかもしれない。
なんでんなこと死体んだ
>>498 printfをオーバーライドして中身にOutputDebugString書いちゃ駄目なの?
あくまでOutputDebugStringは使っちゃ駄目?
Regex::Matchesで検索した文字列の位置って、Forで地道に文字数カウントしかないの? MatchCollectionのメンバで位置取得とかできないの?
#define printf (vsprintfしてOutputDebugStringする自作関数)
自己解決した。スマソ
質問です。 Visual C++ 2005 Expressを使っているのですが、 EXEファイルのプロパティから見られる「バージョン情報」を追加するには どうすればいいんでしょうか?
>>507 ありがとうございます。そちらを参考にして一応設定し、「バージョン情報」タブが
表示されるようになりました。
ですが、何も設定していないのに「言語」という項目が「英語(米国)」という値で
自動的に設定されてしまうのですが、この「言語」の項目を「日本語」にするには
どうすればいいのでしょうか?
ためしに
VALUE "言語", "日本語\0"
と記述すると項目は追加されるのですが、「言語」「英語(米国)」は残ってしまいます…
509 :
508 :2008/12/25(木) 20:01:21
自己解決できました。TranslationとStringFileInfoのBLOCKの値に 関係してたんですね
VC++2008で、エディットボックスに入力された値を%と仮定して、 演算を行いたいと思っています。 15 と入力されていれば、1.15で演算 現在、取得した値に100加算し、100除算するようにしているのですが、 桁落ちが発生してしまい、変数に格納される値が1.1499…となってしまいます。 桁落ちを発生させず、正しく1.15として変数を格納するためにはどのようにすればよろしいでしょうか。 CString strBuf; double d; ((CEdit*)GetDlgItem(iID))->GetWindowText(strBuf); // strBuf="15" d = atoi(strBuf); // d=15.00000000 d = 100 + d/100; // d=1.149999999
整数で計算して下さい
結果出力、つまり文字列に変換するときに丸めればいい。 偶数丸めとか四捨五入とか。
1ドル15セントみたいな概念は理解できないんだな
100 + d/100
たぶん、( 100 + d ) / 100 と書きたかったんじゃないか?
516 :
510 :2008/12/26(金) 09:32:30
(100+d)/100の間違いでした。 四捨五入で試して見たいと思いますが、 少数で演算はやめておいた方がよさそうですかね。 計算式が少し複雑なものだったので、楽できればと思ったのですが。 ありがとうございました。
517 :
デフォルトの名無しさん :2008/12/26(金) 11:57:21
CString型の文字列に格納されている文字を1文字ずつ取り出したいです。 ただし半角なら1バイト単位で、全角なら2バイト単位で、という風に分離したいです。 半角だけなら、Strcpyでcharの配列にコピーした上で、 str[0] str[1]...という風に取り出せますが、 全角が混じっていると、1バイト目、2バイト目と分離されてしまいます。 その文字が半角か全角かを判断して、半角なら1バイト、全角なら2バイト同時に取り出すロジックを作りたいです。 こんな感じの関数として。 CString ripString(CString src,int index){ //ソースとなる文字列、n文字目 /*〜処理〜*/ return 文字列; } たとえば"あaいbうcえdおe"という文字列を入れると、 CString str="あaいbうcえdおe"; ripString(str,0) →結果 "あ" ripString(str,1) →結果 "a" ripString(str,2) →結果 "い" ripString(str,3) →結果 "b" ・ ・ ・ こういうことをするのに良い方法はありますか?
CharNext, IsDBCSLeadByte
>>517 CString::GetAt( int iChar)
初めてDLL作ろうとしたのですが、依存関係を設定してビルドするとなぜか〜〜.libが見つかりませんとでて失敗します。 〜〜.dllってどのようにすれば使えるのか教えてください。 dllファイルの作成自体は成功しています。
散々調べてから2ちゃんで質問したんですが・・・ とりあえず自己解決しました。 Project Test ←dllを使うプロジェクト Project Test_dll ←dllのプロジェクト という感じで、Test_dll.libができるのかと思ってたら、Test_dll.dllとTest.libの名前でファイルが作成されてました。 はじめにTestのソース内で#pragma comment(lib, "Test.lib")を試したところ 出力ファイル名が入力ファイル名が一致しています。というエラーが出たので、(名前も対応していないので) Test.libがTest_dll.dllのアタッチとは関係ないものだと早とちりしていました。 結局Test.libをTest_dll.libにリネームして、リンクすることでビルドに成功できました。
ただ出力ファイルのdllの名前はプロパティから変更できたのですが、出力されるlibファイルの名前が変更できません。 みなさんは毎回手動でリネームしているのでしょうか。
libが必要になる方法なんかで作らないもん 面倒だし
ビルド後のイベント
リンカの詳細にインポートライブラリってのがあるべや
528 :
デフォルトの名無しさん :2008/12/28(日) 20:13:39
モードレスダイアログのコンボに対して、親ウィンドウから値をセットするにはどうしたらいいんでしょうか。 Win32 VC++です。 モードレスダイアログに setData(char* text) { ComboBox_AddString(hwndDialog, text); } 親から dialog.setData(text); UpdateWindow(hWndDialog);
うまくいかないのなら、その経過も書いてよ
親から送る ComboBox_AddString( GetDlgItem( hWndDialog, IDC_COMBOBOX), text);
531 :
デフォルトの名無しさん :2008/12/28(日) 23:12:16
>>530 おっしゃるとおりにやってみたのですが、現象は変わりませんでした。
現象は、モードレスダイアログにあるコンボの中身が空のままです。
ただ、 num = (int)SendMessage(GetDlgItem( hWndDialog, IDC_COMBOBOX), CB_GETCOUNT, 0, 0);
でみると要素数numはちゃんと増えています。
WM_PAINTを拾ってInvalidateRectで再描画する必要があるのでしょうか。
>モードレスダイアログにあるコンボの中身が空のままです。 ポインタ操作間違えて文字化けしているだけじゃないのか?
そもそもどこの時点でしけてんだよ まず、モードレスダイアログ自身に同じ処理を書くと成功すんのか?それ
コンボボックスのリストの部分のサイズどうなってる? コンボにフォーカスして↑↓キー入れてみたらちゃんと追加されてるとか
ボタンが無効かどうかを調べるにはどうすればいいんですか?
IsWindowEnabled()
ありがとうございますっ
Visual C++ 2005 Express+Windows Platform SDKの環境なのですが、 実行時にメニューバーの表示/非表示を切り替えたいのですが、 どういった方法がありますでしょうか?
メニューバーをツールバーコントロールで作成しておいて、 EnableWindow( hWndToolBar, ( IsWindowEnabled( hWndToolBar) == FALSE);
しまった、カッコが一個たらね。
別の方法で解決しましたが、レスありがとうございました
542 :
デフォルトの名無しさん :2008/12/31(水) 22:52:19
どうやって解決したのか書いてけよ クソだな 根っからのクソ 育ちが悪すぎる 親、何?誰?かなりクソでしょ? 教育失敗してる
543 :
デフォルトの名無しさん :2008/12/31(水) 23:51:34
今やるならC#で始めるほうがいいよな>初心者 ペゾルド本もC#だし。
ネコ以下でした…
vcprojからnmakeに変換する方法があれば教えてください。
VC6はメニューにあるね
2002以降無くなったな、便利だったんだが・・・
>>546 ,547
レスありがとうございます。
探して見つかったら報告します。
#include <fstream> char *textdata; void main(){ ifstream fin; fin.open("test.txt",ios::binary); この後、textdataにtest.txtのデータをコピーしたいのですが test.txtはeofの後にもデータがあります。 それも含めて、ファイルの最後までデータを読み込みコピーするには どうすれば良いですか?
そういう関数の中でeofチェックしてるはずだから eofチェックしない処理を自作する。
できません
>>549 eofのあとにデータがあるんじゃなくて、eofの判定をミスってるだけだろ。
#include <fstream> #include <iostream> using namespace std; char textdata; void main(){ ifstream fin; fin.open("test.txt",ios::binary); while(!fin.eof()){ fin.get(textdata); cout << textdata; } getchar(); 最初から作ったらできてたお
すいません。質問です。 プリコンパイル済みヘッダーを使用する設定にして、 ソースにプリコンパイル済みヘッダーを include しないと、 「プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました」 というエラーが出るのですが、 これは全部のソースに、プリコンパイル ヘッダーを include しないといけないのでしょうか?
>>555 すべての cpp ソースの頭に
#include "stdafx.h"
と書けば解決する。
つまり「全部のソースに、プリコンパイル ヘッダーを include しないといけない」というわけだ。
>>556 さん
>>557 さん
ありがとうございます。
やはりそうなのですか。
ところで、何で全部のソースに書かないといけないのでしょうか?
自分のイメージでは、プリコンパイルヘッダーって、
ヘッダーファイルをまとめたヘッダーファイルみたいな物と思っています。
別にプリコンパイルヘッダーに登録されているヘッダーファイルが
必要じゃない場合とかも、そのソースに include しないとエラーが出るっていうのが、
いまいち納得できませんでした。
何か自分は考え違いをしているのでしょうか?
>>558 プリコンパイルヘッダーを使用する/しないは、全体の設定のほかに
個別のソースごとに設定できる。
必要なけりゃそれで除外すればいい。
>>558 プリコンパイルヘッダはコンパイル前にあらかじめヘッダーをコンパイルして結果を保存し、再利用してコンパイルを高速化するためのもの。
だからプリコンパイルヘッダを使用すると指定したモジュールのヘッダー読み込みの順序が同じでなければならない。そのために各ファイルの先頭でstdafx.hを読み込むようにしている。
イベントのハンドルが引数になってる場合はどうやって渡せばいいんですか?
ようするにebp/espを書き換えなければ済む話。 警告無視で書き換えるなら、__asmを入るときの値を出るまでに復元しろということ。
564 :
デフォルトの名無しさん :2009/01/03(土) 23:47:30
警告0の正しい?コードを書こうかなと思ってコード書き直してるのですが、 ReadProcessMemory(ProcessHandle, reinterpret_cast<LPVOID>(ModuleAddress+data.offset.x), &x, 4, NULL); こう書くとwarning C4312: 'reinterpret_cast' : 'DWORD' からより大きいサイズの 'LPVOID' へ変換します。 とでるのですが、正しい使い方はどうなるんでしょうか? ModuleAddressとdata.offset.xはどちらもDWORDです。
それは、Win64だとvoid*も64ビットだから気を付けろという警告。 キャスト元をDWORDからULONG_PTRなんかにすればいい。 DWORDはWin64でも32ビットのままだが、ULONG_PTRはポインタと同じく64ビットになるという整数型。
566 :
デフォルトの名無しさん :2009/01/04(日) 01:17:12
Windows XP SP3 Visual Studio 2003 の話です ソースAがメインのソースとして ソースBとCが他にあるとします. ある構造体の宣言をソースCでし,ソースAとBでその構造体を使いたいものとします. そのときコンパイルすると 構造体の再定義というエラー error LNK2005: "その構造体は 既に ****.obj で定義されています。 とでます. どのように宣言すればよいでしょうか?
グローバル変数の実体は一つだけにして、他ソースからはexternで参照する。
コンパイルエラーが出るなんて糞質問はコード公開必須だボケが
569 :
566 :2009/01/04(日) 01:31:04
すみません別ファイルへのリンクに #include "ソースC.cpp" とかいう変なことしてました.
>>564 プロジェクトのオプションに64bit互換のチェックの有無があるからoffにする。
571 :
562 :2009/01/04(日) 11:48:44
>>563 ありがとう。
pushとpopをしておけば良いのですね。
Visual C++本体の扱い方を解説しているサイトはありますか? コーディングはできるんですが、ソフトの機能を把握しておきたいのです ちなみに2008です
>>572 ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ja/dv_vstoc/html/06ddebea-2c83-4a45-bb48-6264c797ed93.htm
exeのディレクトリにあるファイルは読み込めるのに exeのディレクトリのフォルダのファイルは読み込もうとするとエラーが出ます。 何故ですか? ifstream fin; OK↓ fin.open("test.txt",ios_base::binary); NG↓ fin.open("data/test.txt",ios_base::binary);
575 :
574 :2009/01/04(日) 22:21:20
どうやらファイルを見つけていないようです。
576 :
574 :2009/01/04(日) 22:40:00
単なるスペルミスでした。
動的に作成した画像ファイルを読み込むとエラーになるんですが なんとかなりませんか?
エラーの内容から原因を推測して修正してください
short int からintへ,int からshort intへの代入で, 特に型変換を記述しないで実行したんだけど,エラーも出ずに普通に動いた. これ放置してて問題ない?それともちゃんと型変換した方がいい?
コンパイラの警告レベルを高くしたらコンパイル時に文句言うんじゃね、と無責任に答える
その場合でもshort→intのように無条件に大きくなる方はそのままでも平気。
582 :
デフォルトの名無しさん :2009/01/06(火) 01:42:53
「const unsigned char *」 型とはどういう扱い方をするものですか? _ismbslead、_ismbstrail関数を使って、文字列の中の2バイト文字を判別したいのですが・・・ int _ismbslead( const unsigned char *str, const unsigned char *current ); この引数の渡し方の意味がわからないです。 CString型、もしくはこいつをコピーしたchar型の配列の各バイトをチェックするロジックを作りたいのですが、 第一、第二引数どちらについても、char*型で渡そうとすると「const unsigned char*に変換できません」というコンパイルエラーが。 この関数はどうやって使うモノなのか教えてください
ありがとう,とりあえずはshort int から int へはそのまま放置しときます.
constというのは呼び出す関数の内部で値を書き換えないようにするものなので この場合無視していい char * を unsigned char *にキャストする
FileStreamとBinaryReaderを使って、Byte型の配列を、読み込んだファイルのデータ長に合わせて宣言したいです。 //入力ストリーム作成 FileStream^ fs = gcnew FileStream(fnp, FileMode::Open); //バイナリリーダー作成 BinaryReader^ br = gcnew BinaryReader(fs); //データ読み込み int len = (int)fs->Length; //データ長 System::Byte data[len]; こうやると、C2057とC2466、C2133が出て、ファイルを読み込んでからByteの宣言は出来てないみたいなんですが、 どうすればファイルを読み込んだ後にByteの配列を宣言出来ますか?
>>586 array<System::Byte>^ data = gcnew array<System::Byte>(len);
もっとも、File::ReadAllBytesを使えば1発で済むぞ。
>>586 ありがとうございます。もうひと頑張りしてきます。
VC++でHashTab Shell Extensionみたいにプロパティをいじるようなソフトを作りたいんですが、何をすればいいかまったくわかりません。。 どなたかヘルプミーお願いします。
HashTab Shell Extensionは知らんけど、まさにShell Extensionで調べるのがいいんじゃ? 絞るならCOMもつけるといいかも
>>591 サンクス!
とりあえずとっかかりができました。これからいろいろ調べてみようと思います。
Stringに\nで改行とかって含めることできますか? それかString以外の別の型使わなきゃだめですか? テキストボックスに改行付きで変数で一括で突っ込みたいんですが・・・
>>593 Stringということは.NETか?
\r\n
.NETならEnvironment.NewLine、普通のC++ならエディットボックスはWindowsの\r\nで。
>>594 ,595
できました、ありがとうございます。
CImageで読み込んだ画像ファイルに直接直線を描画したいのですが、 何か方法はありませんでしょうか? Visual Studio2008でプログラミングをしています。
LineTo( hDC, nEndX, nEndY);
599 :
597 :2009/01/08(木) 01:12:20
画面上ではなく、Cimageの読み込んだ画像のピクセルを直接書き換えるように 直線を書き込みたいのですが、何か方法はないですか??
LineTo
2008の表示>ツールボックスの文字色はデフォが黒なんだけど見づらいので どこをいじれば変えられますか?
初心者です教えてください
このソフトは初心者には扱えません。
Editにキーボードで入力するとEN_UPDATEが発生するんですけど SetWindowTextで文字列を挿入するとEN_UPDATEイベントが発生しません。 どうすれば良いでしょうか?
オバマじゃだめなのか?
#include <iostream> #include <string> using namespace std; void main(){ wcout<<L"test"; wcout<<L"うんこ"; getchar(); } なぜかL"うんこ"が表示されません。 っていうか日本語が表示されないのですが なんとかしてください。
ロケール
うぁありがとぉぉおおう
一度壊れたインテリセンス情報って復活できる? ncbファイル消して開きなおしても、入力支援できない・・・
プログラムではなくて、機能の質問なんですが、 #endifと最後に打った瞬間、上記文(#endifから上)の文字が全て灰色に変わりました。 (#ifdefなら青くなる筈だが、灰色に…) 色付に戻したいです。どうすれば良いのでしょうか? よろしくお願いします。
そりゃコンパイル条件から外れたからだろう
アウトラインとかは関係ないのでしょうか?
614 :
611 :2009/01/13(火) 13:51:34
自己解決しました。 一番最初のプリプロセッサ命令のスペルミスしてた。 数時間格闘した結末はやはり呆気ないものだな…。
コンパイル条件から外れた、で意味わからなかったのかよ・・・
すんません。実行時にフォームのタイトルバーに文字を指定する方法を教えてください。。。
あ、すんません。visual c++ 2008です・・
あ、すんません。普通にText = "aaa";でいけました。ほんとすんません
ゆとり死ね 市ねじゃなくて死ね
CoInitializeで未解決のトークンとリンクエラーになるのですが何かlibを追加しなくてはダメですか?
ole32.lib だと思うが、普通はわざわざ指定しないけどな?
>>621 普通は指定しないですよね?
でもなぜかしれを追加したらリンク通りました・・・
ありがとうございます。
623 :
611 :2009/01/13(火) 19:22:32
>>615 フフ、プログラミングでわからない事なんて、しょっちゅうよ…
・Visual C++2008 express ・開発環境・・WindowsVista Debugモード、Releaseモード共にコンパイルは通ります。 Debugモードでデバッグ無しで実行は問題なく動作し、正常に終了します。 Releaseモードでデバッグ無しで実行した際には、途中でOSからのエラー、 ----.exeは動作を終了しました。 問題が発生したため、プログラムが正しく動作しなくなりました。 というメッセージが出、途中で終了します。また、エラーが出るタイミングも まちまちです。 これはどういう問題かと思われますか?タイミング問題でしょうか?
変数の初期化し忘れとかそういう方向で
Windows XP、Visual C++ 2003 でダイアログアプリを作っています。 アプリを一つだけ起動した状態は問題ないんですが、二つ以上起動すると タスクバーのボタンがグループ化されたときに「(2) TODO: <ファイルの説明>」というような 表記になってしまいます。 このような文言らしきものがリソースの VS_VERSION_INFO にあったので 適当に編集してみたのですが、表記は変わりませんでした。 どうしたらタスクバーの表記が正しいものになるでしょうか?
627 :
624 :2009/01/15(木) 09:05:56
>>625 やはり、考えられるのはそれぐらいになりますよね・・・
ありがとうございました
>>626 以下のレジストリから該当アプリを削除して再度実行する。
HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache
基本クラスをCFormViewで作成したときに これのウィンドウハンドルはm_hWndでしょうか?
GetSafeHwnd()使え。
メイクしたユーザの名前を実行ファイルに 文字列として埋め込むことって可能ですか?
可能
633 :
626 :2009/01/15(木) 19:10:04
>>628 おおお 初回起動時の値をずっと保持しているのですね。
消して再実行したらきちんと編集した値に更新されました。
どうもありがとうございました。
634 :
631 :2009/01/15(木) 19:20:38
>>634 #define hoge "うんこタロウ"
636 :
631 :2009/01/15(木) 19:29:40
>>635 それだと"うんこタロウ"以外がメイクした時にも
"うんこタロウ"と埋め込まれると思うのですが・・・
メイクする人が変われば名前変更しなさいよ VCは自動でメイクした人の名前を認識できませんよ
638 :
631 :2009/01/15(木) 19:43:49
>>637 やはり手動でしかできませんか・・・
ありがとうございます。
639 :
631 :2009/01/15(木) 19:53:11
今思いついたのですが、 static const char NAME[NAME_LEN] ("HOGEHOGE"); と、ソースに埋め込んで、ビルド後のイベントで 実行ファイルをバイナリレベルで走査し、 指定文字列を発見したらGetUserName()を埋め込む というのは危険すぎるでしょうか?
ビルド後のイベントって他環境でも強制できるの?
641 :
631 :2009/01/15(木) 20:05:23
>>640 恐らく*.projあたりに埋め込まれているのだと思うので、
VCを使用している限り埋め込む実行ファイルと
プロジェクトを一対で持ちまわれば
可能になるのではないかな、と。
ただ、プログラムのコード中に(想定しているバッファ以外に)
走査対象文字列が出てきたらと考えると危険な香りが・・・
>>641 コンパイルオプションに環境変数 USERNAME を埋め込むのはどうか?
/D "HOGEHOGE_USERNAME=\"$(USERNAME)\""
コードでその文字列を確保
CString sUserName = _T(HOGEHOGE_USERNAME);
C言語の勉強として、GetWindowRect関数を利用してウィンドウシェードを作っているのですが、 OnGetMinMaxInfoで最小サイズを指定していると思われるウィンドウではどうしてもタイトルバー だけにすることができません。 どうすればそのようなウィンドウでもタイトルバーだけにすることができるでしょうか。 Microsoft Visual C++ 2008 Express Edition DLLファイル(TTBaseのプラグイン)
644 :
631 :2009/01/15(木) 20:53:40
新規作成で出てくるウィザードにあるプロジェクトの種類 CLR Win32 全般 ってどういう使い分けなんですか? ロベールのC+;教室ってサイトでは Win32 コンソール アプリケーションを使ってやるみたいなんですけどどれがどう違うのか教えてください。 それと新規作成でファイルを選んだ場合に作成されるのがプロジェクトで作ったのと何が違うのかも・・・ VC++2008EEを使ってます
>>645 CLRは.NET frameworkを使ったプログラムでC#やVisualBasicで作るのと同じ中間言語にコンパイルされる
C++で使う利点は無いので最初からC#で書いたほうが楽
実行時にランタイムが必要だったり不便な点がある
Win32は普通のプログラムなのでこれで作れ
全般はコンパイラを別のにして開発環境だけ使うとかしてクロスコンパイルが出来る(メイクファイルプロジェクト)
すごく初歩的な質問かもしれませんが、1つのプロジェクトにa.cppとb.cppがある場合どのような順番でコンパイルされていくんですか?
プロジェクトファイルに書いてある順番
順番なんかどうでもいい
/MP使えばほぼ同時だな。
MFCでファイルオープンダイアログを出す方法を教えてください
CFileDialog dlg(TRUE); if (dlg.DoModal() == IDOK) { MessageBox(dlg.GetFileName()); }
654 :
デフォルトの名無しさん :2009/01/19(月) 23:39:08
CM_Get_DevNode_Registry_Propertyのかわりに SetupDiGetDeviceRegistryPropertyほうを使うのが良いらしいんですが、 どういう理由なんでしょうか?
MSDNにそう書いてあるから、じゃだめ?
今使っているのはVisual Studio 2005です。 人に出来上がったexeファイルを配布するときに このアプリケーションの構成が正しくないため、 アプリケーションを開始できません でした。 というエラーを起こさないようにプロジェクトのランタイムライブラリの設定を マルチスレッドDLLからマルチスレッドに変えました。 そうしたら以下のような警告が出て、他にも外部シンボルが未解決ですというエラーが大量に出ました。 warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 人に配布するときに一番上のエラーが出なく、かつリンクが通るようにするにはどのようにすればいいのですか?
>>656 DebugビルドとReleaseビルドが混じってるとか
リビルドしてみるか、言われたとおり /NODEFAULTLIB:LIBCMT.lib を試してみる
659 :
656 :2009/01/21(水) 14:59:38
ゲームを作ろうと思っているのですが、 他の人が作っているゲームや商業用のゲームは 再配布可能パッケージをインストールしなくても動いているのが気になります。 それはなぜなのでしょうか。
>>659 スタティックリンクかもしれないし、
MFCを使ってないかもしれないし、
VCじゃないかもしれないし、
付属のセットアップで全部インストールされるかもしれないし、
…
もういいですか?
全然満足できません
あぁもう面倒くさいな。 取り敢えず「スタティックライブラリでMFCを使用する」でどうなるかやってみろ。
面倒くさいならレスしないで下さいよ。ここは初心者スレなんだから。
他の人が作っているゲームや商業用のゲームとかいう認識レベルのやつに説明しても無駄 開発環境や使用ライブラリぐらい調べてから質問しろ
無駄ならレスしないで下さいよ。ここは初心者スレなんだから
初心者じゃなくて初心者以前だろ
知りもしないで文句だけたれてるクズがうざぃ
そのゲームと同じにしたかったら同じ環境で同じように作ればいい
その程度のレスなんていらないよぉ
Microsoft Visual C++ 2005 再頒布可能パッケージなんだから Visual C++ 2005以外で作れば入れる必要ない
と思われるウィンドウって他の人が出してるウインドウ? サイズ変更のメッセージでサイズ調整したりするけど 他から勝手に余計なことされたらどうなるんだ?
余計な事は考えないで質問にだけ答えてくださいよ。
>>673 ウィンドウシェードが目的なので他のプログラムですね。
コマンドプロンプトなどだと中身が一行見えたり、GIMPだとほとんどウィンドウの中身が見えてしまっていて全く使えません。
もちろん手動でタイトルバーだけにしようと思っても(OnGetMinMaxInfoかなんかで)それ以上小さくならないですし。
ウィンドウシェードなんて聞いたことない 知ってるやつが来るまでおとなしく待ってればいいよ
>>676 MacやBlackboxなどにあるウィンドウをタイトルバーだけにする機能のことです。
explorer.exeを殺して最小化すればいい。
>>675 他のシェードツールでは問題なく動作するの?
それなら動かしつつSPYで見てみるとか
>>678 互換シェル使っていますのでexplorer.exeはファイラー以外使ってません。
でもシェルを切ればタイトルバーだけになりますね。あまりあれは好きではありませんが。
>>679 Stylerでできた気がするのですが諸事情で確認できません。
VS2008(VC9?)で、newしたときに、失敗したときに例外じゃなくてNULLを返させたいです。 でもnew(nothrow)みたいに、既存のソースのnewを一個一個置き換えるのはやなので、一発でなんか無いですか?
newを自作
なんか方法があるのは憶えてるけど、どうやるかは忘れたな。 ググればでてくるんじゃないか?
検索したらmsdnにヒットしたけどオフィシャルとは思えない笑える説明
笑える部分をコピペしてやりたいけど、それやると検索で見つかってしまうからやめておこう
ダウンロードしたMSDNライブラリを、たとえばfirefoxで閲覧するにはどうすればよいでしょうか
もしかしてnothrownew.objをリンクするってやつ?
WindowsのAPI関数をさしてF1キーなどでドキュメント付属のリファレンス見れますけど、 英語のものばっかり表示されるんですが、日本語で表示するにはどうすればいいですか? オプションで全部日本語を設定してるんですが・・・
んな難しい英語使われてないやろ
なんで2ちゃんねらーって論点をずらすことばかりするの?
そりゃあたくさん人がいるからだよ
visual studio使ってる段階でクズだし基地外が好んで使うから
>>689 キーワードタブのフィルタ条件を「日本語ドキュメント」にする。
その状態は記憶されるので次からは日本語になる。
VC++6.0を使用しています。 メニューバーの項目を一つだけ右端に持って行きたいのですが可能でしょうか? 下のような感じで。 ________________________________ |ファイル|編集|表示|___________________|ヘルプ|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>695 リソースじゃなくて自分でメニューバーのウィンドー作れば可能
700 :
695 :2009/01/22(木) 16:15:20
Web制作の経験があるという理由だけで会社でVisual C++の担当になりました。 1から勉強しなければならないのですが、そもそもこのソフトで何ができるようになるのでしょうか? 上司に聞こうにも上手くはぐらかされるだけでストレスになっています。 例えばこういうものが作れるといった具体例があれば教えていただけないでしょうか?
この世に存在する自動的に制御されているものはほとんど作れます
これはさすがに釣りだろjk
>>701 ウインドウズのアプリケーション。
ライブラリ。
DLL。
COM。
ActiveX。
Webアプリケーション。
工具箱で何が作れるのか聞いてるようなもんだな。
最初、ヴァーチャルストゥディオって読んでました
VirtualStdioか 意味は通らなくもない
VisualC++2005EEとVisualC++2008EEの違いって何ですか? 教えてください。
710 :
デフォルトの名無しさん :2009/01/25(日) 16:40:52
VisualC++2008EEのほうが全てに秀でる あと軽い
ありがとうございました。 2008インストールしてみます。
>>701 会社の業務に関係するシステムを作らされそうなの?
たぶんC#とかVBでやったほうがいいとおもうけど。
713 :
デフォルトの名無しさん :2009/01/26(月) 23:16:58
ダイアログベースアプリで、ウイザードが生成するコードで、 CXXXDlg::OnPaint() { if(IsIconic()) { 処理 って奴あるじゃん。 あのIsIconicのときの処理って走りますか? 何時走るの?? ちなみにモーダルやモードレスの子ダイアログの場合、最小化すると走るらしいけど、 メインウインドの場合は?
>>713 MSDNには最小化したら0以外が返るって書いてあるけど、
ダイアログ以外のウインドウだと動作が違うの?
そもそも最小化しているときにOnPaintが呼ばれるのか?ということだろ。俺も気になる。
てか、最近のVCのウィザードはif(IsIconic())なんてコードを吐くの?
int main(void) { int a=0, b=99; Exchange(a,b); printf("a=%d ,b=%d\n",a,b); } int Exchange(int t1, int t2){ int tmp = t2; t2 = t1; t1 = tmp; return t1,t2; } 上の文では戻り値が返されずa=0,b=90と言う結果が出てしまいます。 どんな時に戻り値が適用され、どんな場合に仮引数、実引数が使われるのかが分かりません。 もしかして2つの値は返されないのでしょうか? また、これは値渡しと言うものなのでしょうか? 混乱しています。よろしくお願いします。
>>715 そうそう、そんな感じ。
ウィザードがわざわざ生成するくらいだから何とかすれば通るような。
でもブレイクポイント設定して何をやってもブレイクしないし。
>>717 煽るわけじゃなくて、マジ疑問なんだけど、どういうのを
手本にして勉強してるの?
ネットのサイトとか?
二つの値を返したいときはこうだな。
void Exchange(int* t1, int* t2){
int tmp = *t2;
*t2 = *t1;
*t1 = tmp;
}
int main(void)
{
int a=0, b=99;
Exchange(&a,&b);
printf("a=%d ,b=%d\n",a,b);
}
>>718 Win3.1時代の名残りかな?
そのころは、最小化するとタスクバーじゃなくて、アイコン化されてたし。
>>720 最小化なのかアイコン化なのかもちょっと気になる。。
このIsIconic()〜のソースってSDIとかなら分かる気がする。
たとえば、親ウインドの中の子ウインドを最小化すると、親画面の左下に小さくなって並ぶじゃん。
あのときに、親ウインドにWM_PAINTが発生すれば、子供にも回ってきて、
子供は自分で自分がアイコンで占有している部分を更新リージョンからくり抜くんでしょ。たぶん。
でもメインウインドのダイアログのOnPaintでIf(IsIconic())って成立するのかな。。
__int32と int型ってまったく同一に見られるんですか? オーバーロードができないんですが。
>>721 その場合は、子ウィンドウからしたら、全領域が非クライアント領域のような気がするし、
第一、WS_CLIPCHILDRENを付ければ勝手にやってくれることのような気がする。
725 :
722 :2009/01/26(月) 23:56:48
すいません、リサーチ不足でした。 ありがとうございます。
>>723 ああ。。確かに。
いったいこのコードなんだろう。誰かご存知のかた、ご回答お待ちしてます。
>>719 いや、ポインタを使わずに返すには、こうしたらどうか?
……と、思って書いてみたんですけど…やっぱり無理ですよね。
サンクスです。
C++なら参照というものがあってだな……。
>>727 構造体を使えばできるけど、Cじゃあんまりやらないな。
struct pair {
int first, second;
};
struct pair swap(int a, int b)
{
struct pair c;
c.first = b;
c.second = a;
return c;
}
730 :
デフォルトの名無しさん :2009/01/27(火) 00:12:11
VC+++MFCってコントロール少なすぎじゃないですか? どう見ても、VC#でやったほうが楽なのに、なんでVC++のほうがメジャーなんですか?
そりゃ単純にいままでVC++でやってきた連中からしたら VC#なんか分からん事だらけだからじゃないの? なんでVC++で簡単にテキストファイル開けたのに C#でその方法をぐぐらなくっちゃいけないの? そこまでして移行してご利益がいっぱいあるの? MSは好都合かもしれないけど。そんなものみんないやなんです。
>>730 C#よりも10年近く先に登場した分、資産・ノウハウが貯まっているところが多い。
感覚的には、新規の案件はVCよりC#のほうが多いような気がしたけど、 求人サイトで、C++とC#で検索してみたら、まだC++のほうが多かったな。
C++と比較したの?それともVC++と比較したの? C++だけだと、LinuxとかUnixとか組み込みとかあるよ。
C#でもWeb系ってたまにないか?
>>735 aspで、イントラ作ろうって案件だと、C#かVBだしな。
737 :
デフォルトの名無しさん :2009/01/27(火) 00:37:49
>>732 その割には使えるコントロールが全くないじゃないですか?
しかも、Viewって一つしかないし・・・
>>737 コントロールは増えてないってだけでしょ。
MSはVC向けにはわざとそういう便利なライブラリを出さないんだろうね。
おらおらおらおらおらおらおらおらおらおら!!!!!!
さっさとドットネットにいきやがれこんちくしょーーーーーー!!
ってことですね。
おっとつい興奮していつの間にかCapsLockがONになってた
>>729 遅スレだけれどmain関数の中を
int main(void)
{
struct pair pair1;
pair1.first = 0;
pair1.second = 90;
swap(pair1.first,pair1.second);
printf("first=%d,second=%d\n",pair1.first,pair1.second);
return 0;
}
と、書いてみた。
駄目だった…。ちょっと思考錯誤してきます。
>>739 90年代はActiveXの時代だった。
どっちかというと、VBで使うのが主流だったと思うけど。
>>741 ここで言っているコントロールってActiveXのことなん?
もしそうならVCでも使えるんじゃね?
>>742 サンクスです。構造体に入れるのを忘れるとは…お恥かしい。
面倒な質問だったと思いますが最後まで有難う御座います。
これでひのきのぼうを装備してスライムが倒せそうです。
>>743 使えるけど、たしか標準ではメニューに入っていないでしょ。
基本的にはWindows標準のものだけ扱うからね。 でも2008SP1でごっそり増えたじゃない、C#にもまだないようなのが。 まあこれらもWindowsに標準で組み込まれる予定だけど。
747 :
デフォルトの名無しさん :2009/01/27(火) 18:29:11
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {/*ウインドウクラス構造体の設定*/ HWND hDlgWnd; //ダイアログボックスを表示します hDlgWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgWndProc); ShowWindow(hDlgWnd, SW_SHOW); UpdateWindow(hDlgWnd); //戻り値を返す return 0; } このようにモードレスダイアログを表示する関数を宣言しているのですが、一瞬表示されてすぐに消えてしまいます。 どこがおかしいのでしょうか? ここの記述がおかしいのかはわかりませんが、ご検討をお願いします。
>>747 モードレスダイアログは普通のウィンドウのようにメッセージループが必要。
UpdateWindow呼んだあとreturnしちゃってるからな。
750 :
デフォルトの名無しさん :2009/01/27(火) 19:46:16
747です。返信遅れてすみません。 では、WinMainの中に記述してはいけないということでしょうか? 今からいろいろやってみますが、かなりの初心者なので少しヒントを下さい。 お願いします!
>>750 メッセージループっていってんだから
メッセージループでググレよウンコ
752 :
デフォルトの名無しさん :2009/01/27(火) 20:15:28
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { WNDCLASSEX wcex; //ウィンドウクラス構造体 HWND hDlgWnd; MSG msg; ghInst = hInstance; /*ウィンドウクラス構造体を設定*/ //ダイアログボックスを表示します hDlgWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgWndProc); ShowWindow(hDlgWnd, SW_SHOW); UpdateWindow(hDlgWnd); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; //戻り値を返す } という風に書き直したらできました。しかし、このソースおかしいぞと思われたらレスください。 748,749,751さんどうもありがとうございました。
なんでageてんの?
VC#みたいな補完機能はないのでしょうか? 毎回Ctrl+Spaceするのはめんどくさいですしセミコロン打っても自動で文字間隔とかを調整してくれませんし不便で仕方ないです 補完でこのスレを抽出するとないと言われていますがそんな馬鹿なことはないですよね?
ない
756 :
デフォルトの名無しさん :2009/01/28(水) 00:07:12
VC++にはWPFがないのはなぜ? もしかして、見放された?
お前はC++を何だと思ってるんだ アーキテクチャ考えれば無いのは当たり前
>>755 そうですか・・・ありがとうございました
つまり.NETに移行するって事は標準の言語ではなく マイクロソフトのツールを使わせる戦略なの。 マイクロソフトにとってオープンソースや標準というものは金儲けの邪魔なのだ。 もちろん自分が好き勝手に決められる標準なら大好きだ。
>>756 なんかのインタビューでC++はそういう用途のものじゃないから、って言っていた気がするが
見つけらんなかった。すまん。
>>759 マイクロソフトの戦略というのは確かだが、
何でもかんでも決め付けるはどうかと
>>739 MFCフューチャーパックなるものがリリースされて、
コントロールが10年ぶりくらいに刷新されたと聞いたけど、
あれ、どうなんだろう?
VS2003使いだから、導入したくても導入できない
VC++2005Standard Editionにはmicrosoft platform SDKは同梱されていますか?
>VC++2005Standard Editionにはmicrosoft platform SDKは同梱されていますか?
>>766 ExpressじゃなくてStandardの話をしている
>>766 すごい赤っ恥だな 俺だったら軽く鬱になる
>>766 みたいにオッチョコチョイの癖にカッコつけて言葉が少ない奴って
しょーもねー勘違いで、一人で変な方向に突っ走ってプロジェクトの火種くすぶらせるんだろーな。
江戸っ子なんだろうw
773 :
デフォルトの名無しさん :2009/01/29(木) 11:37:35
アプリケーション開始とともにモードレスダイアログを2つ起動させたいのですが、どのような記述をすればいいのかがわかりません。 インスタンスハンドルが2つ必要なのでしょうか? さっぱり分からないのでお願いします
1個はできてるの? ためしに、単にCreateDialogを2回呼んでみては。
775 :
デフォルトの名無しさん :2009/01/29(木) 12:07:05
1個は表示されてます。 hDlgWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgWndProc); hDlg = hDlgWnd; ShowWindow(hDlgWnd, SW_SHOW); UpdateWindow(hDlgWnd); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } ghInst = (HINSTANCE)GetWindowLong( hDlg , GWL_HINSTANCE ) ; //ghInst = GetModuleHandle(NULL) ; hDlgWnd2 = CreateDialog(ghInst, MAKEINTRESOURCE(IDD_DIALOG2),hDlg,(DLGPROC)DlgWndProc); hDlg2 = hDlgWnd2; ShowWindow(hDlgWnd2, SW_SHOW); UpdateWindow(hDlgWnd2); while (GetMessage(&msg2, NULL, 0, 0) > 0) { TranslateMessage(&msg2); DispatchMessage(&msg2); } return (int)msg.wParam; } このように記述しています
何でメッセージループが複数あるのさ。 同時ならループの前で2回作れ
メッセージループの何たるかを知らずにコピペでプログラムを作る人間か…
hDlgWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgWndProc); hDlg = hDlgWnd; ShowWindow(hDlgWnd, SW_SHOW); UpdateWindow(hDlgWnd); ghInst = (HINSTANCE)GetWindowLong( hDlg , GWL_HINSTANCE ) ; hDlgWnd2 = CreateDialog(ghInst, MAKEINTRESOURCE(IDD_DIALOG2),hDlg,(DLGPROC)DlgWndProc); hDlg2 = hDlgWnd2; ShowWindow(hDlgWnd2, SW_SHOW); UpdateWindow(hDlgWnd2); while (GetMessage(&msg, NULL, 0, 0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; //戻り値を返す //return 0; } このように記述したらダイアログ2つともでました! ですが、2つめのダイアログの表示が1つめのレイアウトとかぶってしまいました。色とか線が2つめのダイアログにも影響を与えています。
779 :
デフォルトの名無しさん :2009/01/29(木) 15:50:33
Webブラウザコントーロールのバージョンはいくつになるんですか? 自分のマシンにIE7が入っていればIEコンポーネントを埋め込んだアプリを起動したときIE7として起動するんですか?
780 :
778 :2009/01/29(木) 16:00:51
解決しました。お答えくださったかたがたありがとうございました。
どうでもいいけど、GetMessageが0以外の値として-2以下を返すときってないの?
それより 警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。 while (GetMessage(lpMsg, hWnd, 0, 0)) ... と書いてるくせにVisual C++の自動作成されたやつはしっかりそうなっているという矛盾
long long型の数値を入力するときは、 VC++ではfgets→atollができないので、 scanfを使うしかないのでしょうか?
long long atoll(char *str){ long long result = 0; int negative=0; while (*str == ' ' || *str == '\t') str++; if (*str == '+') str++; else if (*str == '-') { negative = 1; str++; } while (*str >= '0' && *str <= '9') { result = (result*10) - (*str++ - '0'); } return negative ? result : -result; }
>>784 ありがとうございます。
ぐへへへへ、これであんなことやこんなことができる。
_atoi64
>>785 何だか分からんが
とりあえず通報しておいた
なぜか負になる不思議!
すまん、ホリデーってなん曜日だったっけ?
給料日だよ
俺は毎日がホリデイ
792 :
デフォルトの名無しさん :2009/01/31(土) 04:49:26
CreateWindow()でNULLが返るのですが、どうやってデバッグすればよいですか? (どの変数がおかしいのか、とか、、)
793 :
デフォルトの名無しさん :2009/01/31(土) 04:54:41
テンパってます。助けてぇ〜
CreateWindowにブレークポイント設定してそこまでの変数が 期待通りの値になっているか確認したら うまいやり方は玄人が来るまで待て
795 :
デフォルトの名無しさん :2009/01/31(土) 05:10:14
794 ありがと。それはやってるけど、何が正常なのかよくわからないです。 理由を
CreateWindowから前の命令についてMSDN引きながら どういう値が戻るのか、渡すのが正しいのか確認しなよ それも出来ないならエスパーが来るまで2時間程寝たら? 今のテンパってる状態では何かやってもうまくいかないさ
797 :
デフォルトの名無しさん :2009/01/31(土) 05:35:25
<例>cin >> a >> b >> c; scanfを使って一行で表すにはどうしたらいいですか?
まずGetLastError()をだな
じゃ、俺も GetLastError()
プロジェクトをテンプレートから作成するとき 空のプロジェクトとWin32コンソールアプリケーションとでは どこがどのように異なるのでしょうか。 VC++は2008 Expressです。
質問です。 初心者でもひろってくれる会社はないですか?
>>801 Win32コンソールアプリケーションだとmain関数入りのソースファイルが初めから追加済み。
空のプロジェクトは本当に空っぽ。
自分でプロジェクト作って見ればいいだけだろ お前のVC++は2008 Expressは飾りか?
805 :
デフォルトの名無しさん :2009/02/01(日) 13:39:52
すいません、昨日の明け方カキコしたものです。ちょっと前まで寝てました。 なんでCreateWindow()でNULLが返るのか分かりました。WinProc()のWM_CREATEの中で 変なことやってました。早く寝るべきだったス。 ありがとうございました。
806 :
デフォルトの名無しさん :2009/02/01(日) 13:46:36
807 :
デフォルトの名無しさん :2009/02/01(日) 13:47:54
>>797 int a, b, c;
scanf("%d%d%d", &a, &b, &c);
>>802 求人サイトで、未経験者可の会社さがせ。
けどそういう会社ってブラックな所多いよね。
地元で自宅通勤できるならデジドカでもおkだけど、 県外に出てまでデジドカにはなりたくないな。 ところで情報工学科に受かったが、入学前の間このままVCで遊んでいればおk?
何もしなくても問題ないと思うけどね TOEICとか英語の資格取る勉強とかすれば?って気がする
スレチなのに回答Thanks! 確かに、何も知らない人にも最初から教えてくれるはずだからな。
813 :
デフォルトの名無しさん :2009/02/01(日) 22:44:30
>>810 私立の情報工学科なんて専門学校と同じだろ?
国立だとどうなの?
815 :
デフォルトの名無しさん :2009/02/01(日) 22:55:19
国立でも旧帝以外なら屑
ダイアログコントロールのプロパティ[Visible]をfalseって裏では何を設定してるんですか?
英語と苦手だったら数学の復習でもしてれば? 後は仕様書きちんと書いてからソフトを作ってみると良い経験になるかな
818 :
デフォルトの名無しさん :2009/02/04(水) 01:03:58
いままで、動いていたプログラムが サービスパック入れたとたん120個エラー。 しかも触ったことも無いヘッダファイルから・・・ ・・・・orz こういうことって良くあるんでつか?
819 :
デフォルトの名無しさん :2009/02/04(水) 01:34:26
VC+++MFCって画面の作り方がさっぱりわかりません ダイアログベースにするとしょぼいコントロールが数個あるだけで・・・ ドキュメントビューにすると、全く画面が作れないし・・・ どうやってつくるのか、いいHPあったら教えてください
質問させてください。 数値のデータが列挙された Excelデータがあります。内容は、IDと、00 や、 02など 見た目では分かりにくいデータです。 Windows SDKを使用して、Excelの値の意味を画面表示することが目的のプログラムを 作成しようと調査しています。 そこで、Accessのデータベースと、Excelのパラメータを比較して画面出力する処理を 考えていますが、そもそもWindows SDKを使って、mdbと接続できるのでしょうか?
Windows SDKとは関係ありません。 バイナリファイルに自分でアクセスする処理を作って下さい。
生APIの海の世界へようこそ 君が今まで居た場所は池にすぎない
いや、mdbと接続っていうならバイナリアクセスじゃなくて com使ってexcelやaccessと接続するんじゃないの office オートメーション あたりでのキーワードでググってみたら?
自分はADO使うんだと思った。
VC++ならDAOでも ADOとDAOは用途似てる上に略式名がふざけすぎていると思うw
>>819 ダイアログアプリにして
ぺたぺたコントロールを貼り付けていく
確かにDialogベースアプリはしょぼい概観。 SDIとかMDIはめんどくさいしほとんど使う価値無し。 最近のアプリ(ウイルスソフトとか)って概観がWebページみたいな感じじゃないですか? ああいうのってどうやって作るんだろ。 以前DirectXを使ってボタンを描画するライブラリとか見たことあるけど。
スキン 貼り絵
Diableベースアプリに見えた
VS2008でMFCアプリ作ってみたら、すごいことになってたな。
SP1のスケルトンだなw
833 :
デフォルトの名無しさん :2009/02/06(金) 00:08:05
>>831 確かに!
.NET不要じゃね?て思っちまった
クラスをまたがる処理がゴミゴミしてきたのでグローバル変数にしようと思うんですが、 なるべくコードの量を減らしたいので、今、すべての.cppでincludeしてあるstdafx.hを使ってなんとかしたいです。 まずCMainFrameをグローバル変数にしたいのですが、 // stdafx.h extern CMainFrame* g_pMainFrame; // MainFrame.cpp #include "stdafx.h" CMainFrame* g_pMainFrame; CMainFrame() { g_pMainFrame = this; } MainFrame.cpp内でグローバル変数を宣言しているのにexternするのは変化もしれませんが、 すべてのファイルで共有するのでこれでエラーが出ないようにしたいんです。 どうすればいいでしょうか?
プリコンパイルヘッダー使ってるならstdafx.h使うのは無理じゃない? あまりそれ使うのはお勧めしないが、 MainFrame.cppだけプリコンパイルヘッダーはずしてstdafx.hインクルード前に#define入れて #ifdefでextern宣言飛ばすようにするとか。
>>834 #define CxxxApp::GetMainWnd() g_pMainFrame
CMainFrame* CxxxApp::GetMainWnd()
{
return DYNAMINC_DOWNCAST( CMainFrame, m_pMainWnd);
}
DYNAMINC_DOWNCAST → DYNAMIC_DOWNCAST class CxxxApp { public: CMainFrame* GetMainWnd(); }
いかん。 #define CxxxApp::GetMainWnd() g_pMainFrame → #define theApp.GetMainWnd() g_pMainFrame
MFC使ってるのに少しぐらいコードの量減らしたってほとんど意味ない
>まずCMainFrameをグローバル変数にしたいのですが、 ってあるからそれ以外にもあるのだろうね、大量にw
そうなんです、大量にあるんです。 コードの量を減らすのは見やすいようにするためなんですが、なるべく同じ関数は2度と呼び出さなくてもいいように 確保しておきたいんです。ループの中とかでも頻繁にクラス間のメンバ参照を使うので馬鹿にできないんです。 全ファイルにインクルードするのが面倒というか、増えていくファイルで自動で追加されるstdafx.hにglobal.hをインクルードしておくだけにしたいんです。 で1行は必ず自分のポインタを格納したグローバル変数をもう一度externするのをさけたいんです。 #defineで既にexternされている場合か、宣言が既にある場合はその行だけ飛ばすにはどうかけばいいんでしょうか?
CMainFrameはたとえが悪かったな。AfxGetMainWndとかあるしな。 global.cpp をつくり変数はそこで定義すればいいじゃない。 よくやる手段としては、ヘッダファイルで #ifdef EXTERN #define EXTERN extern #endif とかやっといて、cpp1つだけインクルードの前に#define EXTERNとかやる。 stdafx.hを使うのであればmそのcppはプリコンパイルヘッダーを使わない設定にしないとならない。
#ifdef EXTERN じゃなくて#ifndef EXTERN だった
グローバルはCWinApp派生クラスに一任だぜ WindApp派生クラスのヘッダファイルにextern theAppがあるだろ?
もしかしてexternって、書いたファイルでその宣言を使える用にするんじゃなくて externが書いてあるファイルをインクルードしておけば、どのファイルからでも使えるようになるんですか?
まずインクルードのこと、翻訳単位について勉強だな
すまん、本をもう一度読んでからレスを読み返してみるよ みんなありがとう
わかりました。グローバルファイルを別に作る必要すらなかったです。 externの意味を間違えていたのが原因でしたすいません! // .hのクラスの外(グローバル領域) extern CMainFrame* g_pMainFrame; // .hのクラスの中 CMainFrame* g_pMainFrame; // .cppのCMainFrameのコンストラクタ g_pMainFrame = this;
やばい振り出しに戻った
そもそもグローバル変数にしなきゃならんような設計が間違い
中途半端にコードだすから・・・ 何度こういうケースを見たことか。
VC++ 6.0 使ってます。 スレッドを生成するのに、JavaのThreadクラスのようなものは無いのでしょうか?
854 :
デフォルトの名無しさん :2009/02/06(金) 21:52:58
CThread
MFCごときで作るアプリなんざ、グローバル変数使ったって全然もんだいない。 じゃんじゃん使え。CWinAppの派生クラスに押し込めるとか、そんな糞めんどくさいことするな。 あとアクセス関数とか全然必要ないよ。 全部変数はパブリック。楽で良いぞ。
856 :
853 :2009/02/06(金) 23:19:37
_beginthreadexつかえ。
物凄く初歩的かつ大雑把な質問なのですが、 システムの処理上sqrtやcos,sinをかなり使っていて、 これらの処理が重いということは知っていたのですが、 「最近のPCだと、もちろん重いことには重いがそれほど四則計算と変わりない」と聞きました 実際のところはどうなのですか?
859 :
デフォルトの名無しさん :2009/02/06(金) 23:54:55
最近のマシンで動作する3Dゲームを見れば分かる。 アレだけたくさんのポリゴンを計算し、それらの表面の光沢を表現し その膨大な演算を一瞬にしてこなしているだろ? だから早いんだよ
確かにそうですね。 最近は2次元の計算作業なんて多少無理しても大丈夫なレベルになってるんですね。 ありがとうございます。
>>860 自分のための処理であるのなら実際に自分が使用する環境で実測してみることをお勧めする
処理速度や計算機リソースをどの程度消費するかなどは結局のところ実際に計ってみないと議論できない面がある
実際に行いたい処理から規模をスケールダウンして実測してみてそこから外挿してそれが無理な処理か大丈夫なレベルか判断
862 :
デフォルトの名無しさん :2009/02/07(土) 00:17:32
計算機なんて20年ぶりに聞いたw
FORTRAN屋みたいな奴がいるなw
VC2008で操作ミスってソースウィンドウのタブやスペースが ”→”、”・”と表示されるようになったんですが、 元に戻すにはどうしたらいいんでしょうか?
865 :
デフォルトの名無しさん :2009/02/08(日) 00:24:55
メニューバー→編集→詳細→スペースの表示
ageスマン
>865 直りました。 ありがとうございます。
868 :
デフォルトの名無しさん :2009/02/08(日) 20:03:10
VC++9を使いはじめたものです。 タブを押すと押しただけどんどんタブが追加されていくんですが、 これをタブをインデントをそろえるために使えませんでしょうか? キーボードをEmacsタイプにするのは、ほかのキーバインドもEmacs風になってしまうので、 やめたいです。 よろしくお願いします
逆に考えるんだ。 「VSのやり方に合わせよう」と考えるんだ。 みんなそうしているよ。
そこだけ設定抜きだして入れりゃいいじゃんか
871 :
デフォルトの名無しさん :2009/02/08(日) 20:36:23
これをタブをインデントを
>>871 ユーザー設定のコマンドに全部設定あるだろ。
EMACSでやってる欲しい設定だけ拾ってキーに設定するんだよ
タブデント!
875 :
デフォルトの名無しさん :2009/02/09(月) 00:08:29
初心者です。 VC6.0のFormViewで色々実装しています。 ドキュメントクラスのSerialize関数がメニューの[開く][上書き保存][保存] からしか呼び出されません。 上記のものを消してしまい、後で追加したいのですが何も考えずに追加すると Serialize関数が呼び出されません。一見[開く]などとたの項目とでは特に 違いがなさそうなのですがSerialize関数を呼び出すにはどうすればよいのでしょうか。
追加したコマンドIDは消す前と同じかえ?
別に新規で作って見てみたら? それでわからなかったら、Serializeにブレークポイント置いておいて 止まったら呼び出し履歴見てみれば。
VC++6.0のダイアログベースで作成しているのですが 元のダイアログをAとし、別のダイアログBを作成し、AからBにDoModalを行った後、 Bのダイアログのリストビューのアイテムをダブルクリックした時に、 Aのダイアログにもどり、Aにあるスタティックテキストをそのダブルクリックされたアイテムの 名前に変更したいのですが非常に苦戦しております、、 自分が考えていたのはアイテムがダブルクリックされたときに、 アイテムをグローバル変数に突っ込んで CDialog::OnOK();を実行し 元のダイアログに戻った時にデータを突っ込んでUpdateDataをかけようと思っていたのですが、 CDialog::OnOK();で元のダイアログが閉じられたあとにどこに行っているのかがさっぱりで 処理を突っ込めませんでした。 CDialog::OnOK();の後どこにいくのか、また他になにか良い方法はないか よろしくおねがいします。
OnOK後はDoModalから返ってくるだろ。 Bのパブリックメンバーにしておいて、DoModalがOK返してきたら AからBのそのメンバー見ればいいじゃんかよ。
>>879 あー、言われて見直して10分悩んで見直したら出来ました。
全然頭が回ってないですね自分。
ありがとうございました。助かりました。
881 :
デフォルトの名無しさん :2009/02/13(金) 01:53:54
windowsでC++の勉強を始めたのですが、Std::coutに出力してもどこにも 出力が出ません。どうすれば表示されますか?
コンソールアプリケーションのプロジェクトを選べ
883 :
デフォルトの名無しさん :2009/02/13(金) 02:42:29
ありがとうございます。 windowsアプリケーションを選ぶときは、どうすればいいですか?
windowsアプリケーションを選べばいんじゃね?
885 :
デフォルトの名無しさん :2009/02/13(金) 05:44:00
MessageBox()を使えばいいよ。
>>878 です。
先程のプログラムでAからBにDoModalしたのちに、BのDoDataExchangeの最後に、
thread_param param;
param.instance = this;
param.pParam = 0;
m_Thread = AfxBeginThread(thread_entry,¶m,THREAD_PRIORITY_NORMAL);
と実行してスレッドを作成しようとするとエラーが出てプログラムが強制終了してしまいます。
ボタンにして画面が出た後に実行すると出来るのですが、画面に入った後に自動的に実行したいのですが、
どのようしたらよいでしょうか?
>>886 スレッドにローカル変数のアドレス渡してるのがマズい。
作成されたスレッド側がparamを参照しようとした時に
スレッドを作成した側が既にスコープを抜けてparamが破棄されてる可能性がある。
>>887 できました!
的確なご指摘ありがとうございました!
vc2008 で Intellisense の自動更新を無効にする方法知りませんか?
Visual C++ 2008 Express Edition Windoes XP Pro SP3 C++/CLI使用 親ウィンドウで画像ファイルを指定すると、MDIの子ウィンドウで画像を読み込んで表示し、親ウィンドウのズームイン/ズームアウトボタン(またはメニュー)でアクティブな子ウィンドウの画像をウィンドウごと大きくしたり小さくしたりするプログラムを作りました。 子ウィンドウの作成・イメージ読み込み・ズーム処理などを行うクラスと、そのウィンドウをコレクションで複数保持するクラスを作り、クラスライブラリとして作成し、それを親ウィンドウのFormから呼び出す形でプログラミングしました。 複数の画像読み込み、複数の子ウィンドウ表示、ズームイン/ズームアウトなどの処理は正常に動作しています。 この親ウィンドウのメニューに、表示されている複数の子ウィンドウのリストが表示される(一般的なウィンドウメニュー)を追加しました。 方法は簡単で、menuStrip1のMdiWindowListItemプロパティにウィンドウメニューのオブジェクトを代入するだけです(開発環境のプロパティウィンドウから設定しました)。 これも正常に動作して、コードを追加しなくてもウィンドウメニューに画像ファイルを読み込んだ複数の子ウィンドウのタイトルが、メニューに表示されました。 次に続く・・・
891 :
890 :2009/02/14(土) 14:56:43
ここからが問題です。 子ウィンドウのウィンドウタイトルには、画像のファイル名とズーム倍率が表示されるように作りました。 例: 1つ目の子ウィンドウ「img1001.jpg / 100%」 2つ目の子ウィンドウ「img1002.jpg / 100%」 親ウィンドウのズームイン/ズームアウトボタンを押すと、画像の大きさが変わると同時に、タイトルの倍率の数値も変わります。 例: 1つ目の子ウィンドウをズームインした場合 「img1001.jpg / 120%」 ところが、この状態で親ウィンドウのウィンドウメニューをドロップダウンさせると、ズームインさせる前の状態で表示されてしまいます。 ウィンドウ(W) 1 img1001.jpg / 100% 2 img1002.jpg / 100% つまり、子ウィンドウのタイトルを変更させても、ウィンドウメニューには反映されません。 しかし、アクティブウィンドウを変えると(別の子ウィンドウをクリックして全面に出すと)反映されます。 例:2つ目の子ウィンドウをクリックした後 ウィンドウ(W) 1 img1001.jpg / 120% 1 img1002.jpg / 100% やりたいこと: ズームイン/ズームアウトボタンを押した直後にウィンドウメニューを表示させても、そのウィンドウのタイトルの変更をすぐに反映させたい。 どなたかご教授お願いします。
開発環境 Microsoft Visual Stdio2008 c++ Windowsフォームアプリケーション textBox1,textBox2,button1を設置して button1を押すとBox1のひらがなはローマ字に、ローマ字はひらがなに変換して Box2に入れるようにしたいのですが、ひらがなからローマ字への変換ができません。 自分なりに考えたプログラムを張るのでアドバイスや、 もっと効率のいい方法がありましたら教えていただけると幸いです。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { String^str1 = textBox1->Text; String^str2; int len,i; len = textBox1->Text->Length; for(i=0;len>i;i++){ if(str1[i]=='a'){ str2=str2+"あ"; } else if(str1[i]=='i'){ str2=str2+"い"; } else if(str1[i]=='u'){ str2=str2+"う"; ////////////////////略///////////////////// } textBox2->Text = str2; }
あいうえお以外には使えない
>>893 分かりにくくてすいません////略////の部分で上記以外のローマ字からひらがなへの
変換(la li lu kya kyu kyoなど)は終わっています
数字や漢字は変換せずに追加されるようになています
子音が重なったら、「っ」変換する処理とかは入ってるのだろうか。
そういう処理はIMEにまかせて、結果だけ奪え。
>>895 はい、「yotto」→「よっと」などですよね?
「ん」も母音か子音かの前かで「nn」と「n」で使い分けているので大丈夫です。
if(str1[i]=='あ')ではif文の中の処理に入れないのでひらがなからローマ字への変換ができないんです、
どうしたらどんなひらがなかによって判断できるようになりますか?
シナ製のIMEは、wを連打するとwwwwwになるはず。 偉大なる祖国のFEPだと、っっっっっっwってなる。
>>897 str1[i] == L'あ'でできると思う。
>>899 なるほど!!おかげさまで無事できました、ありがとうございます。
901 :
デフォルトの名無しさん :2009/02/15(日) 09:21:53
Source Filesの下に、Main.cppというソースがあって、そこから Source Filesの隣にあるResource Filesというフォルダの下のHoge.txtファイルを オープンしたいのですが、 FileOpenFunc(_T("..\\Resource Files\\Hoge.txt")); と書いてもファイルが見つかりません。どう書けばよいですか?
実行時のフォルダからのパスを書かなきゃだめだから
カレントディレクトリからのパスじゃねぇっけ? たしかファイルダイアログを呼び出すたびにホイホイかわってすっげーぷっつんくる仕様だった希ガス アクセスするときには必ずフルパス直してアクセスしないとつながんねーとかアリガチ?
まあ、そういう作りだったらexeのパスを取得してフルパスにした方が確実だな
GetModuleFileとかそんな感じの、実行ファイル名をフルパスでゲット出来る関数があったはずだから、 それとShlwApiとかそれっぽい名前の関数群を使えばいいかもしれない気がしないでもない。
906 :
デフォルトの名無しさん :2009/02/15(日) 19:58:59
RegisterClassってなにをやってるんですか? CreateWindowとRegisterClassって1個にまとめちゃえばいいような気がする。
>>906 なんかはじめのメインウィンドウ作るときぐらいしか使わない記憶あるけど
俺のきのせい?
RegisterClassは、Windowsに、「こういうスタイルを登録するよ。名前はUSERね」ってやってるだけ。 次に、CreateWindowで、「こういうウインドウ作ります。スタイルはUSERです」ってWindowsに通知する。 CreateWindowで、STATIC とか、EDIT って指定するだろ?アレは、そういうスタイルがWindowsが持ってるわけだ。 RegisterClassで指定してるのは、これから使う、ユーザ独自のスタイル。 んなもんWindowsのしったこっちゃないから、あらかじめ登録しちゃうわけ。 CreateWindowで、RegisterClassで登録した名前を指定するのはそういうわけ。登録して、使う。
ようするに1つのクラスをテンプレートにして、いくつものウィンドウを作れる。 だから別々に分かれている。
RegisterClassはウィンドウの動作に関する事を指定する CreateWindowはウィンドウの見た目に関する事を指定する
911 :
初心者 :2009/02/16(月) 02:23:14
「botton1をクリックしたとき、〜する」っていうような、コードを教えてください。 ほんとに、初心者ですみません。
ボタンを貼り付ける。 そんで、そのボタンをダブルクリックする。 生成されたコードの中に処理を書く
913 :
初心者 :2009/02/16(月) 02:50:39
コードをkwskお願いします
915 :
初心者 :2009/02/16(月) 03:07:57
すみません、説明不足でした。 if型で、「botton1をクリックしたときに、〜する」というコードです。 ほんとに、すみません
とりあえずボタンをダブルクリックするまでやってみなよ
917 :
初心者 :2009/02/16(月) 03:14:22
botton1と、botton2があり、それを選んでbotton3を押すと、 それぞれ動き方が違うというプログラムを作りたいです。
ん?IF型ってなぁに? まずダイアログベースアプリなのか、SDIアプリケーションなのか、Win32アプリケーションなのか、 それ以外なのかちゃんと書こうぜ。
ボタンを選択するってことはラジオボタン? もしかしてこんなかんじかな? IDC_RADIO1、2はラジオボタンで、スタイルがプッシュボタン型。 で、通常のボタン(ボタン3)を押した場合の処理が以下。(名前はOnBnClickedButton1だけどな) void CzzzDlg::OnBnClickedButton1() { // TODO : ここにコントロール通知ハンドラ コードを追加します。 if( ((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck() == TRUE ) { MessageBox("Radio1"); } else if( ((CButton *)GetDlgItem(IDC_RADIO2))->GetCheck() == TRUE ) { MessageBox("Radio2"); } }
あ、間違えた^^; == TRUEではなくて、== BST_CHECKED だな。
921 :
初心者 :2009/02/16(月) 06:50:13
説明不足が多く、すみませんでした。
>>919 ありがとうございました!!
922 :
デフォルトの名無しさん :2009/02/16(月) 10:01:49
textBox1 の「1」の部分に変数を使いたいのですが 方法が分かりません ><
フォーム?MFC?
924 :
デフォルトの名無しさん :2009/02/16(月) 10:32:33
フォームです
925 :
デフォルトの名無しさん :2009/02/16(月) 11:07:02
>>908-910 すげぇ、、、
説明がすぅっと頭に入ってきました。
Win32の達人の方ですね。
array<System::Windows::Forms::TextBox^>^ textBox; でメンバー持っておいて、 this->textBox = gcnew array<System::Windows::Forms::TextBox^>(2); してから this->textBox[0] = textBox1; this->textBox[1] = textBox2; するとか。
>>926 うーむ。なるほど
ここに、変数を使うのは、あまり一般的ではないですか?
928 :
デフォルトの名無しさん :2009/02/16(月) 11:25:13
Visual C++ 6.0 Windoes XP Pro SP3 を使用しています。 グローバルに構造体を作って、クラス内でexturnをしようすると、 exturnのところでエラーが出て怒られてしまいます。 グローバルでの定義部分ではエラーは出てないものの、ちゃんと出来ているかも正直怪しいかもしれません。 何か良い方法は無いでしょうか?
Visual C++ 6.0 Windoes XP Pro SP3 を使用しています。 グローバルに構造体を作って、クラス内でexturnをしようすると、 exturnのところでエラーが出て怒られてしまいます。 グローバルでの定義部分ではエラーは出てないものの、ちゃんと出来ているかも正直怪しいかもしれません。 何か良い方法は無いでしょうか?
すいません、二重書き込みしてしまいました…
しかもexternだろw 言いたいことがよくわからん。 どんなコードなんだ?
>>932 すいません、externでした。
グローバルに
struct st{
char id[ID_SIZE];
char name[NAME_SIZE];
struct st *next;
};
と定義して、それをクラスAやクラスBで
extern struct st{
char id[ID_SIZE];
char name[NAME_SIZE];
struct st *next;
};
とすると、まず「空白の宣言が見つかりました。」というエラーが出て止まってしまいます。
拙い説明で申し訳ないです。
まだわかんねー。 何がやりたいんだ。 構造体の定義と、変数の宣言とその変数のextern宣言が必要だが、そもそも変数(実体)がない。
935 :
デフォルトの名無しさん :2009/02/16(月) 18:29:52
#include "st.h" でいいんじゃないの?何がしたいのかまったくもってわからない。
ageスマソ
externでぐぐるぐらいしてから来たらいかがですかね 定義、宣言、参照について全く理解していない気がします。
グローバルに構造体の型を宣言しています。
さらに、実体もグローバルに定義しています。
実体に値が入っていて、
その値をスレッド内でグローバルで定義した実体を通して
参照したいです。
グローバル変数を使う知識として、
externを付けることは知っているのですが、
そもそも、スレッド内からグローバルに定義した
構造体にアクセスできるかどうかわかりません。
何か方法がありましたら、教えてください。
>>935 やってみたのですが、そのようなヘッダはありませんと怒られてしまいました。
あと、拙い説明にもかかわらず
ご返事いただきありがとうございます。
>>937 結構ぐぐったのですが私の理解力が足らず申し訳ございません・・・
940 :
935 :2009/02/16(月) 19:15:48
// FILE : st.h struct st { ... }; extern st g_st; // FILE : st.cpp #incluede "st.h" st g_st; // FILE : a.h #include "st.h" class A { ... }; ってことね。とりあえず何を参考に勉強してるのかしりたい。
941 :
デフォルトの名無しさん :2009/02/16(月) 20:08:02
すいません、聞きたいのですが。。。 Windowsファームアプリケーションを作成したのですが、ほかのPCで動作しません。 「このアプリケーションの構成が正しく・・・」と表示されます。 リリースコンパイルもしましたが動きません。 「プロパティ」の「C++」の「コード生成」の「ランタイムライブラリ」を「マルチスレッド」にすると、コンパイルすることができません。 いったいどうすれば動くのでしょうか? ほかのPCに、ランタイムを入れない方法を探しています。 お願いします。
>>941 ×ファーム
○フォーム
純粋なWin32アプリや標準ライブラリだけを使うコンソールアプリなら
ライブラリを静的にリンクすればよいと思うけど、
Windowsフォームアプリケーションでランライムに依存しないのは無理じゃないの?
> Windowsファームアプリケーション C++/CLIだったりして・・・。そのPC、.netframework入れてないとかw
>>941 >ランタイムを入れない方法を探しています。
無理
フォームアプリはランタイム(.NET Framwork)必須
いろいろ試した結果、パスに日本語が入ってると読み込めないようです どうすれば読み込めるようになりますか? char fname[] = "C:\\テスト\\test.txt"; ifstream fin; fin.open(fname); char c; while (fin.get(c)) { printf("%c", c); } fin.close(); if (getch()) return 0;
locale設定した?
setlocale(LC_ALL, "japanese"); ifstream fin; こうすれば読み込めるようになりました、ありがとうございます
先物の夕場は証券自己とかの約定させる気のない発注・取り消しに個人が振り回されて 値がついてる感じだな
949 :
デフォルトの名無しさん :2009/02/18(水) 00:28:05
VC++とVB&C#の違いは大まかに言うと オブジェクト->プロパティ オブジェクト.プロパティ という理解でいいんでしょうか?
出直して来い
すごい理解
953 :
デフォルトの名無しさん :2009/02/18(水) 17:59:43
VC++ 2005ExpressEditionでWin32アプリ作ってます。 int WINAPI WinMain( HINSTANCE hi, HINSTANCE hip, LPSTR sc, int ic ) { MSG Msg; char *str; memset( &Msg, 0, sizeof( MSG ) ); return ( int )Msg.wParam; } strが0xcccccccc<不適切なPtr>となるのはなぜですか。 C++ならstring使えっていう事なんですか?
何が疑問なのかわからん。 そのstrは単に初期化してないポインタだからそのままじゃ使えないだろう。
strが初期化されていないから不定値。 デバッグ時に0xccで埋められてるだけ。 実際にアプリケーションを動かすと、不定値。 char *str = NULL; とかで初期化する。
956 :
デフォルトの名無しさん :2009/02/18(水) 18:10:20
なるほど。 newしてあげれば不適切Ptrではなくなるんですね。 ありがとうございます。 あのぉ。。。もひとつ疑問がでちゃったんですが、いいですか? newして例外出てんのに期待通りの動作してるのはなぜですか これが解決できたら1年ぐらいROMしときます。
例外の内容によるでしょう。 具体的にコード出してこういう例外が出たと書いてくれないとわからんよ。
>>956 >newしてあげれば不適切Ptrではなくなるんですね。
なんもわかってねぇじゃん
まず、入門書と紙と鉛筆用意して全文書き取りからはじめたほうがいいぞ
959 :
デフォルトの名無しさん :2009/02/18(水) 19:22:49
すいません。3日かかってどうしても直らないエラーがあるので教えて下さい。 ビルドすると、 fatal error C1083: include ファイルを開けません。'afxwin.h': No such file or directory e:\visual studio 2005\projects\キャプチャ\irsystem\stdafx.h 43 というエラーが出ます。 環境は Visual Studio 2005 Professional Edition sp1 OS:Vistaです。 Visual Stadio Professionalかつフルインストールしているので、 MFCが入っているはずなのですがどうしても動きません。 どなたかわかる方いらっしゃいますでしょうか。 わかる方がいましたら教えて下さい。
>>959 うーん、なんかVC2008eeででるんと同じようなエラー内容だなぁ・・・
なんか設定する必要あんのかな?
そのinclude文のとこ右クリックして開いてみ それで見つからないならインクルードパスの設定すればいい
ツール - オプション - プロジェクト - VC++ ディレクトリ で 「インクルード ファイル」の設定内容をチェック バージョンの違いでちょっと文言が違う鴨試練
ライブラリのパスの直下のlibファイルはリンクできるのですが、 サブディレクトリのlibファイルは、下記のようにはリンクできないのですか? OK #pragma comment(lib, "mylib.lib") NG #pragma comment(lib, "lib/mylib2.lib")
965 :
デフォルトの名無しさん :2009/02/18(水) 21:48:11
hhj
#pragma comment(lib, "lib\\mylib2.lib")
967 :
964 :2009/02/18(水) 23:03:19
966 もちろんディレクトリ区切りを\\にしてもだめでした。 それにフルパスで記述したときに/で通るので、多分原因はそこではないと思います。 #pragma commentでライブラリファイルを指定するときに、サブディレクトリ内もちゃんと見るんですよね。 とりあえずそこの確認がほしいのです。
自分のプログラムとしてはなんかlibに関してはプロジェクトに追加してるかどうかだなぁw ヘッダ読んでpraguma云々の記述はlibファイルなんかねーとこ指してるけど動いてるw って状況やってみそ ヘッダとlibファイルのプロジェクトへの追加な
./hoge/lib.lib とかでもダメぽ?
970 :
964 :2009/02/19(木) 00:17:33
ファイルの階層はこんな感じです。 C:\MyLibrary ←VC++ディレクトリ-ライブラリとインクルードの一番上で指定。 mylib.lib lib mylib.h (#include <lib/mylib.h>は失敗しない) mylib.lib (上では区別のためにmylib2.libと書いたけど、コピーしたもの) プロジェクト-リンカ-追加の依存ファイルで指定しても 1>LINK : fatal error LNK1104: ファイル 'lib/mylib.lib' を開くことができません。 と出ます。 ./lib/mylib.libも同様にpragma でも依存ファイルの指定でも失敗しますorz
まさか、lib\\mylib.h のなかに #pragma comment(lib, "lib/mylib.lib") って書いている わけじゃないだろーな
コンパイルしようとしてるソースファイルはどこなんだよ
// main.cpp // マイドキュメント-VS2008-Projects/Test/Test // = プロジェクトディレクトリ #include <lib/mylib.h> // OK #pragma comment(lib, "lib/mylib.lib") // NG //#pragma comment(lib, "C:/MyLib/lib/mylib.lib") // OK //#pragma comment(lib, "mylib.lib") // OKだけど違うファイル int main() { const int ret = test_func(2); return 0; } // mylib.h #pragma once int test_func(int val); //mylib.cpp #include "mylib.h" int test_func(int val) { return val * 100; } 改行を削るとこのような感じになります。 コンパイルすると970のエラーメッセージが出ます。。。 もう遅いし、解決できそうにないのであきらめてフルパスで書くことにします。 ありがとうございました。
同名の違うファイルにパスが通ってるのも問題じゃないか
つーか、自前のlibなら、#pragma comment(lib, "ほにゃらら")は ヘッダに書けよ。 したら、cpp にゃ、ヘッダをインクルードするだけで済むだろーが。 じゃないと、他のプロジェクトで mylib.h を使いまわす時に、lib をリンクし忘れるのがオチだ。
>>926 このコードの真ん中って、「this->」いらなくない?
>>977 TextBoxと紛らわしかったので、説明上念のためつけただけ。
>>978 array<System::Windows::Forms::TextBox^>^ textBox;
↑
ひょっとして、これだけ、違うところに記述するんですか?
同じメソッド内に書いたらそこでしか使えないじゃない。 まあそれで済むならそれでいいけど。
>>981 すみません。いけました。
ありがとうございます
このスレみて、誰も答えられない難題もあるんだなぁと思った 質問に対して、一切答えられないものもあると それくらい難しいものなんだなぁ・・・
質問内容がイミフでスルーされるときも
オブジェクト指向で設計についての質問なのですが void prefunc(INTF intf); bool func(INTF intf , string str, RECT rect); void postfunc(HINTF intf); func(INTF intf, string str, RECT rect) { prefunc(intf); intf->func(str, rect); postfunc(intf); } void prefunc2(INTF intf); bool func2(INTF intf, DWORD count, RECT rect, DWORD flags, DWORD color); void postfunc(INTF intf); といった関数があってprefunc,func,postfuncでセットになっています。 funcの第二引数以降の型や数は異なっています。 funcの処理の流れはどのセットでも一緒で類似している点が多いのでこれらの関数をクラス化したいと考えました。 prefunc,postfuncは小クラスで独自の処理を行うため↓には書いてませんがオーバーライドして実装しようとおもってます class CParent { public: virtual void prefunc(HANDLE handle); virtual bool func(HANDLE handle, ...); virtual void postfunc(HANDLE handle); }; class CChild : public CParent { public virtual bool func(HANDLE handle, ...); }; のように可変引数を使って動くかどうかテストしてみて動いたんですが 可変引数を使ってオーバーライドする設計の仕方ってのは出来上がったソースの可読性も低くなるしこのまま実装していいのか悩んでいます もっと良い方法はないでしょうか。
オブジェクト指向で設計するぐらいなら、どのスレで質問したらいいか良く考えろよ
990 :
デフォルトの名無しさん :2009/02/20(金) 11:08:53
>>926 この手法を使えば、for文でテキストボックスから
値を収集できるんですね。
すごいです><
991 :
デフォルトの名無しさん :2009/02/20(金) 15:13:18
textBox1が空白の時に、 a = this->textBox1->Text; でエラーが出るのを、 if(textBox1->Text != L""){a = this->textBox1->Text;} じゃない方法でエラーが出ないようにできないですか?
if(textBox1->TextLength){a = this->textBox1->Text;}
994 :
デフォルトの名無しさん :2009/02/21(土) 00:34:22
質問なのですが、 VisualC++ 6.0 Windows XP SDIで、モードレスダイアログを生成しているのですが、 このダイアログからDocumentにアクセスの仕方が分かりません。 ご教授お願いします。
VC2008 EE で デフォルトの警告レベルを最大(4)に指定するにはどうすればよいですか?
プロジェクトのプロパティ
>>994 MFC なら MFC のスレで聴きな。このスレもう終わるし。
>994 そのモードレスダイアログが誰の子か知らないけど 親もしくは親の知り合いがDocumentにアクセスできるはず 自分ひとりで全部やろうとしないで人間関係を大切にしよう
999 :
デフォルトの名無しさん :2009/02/21(土) 09:36:52
999
1000 :
デフォルトの名無しさん :2009/02/21(土) 09:37:57
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。