- 1 名前:デフォルトの名無しさん [2008/07/31(木) 18:02:28 ]
- Visual C++入門者・初心者からの質問を、
お兄ちゃんお姉ちゃん達が優しく、時には厳しく回答してくれるスレッドです。 ■質問するにあたって ・エラーや警告のときはエラーメッセージを書きましょう。 ・開発環境も書きましょう、特にWindowsForm、MFC、Win32アプリケーションの区別。 ・できるだけ具体的に。 質問の仕方については次のページが大変参考になります。 www.hyuki.com/writing/techask.html ■回答するにあたって ・回答する場合はその答えに至るための「コツ」も書いてあげると良いでしょう。 (MSDNのどの項目だとか、何のキーワードでGoogleするとか) ・ネタや煽りは軽く流しましょう。 過去スレ、関連スレなどは>>2-5辺り。
- 335 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:19:35 ]
- VC++単体パッケージにはコンパイラしかついてないのか
- 336 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 22:59:15 ]
- >>332
いやまあその理解でもあまり困らないと思う。
- 337 名前:デフォルトの名無しさん mailto:sage [2008/09/01(月) 23:25:10 ]
- まぁ、VC6と言うとMFCを使えることを想定されるな。
- 338 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:11:16 ]
- win32だったらprograming windows (ペゾルド) C言語を知っている前提
MFCだったら標準口座MFC6.0(シルト) C++のクラスぐらいまで知っている前提
- 339 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 07:41:32 ]
- main( )で始まるプログラムとMFC使ったプログラムは勝手が違うな
- 340 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:35:06 ]
- ポインタをヘッダファイルで定義して、複数のソースから使用します。
そこでヘッダ宣言時に"_declspec(selectany)"で書くと、リンカエラーもなくビルドできます。 この"_declspec(selectany)"とは、どういったものなのでしょうか?
- 341 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 01:52:49 ]
- >>340
その通りの効果。リンク時に重複した定義を許し、1つにまとめる。 msdn.microsoft.com/en-us/library/5tkz6s71.aspx
- 342 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:03:54 ]
- WM_PAINTメッセージの処理で、クライアント領域の左側を白、右側を黒に塗り潰すとして、
再描画が必要な領域で条件分岐して、
- 343 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:06:21 ]
- 途中で送信してしまいまして、すいません。
WM_PAINTメッセージの処理で、クライアント領域の左側を白、右側を黒に塗り潰すとして、 再描画が必要な領域で条件分岐して、白黒それぞれ描画するか判断するのか、 描画が必要ない領域を塗り潰しても、結局システムは何もしないと思って 両方とりあえず描画するのか、どちらが一般的なんでしょうか
- 344 名前:デフォルトの名無しさん mailto:sage [2008/09/04(木) 21:55:55 ]
- 領域を指定する
- 345 名前:デフォルトの名無しさん mailto:sage [2008/09/05(金) 13:16:31 ]
- クライアントエリアの中は全部描く
クリッピングは速度のためにある
- 346 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:23:30 ]
- 昨日勉強始めました。
LINK : fatal error LNK1181: 入力ファイル 'object\library.obj' を開けません。 というエラーが出るのですがlibrary.objを検索してもHDにはありませんし、 解決するようなサイトが見つかりませんでした。 なにか解決方法ありましたらお願いします。 環境はVisualC++2008 Expressで、コードはチュートリアル用にダウンロードしたもの。 元のコードはVisualC++6で書かれたようです。
- 347 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 10:40:55 ]
- それ理解できないなら別のことやった方がいい
- 348 名前:デフォルトの名無しさん mailto:sage [2008/09/06(土) 11:08:18 ]
- どっかでひろってきたサンプルのコンパイル方法か
- 349 名前:デフォルトの名無しさん [2008/09/07(日) 21:02:29 ]
- >>273について誰か教えてください。よく理解できません。
- 350 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:07:28 ]
- >>349
d.hatena.ne.jp/keyword/%A5%B0%A5%B0%A5%EC%A5%AB%A5%B9
- 351 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 21:11:23 ]
- 特に指定がない場合はコンパイラが拡張子見てどっちか判断する
- 352 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:33:38 ]
- 授業でbccを使って書いたプログラムのソース(問題.c)をVisual C++で流用しようとしたら
1>cl : コマンド ライン error D8045 : C ファイル '.\問題.c' を /clr オプションと共にコンパイルできません というエラーが出てコンパイルが完了しません。どうしたらよいでしょうか?
- 353 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:48:54 ]
- プロジェクト作るときにWin32を選ぶ。
CLR選んだらCは使えない
- 354 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:02:52 ]
- >>353
ありがとうございます。 しかし今度は 「プリコンパイル ヘッダー ファイルが旧バージョンのコンパイラで作成されています。また、C++ のプリコンパイル済みヘッダー ファイルを C で使用しています (その逆も考えられます)。」 というエラーがありました。
- 355 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:10:12 ]
- >>354
空のプロジェクト作って追加するのがいいと思うけど、 cppのプロジェクト作って追加したのなら、ソリューションエクスプローラーのとこで 該当ファイル右クリックしてプロパティ出して、C/C++のプリコンパイルヘッダーの項目のとこで プリコンパイル済みヘッダーを使用しない、にする。 あるいはプロジェクト全体でこの設定をしてもいい。
- 356 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:24:59 ]
- >>355
ありがとうございます。 何とか上手く行きましたが、最後にscanfの宣言をしてくださいというエラーが出ました。 これはどういうことでしょうか?
- 357 名前:356 mailto:sage [2008/09/08(月) 00:25:56 ]
- 正しくは「'scanf' の宣言を確認してください。」でした。
- 358 名前:356 mailto:sage [2008/09/08(月) 00:33:44 ]
- すみません。自己解決しました。
Visual C++2005からの仕様変更が原因だったみたいですね。。 お騒がせしました。長らくのお付き合いありがとうございました
- 359 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 00:34:45 ]
- それは2005以降出るよ。
詳しくは、そのエラーの行でF1押して出たページの「CRT のセキュリティ強化」を読むといい。 その関数使う事が決まってるなら無視してもいいし、気になるならヘルプに出なくする方法も書いてある。 scanf以外にも、printf系、str〜系で出る。
- 360 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 01:34:31 ]
- 移植性?なんだそれ?そんなの知らん!
俺はMSと心中するんだと言う気持ちならscanf_sなど_s系が付いた関数を使えば良いよ
- 361 名前:デフォルトの名無しさん [2008/09/08(月) 10:26:31 ]
- すんません
VC++6.0(MFC)でテキストエディタ作れと言われたのですが、 最初の最初でつまづいてます。 プロジェクト新規作成→MFC→SDIアプリ→→で、初期のスケルトン作成。 その後ですが、IDR_MAINFRAMEのフォームの白い部分(メニューバーを除く全部 の領域)を全体的にテキスト入力欄にするにはどう操作すればいいですか? ダイアログベースのプログラムならテキストボックス置けばいいだけですが、 SDIアプリケーションの場合はどうするのでしょうか?
- 362 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 10:32:15 ]
- >>361
MFCだといくつかのやり方があって、どういう点を学習してるかによるが、、、 CViewをCEditViewに替えるだけでいけるけど、、、 Editコントロールを貼り付けるのなら、メンバーにCEditでも置いて ウィンドウのOnCreateで一緒にCreateしてやって、OnSize時に CEditをクライアントエリアと同じ大きさにしてやればいい。
- 363 名前:デフォルトの名無しさん [2008/09/08(月) 12:04:29 ]
- >>362
ありがとうございます。 なんとか後者の方法でエディットボックス設置はできました。 あとは ・起動時にウィンドウのクライアント領域と合わせる ・リサイズ時にも合わせる のようにしたいですが、ウィンドウサイズの初期値設定、クライアント領域の現在値の取得などはどのようにすれば良いですか?
- 364 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 12:10:38 ]
- クライアントのサイズはGetClientRect()というのがあるけど、
WM_SIZEのハンドラ、OnSizeの引数に幅と高さもあるから、それそのまま使えばいい。 起動時にリサイズ(WM?SIZE)も来るから、起動時のことは考えなくてもいい。
- 365 名前:デフォルトの名無しさん [2008/09/08(月) 16:42:03 ]
- >>364
ありがとうございます。 試行錯誤した結果、やはりCEditViewにすることにしました。 www.vcppclub.com/kouza/nextstep1/mdieditor1.html ここを見たら1行も書かずに、読み込み/保存機能はできてしまったのですが、疑問が。 ファイル読み込みのダイアログを出す→ユーザーが選択したファイルを読み込む→テキストエリアに表示 保存も同様。 これらに必要な処理がどこにも書かれていないような気がするのですが。 調べていた段階で、メンバ関数 OnFileOpen() を作成し、 GetOpenFileName();でダイアログを出し、 CFile型に読み込む手順が必要そうだったのですが、 自動生成されたソースではどこにも書かれていません。 にもかかわらず読み書きできるのが疑問です。 (サイトのサンプルはMDIですが、SDIでもほとんど同じのようです)
- 366 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:33:51 ]
- その辺はMFCとDocumentViewアーキテクチャの話だからなあ。
CWinAppからCDocument、CEditViewの操作はMFCの中に含まれている。 もちろん、自分で変更することも可能。
- 367 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:35:50 ]
- 派生した部分しか見てないんだろ
- 368 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:37:06 ]
- オリビア派生
- 369 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 02:47:07 ]
- VisualStudioのエディタのタブや改行の記号表示について質問があります.
デフォルトの表示を変更したいのですがどのようにすればよいのでしょうか? 具体的には改行文字を$にタブ文字を>---という風に変更したいのですが
- 370 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 06:11:23 ]
- ひとりごとです
- 371 名前:デフォルトの名無しさん [2008/09/09(火) 10:49:53 ]
- CEditViewでの、現在表示されている文字列を格納しているメンバは何ですか?
入力されたものを文字列型にコピーして保存やらなにやらいろいろやりたいのですが。 逆に文字列型に格納された文字列を表示する方法も。 そういったテキストバッファの操作のしかたがいまいち分からないです
- 372 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:00:09 ]
- エディットコントロール自身がバッファを持ってる
普通は直接バッファいじらないでメンバ関数使ってアクセスする
- 373 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:18:51 ]
- 普通はCDocumentの派生クラスに自分でデータ構造作ってビューはその表示方法書いたりするけど
CEditViewは特殊だからな。GetEditCtrl()でCEditのインスタンスが取れるのでそれを操作すればいい。
- 374 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:28:37 ]
- typedef struct tagTest {
unsigned int x :1; } Test; このようなコードを見かけたのですが、「:1」は何を意味しているのでしょうか。
- 375 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:31:25 ]
- >>374
ビットフィールド
- 376 名前:374 mailto:sage [2008/09/09(火) 11:43:07 ]
- 素早い回答、ありがとうございました。
- 377 名前:デフォルトの名無しさん [2008/09/09(火) 13:53:02 ]
- >>372-373
なるほど。 CEditのメンバ関数見るとそれらしいものがあるようですね。 しかし、GetLine()のように、行ごとに取得してくる関数はあるみたいですが、 「とりあえず改行も含めて全体をCStringにコピー」するようなものは見当たらないです。 全部の行を走査してコピーする部分は自分で作成しないとダメですか?
- 378 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:02:47 ]
- 全取得はGetWindowText()
これはCEditでも、CEditViewでも使える。
- 379 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:06:23 ]
- >>377
MSDNを見るときは、継承元のクラスのメンバも見よう。 GetWindowText()で取れるんじゃね? って書いてたら先を越されたw
- 380 名前:デフォルトの名無しさん [2008/09/09(火) 14:28:49 ]
- >>378-379
おぉ ありがとうございます! MSDNの見かたを訓練するようにします。 ところでもうひとつ質問が。 MainFrameのメニュー選択によりそれらの動作をさせたいのですが、 void CMainFrame::On????(){ } ↑ここの記述で、 MainFrameのほうからViewを操作するにはどのようにすれば良いですか? C(アプリ名)Viewクラスのインスタンス名が分かれば「名前.関数名」のような形 で呼び出せると考えたのですが、 どこにも宣言部分が見当たらないようです。
- 381 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:12:49 ]
- >>380
えーと、SDIだったよな? CFrameWnd::GetActiveView()でどうか。
- 382 名前:デフォルトの名無しさん [2008/09/09(火) 15:24:53 ]
- >>381
CViewのポインタが帰ってくるようで、継承して作られたC???Viewの関数は使えないようです。 CFrameWnd::GetActiveView()->関数(); このようにしてもビルドが通らないです。
- 383 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:32:12 ]
- >>382
GetWindowtext()が見つけられないようだったから、わざわざCFrameWnd::GetActiveView()の 書き方にしたのに、そしたらこれかよ・・・ CなんたらEditView* pView = (CなんたらEditView*)GetActiveView(); でいいだろ、ちょっとは考えろよ。
- 384 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:36:11 ]
- メニューから直接よべる
- 385 名前:デフォルトの名無しさん [2008/09/09(火) 19:30:54 ]
- >>383
未熟ですみませぬ・・・ おかげさまで思った通りのものができました。
- 386 名前:デフォルトの名無しさん [2008/09/10(水) 11:58:44 ]
- お世話になります。VC++6でダイヤログベースのプログラムを作っています。
ダイヤログにボタンを新設し、Classウィザードを使ってON_BN_CLICKEDメッセージ関数を使って ボタンがおされた事はプログラムで取得できるようにできました。 ボタンを何秒間押したかを調べたいのですが、ボタンが離されたメッセージがなく、 どうやって作ったらいいかわかりません。 どのようなメッセージを使えばいいのでしょうか? よろしくお願いいたします。
- 387 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:04:58 ]
- CButtonをサブクラス化して自分でLBUTTONDOWNとLBUTTONUPの時刻の差を取るしかないんじゃないかなあ
- 388 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:32:58 ]
- ボタンのイベントは押した時じゃなくて、離した時に発生する気がしたけど
- 389 名前:デフォルトの名無しさん [2008/09/10(水) 15:12:46 ]
- 数日前にVC++ 2008 Express Editionを使い始めた初心者です。
ttp://homepage3.nifty.com/ishidate/ を参考にWindowsフォームアプリケーションのテンプレで作成したのですが、 一度目のビルドは普通に実行されて表示されるものの、少しでも書き換えた後(内容に一切変化がない場合でも) 以降ビルドを行おうとするとexeファイルが見つからないと表示され、エラーが発生します。 CやC++は以前から触れていたのですが、VisualStudioの操作に関しては いまいち分からないので原因が分かりません。 どなたか分かる方は折られるでしょうか?よろしくお願いします。
- 390 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 15:16:29 ]
- なんかおかしいね。
PCの時計はくるってない?
- 391 名前:デフォルトの名無しさん [2008/09/10(水) 16:59:39 ]
- EXE だけど DLL としても使えるバイナリってどうやって作ればいいですか?
- 392 名前:デフォルトの名無しさん [2008/09/10(水) 18:07:37 ]
- VC6で、2003以降のXmldocumentクラスに相当するものってありますか?
- 393 名前:391 mailto:sage [2008/09/10(水) 19:31:29 ]
- 自己解決しました。とりあえず
__declspec(dllexport) 付けて宣言しとけばEXEでビルドしてもエクスポートされるんですね。
- 394 名前:デフォルトの名無しさん [2008/09/10(水) 19:42:43 ]
- VC++ 2008 Proを使っています。
デバッグでプログラムを実行させると出力欄に、 「'System.NullReferenceException' の初回例外が ImageRecognize.exe で発生しました。」 と表示されるのですが、これがどの行で発生したかを調べるにはどのようにしたらいいでしょうか? どなたか教えていただけると嬉しいです _ _
- 395 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 19:45:00 ]
- ヌルポ
- 396 名前:394 mailto:sage [2008/09/10(水) 19:47:11 ]
- すみません、メニューのデバッグ→例外を設定することで出来るようになりました。
お騒がせいたしました。
- 397 名前:デフォルトの名無しさん [2008/09/11(木) 01:08:30 ]
- CreateProcessで新規のルートプロセスを発行した後、
親プロセスはWaitForSingleObject(hHandle, 0)を実行して 即終了させようと思っています。(UNIXのデーモンプロセス生成のような感じ) ここでWaitForSingleObject()のタイムアウト時間を0秒に設定すると 何か問題あるでしょうか?
- 398 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 01:20:13 ]
- そのwaitに一体何の意味が?
- 399 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 01:25:50 ]
- >>398
形式的に入れた方がいいのかと思ったのですが、 もしかして即終了させるならば必要ないですか?
- 400 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 08:08:02 ]
- 何のために待つのか考えろよ
- 401 名前:デフォルトの名無しさん [2008/09/11(木) 09:40:54 ]
- VC++ 6.0で、
xmlファイルを解析して読み込む/書き込む仕組みを作らなくてはならないのです が、手探りで困っております。 検索してみると、VC2003以降になればXmldocumentクラスなるものが使えるよう ですが、 VC6.0ではmsxml.hを使わなくてはならないようです。 これについての資料やサンプルがweb上にあまり無くて困っています。 また、xercesのライブラリを使う手段も打診されているのですが、 これについてはどのようにすれば良いでしょうか? ダウンロードしても構成ファイルが大量にあり、これらをどう組み込むのが検討 が付きません。 また、VC6用のサンプルのプロジェクトファイルは同梱されていたものの、なぜ かビルドが通らないようです。 こちらから入手したものです。 xerces.apache.org/xerces-c/ 次レスに続きます
- 402 名前:デフォルトの名無しさん [2008/09/11(木) 09:42:05 ]
- xerces-all.dswを開いてビルドすると
エラー内容 C:\Liblary\xerces-c-src_2_8_0\src\xercesc\util\Platforms\Win32\Win32PlatformUtils.cpp(691) : error C2039: 'InterlockedCompareExchangePointer' : '`global namespace'' のメンバではありません。 C:\Liblary\xerces-c-src_2_8_0\src\xercesc\util\Platforms\Win32\Win32PlatformUtils.cpp(691) : error C2065: 'InterlockedCompareExchangePointer' : 定義されていない識 別子です。 cl.exe の実行エラー 外部のライブラリを使用するプログラムを作ったことが無いので、そういった部 分の基本から教えていただけると幸いです。
- 403 名前:デフォルトの名無しさん [2008/09/11(木) 09:51:27 ]
- >>401
VC2008とboostいれようぜ。 そしたら簡単。serializationとか
- 404 名前:デフォルトの名無しさん [2008/09/11(木) 09:55:05 ]
- VC2008が無料で2005より軽いことをしらんのか?
- 405 名前:401 [2008/09/11(木) 09:57:19 ]
- すんません
業務で、VC6と指定なのです。
- 406 名前:デフォルトの名無しさん [2008/09/11(木) 10:02:12 ]
- この辺参照。
これ使うとXMLの扱いがとっても簡単になりますね 基本的にはシリアライズしたいクラスのメンバにserialize関数を追加するだけです d.hatena.ne.jp/faith_and_brave/20070809/1186672741 d.hatena.ne.jp/cass_src/20070730
- 407 名前:デフォルトの名無しさん [2008/09/11(木) 10:04:40 ]
- >>405
では、boostをいれれば? コンパイルできるかは知らないけれど。 でも、msxml.hを使うのが普通ですね。標準機能なので。
- 408 名前:デフォルトの名無しさん [2008/09/11(木) 10:18:04 ]
- ありがとうございます。
boostを研究してみます。
- 409 名前:デフォルトの名無しさん [2008/09/11(木) 10:18:40 ]
- この辺にMSXMLの使い方かいてありますよ。
あとはMSのサイトで調べれば完璧じゃないですか? www.utj.co.jp/xml/dev/dom/dxdom1_1.html www.utj.co.jp/XML/DEV/dom/dxdom2_1.html www.sutosoft.com/oldroom/devdiary/20020505.html www.sutosoft.com/oldroom/devdiary/20040307.html hp.vector.co.jp/authors/VA014436/prg_memo/windows/vctips/006.html www.s34.co.jp/cpptechdoc/article/xml/persist/
- 410 名前:デフォルトの名無しさん [2008/09/11(木) 10:23:01 ]
- >>408
boostが動かせる(コンパイルできる) かどうかのコンパイラ別の対応表がどこかにあったのですが 忘れてしまいました。boostのホームページのどこかにあったはずです。 XMLを扱う簡単さでは、boostの方が上と思いますが VC6の機能からなるべくはみ出ないようにするには、MSXMLと思います。
- 411 名前:デフォルトの名無しさん [2008/09/11(木) 11:24:48 ]
- やはりVC6でビルドしようとすると、「ブロックが大きすぎてコンパイルできません」と出ます。
あきらめてmsxmlのほう使います。 詳しい資料ありがとうございました。
- 412 名前:デフォルトの名無しさん [2008/09/11(木) 15:42:25 ]
- >>411
MSの機能以外を使って良いなら、いったんVC2008とboostのバイナリパッケージをインストールして serializationを使ってXML操作DLLやLIBを作成してVC6でそれを利用するという手をある。 上位のライブラリをVC6で使えるかはよくわからないけど、 DLLにしてあればMinGWやBCCやVCで共通に使えるので平気と思う。
- 413 名前:デフォルトの名無しさん [2008/09/11(木) 15:45:08 ]
- boostのバイナリパッケージはここにある。次に対応している。
Visual C++ 7.1 (Visual Studio 2003), 8.0 (Visual Studio 2005), and 9.0 (Visual Studio 2008) www.boostpro.com/products/free
- 414 名前:デフォルトの名無しさん [2008/09/11(木) 17:15:00 ]
-
このサイトで解説している、以下の部分 www.sutosoft.com/oldroom/devdiary/20020505.html // ●ファイルから読み込む。● lpXMLDoc->put_async(VARIANT_FALSE); VARIANT FilePath; ::VariantInit(&FilePath); FilePath.vt = VT_BSTR; V_BSTR(&FilePath) = ::SysAllocString(L"test.xml"); VARIANT_BOOL result; lpXMLDoc->load(FilePath, &result); ::VariantClear(&FilePath); わざわざファイル名を指定するのにVARIANT型を使うのは何故ですか? CString型でパス名指定したりして読めれば楽なのですが・・・ 実行ファイルと同じフォルダにtest.xmlを置いても、読み込みできていないよう です。 ::VariantInit〜::VariantClearで囲うことの意味、 V_BSTR(&FilePath) と、一見関数に見えるものに代入演算子が付いている意味など、 VARIANT型を扱う処理が全体的に分からず困ってます。
- 415 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:00:39 ]
- DOM(Document Object Model)、COM(Component Object Model)の約束なのでしかたがないのでは?
Microsoft社が提唱する、部品化されたプログラムを作成・利用するための基盤となる技術仕様。 特定の機能のみを持つプログラム部品を組み合わせることでアプリケーションソフトの開発が容易になる。 この仕様に基づいてデータのやりとりができるプログラム部品のことをCOMコンポーネントと呼ぶ。 COMコンポーネントは開発に使った言語やコンポーネントのある場所などに拠らず、 どの言語からでも、どこからでも利用することができる。 ネットワークを通じて別のコンピュータ上にあるCOMコンポーネントを利用する技術をDCOMと言う。 これらの技術はWindowsだけでなく、UNIXやMac OSにも移植されている。 コンポーネント開発が楽にできるよう改良された次世代のCOM+の開発が進んでおり、 Windows DNAの中核技術として期待されている。 bizex.goo.ne.jp/tool/it/8_77/209/
- 416 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 19:01:57 ]
- そういうのはVBで扱う前提だからVCだとめんどくさい
- 417 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 19:58:31 ]
- CComVariantとか使うべき
- 418 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 23:08:34 ]
- char str[20]とかいうのがあって
strが"abcd%EFG"だったときに %以前の文字を削る(str="EFG"にする)にはどうしたらいいですか?
- 419 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 23:31:26 ]
- >>414
#importでのraw_interface_onlyやめろ。 それを無くすと、高水準なラッパを作ってくれてめちゃくちゃ楽になる。 例えば、loadメソッドならVARIANTやBSTRを使わず文字列を直接渡せるようになる。
- 420 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 23:32:59 ]
- size_t length = strlen(str);
char * rp = str; // read char * wp = str; // write while (rp != '\0') {
- 421 名前:デフォルトの名無しさん [2008/09/12(金) 11:37:10 ]
- >>419
詳しく教えてください。 #importから、raw_interface_onlyを削除しました。 しかし、あいかわらずloadメソッドではVARIANT型、VARIANT_BOOL型のふたつの 引数が要求されます。 IXMLDOMDocument* を定義してから、インスタンスを生成し、ファイル名を指定 して読み込み、ノードを指定してい読み込んでくるまでの 一連の流れを教えていただけると幸いです。
- 422 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 11:46:14 ]
- 初心者スレでやることとは思えない
- 423 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 11:56:30 ]
- コピペ
つ pDoc->load(_variant_t(L"majissuka.com/NewInfo.xml"),
- 424 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 11:59:33 ]
- ファイルなら絶対指定では
file:///C:/windows/test.txt かな? test.txtでもいいとはおもう。
- 425 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 12:13:02 ]
- >>418
> char str[20]とかいうのがあって > strが"abcd%EFG"だったときに > %以前の文字を削る(str="EFG"にする)にはどうしたらいいですか? > char *p; p = strchr(str,'%'); p++; strcpy(str,p);
- 426 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 12:20:56 ]
- これでいけたけど・・・
#include <msxml.h> #include <comdef.h> #include <atlbase.h> int main(){ CoInitialize(NULL); IXMLDOMDocument* lpXMLDoc; CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&lpXMLDoc); // ●ファイルから読み込む。● VARIANT_BOOL result; lpXMLDoc->put_async(VARIANT_FALSE); lpXMLDoc->load(_variant_t(L"test.xml"), &result); // ●ノード検索● IXMLDOMNodeList* lpNodeList; BSTR NodePath = ::SysAllocString(L"Test/Item"); lpXMLDoc->selectNodes(NodePath, &lpNodeList); ::SysFreeString(NodePath); long lLength; lpNodeList->get_length(&lLength); for (int i = 0; i < lLength; i++){ IXMLDOMNode* lpItem; lpNodeList->get_item(i, &lpItem); BSTR str; lpItem->get_text(&str); USES_CONVERSION; printf("%s\n", W2A(str)); SysFreeString(str); lpItem->Release();} lpNodeList->Release(); lpXMLDoc->Release(); CoUninitialize();}
- 427 名前:デフォルトの名無しさん [2008/09/12(金) 17:59:27 ]
- >>423-424,426
ありがとうございます。 やはりうまくビルドできないですが・・・ 引き続き試行錯誤しつつ、XML関連のスレのほう除いてみます。 ところで、CEdit型のエディットコントロールの、それ自身のウィンドウ内での座標をゲットおよびセットする関数ってありますか? (つまり、事後的にプログラム内で任意で位置を変更したい) SetRect(),GetRect()だと思ったらコレはこのコントロール内での座標のことのようでした。
- 428 名前:デフォルトの名無しさん [2008/09/12(金) 19:02:06 ]
- ふと思ったんだがCDとかDVDとかって
Diskか? Discか?
- 429 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:05:27 ]
- Discは光学メディア
Diskは磁器媒体
- 430 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:13:23 ]
- CDはソニーが作ったから
- 431 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:21:35 ]
- サンクス!
そう言う区分だったのか ってことはCD/ DVDを「Disk」って書いちまった資料を全部直さないとか・・・
- 432 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:26:55 ]
- ja.wikipedia.org/wiki/Universal_Disk_Format
Universal Disk Format (ユニバーサルディスクフォーマット、UDF)は光ディスク用のファイルシステムである。
- 433 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:46:30 ]
- >Discは光学メディア
>Diskは磁器媒体 MOはどっち?
- 434 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:46:43 ]
- e-words.jp/w/E58589E38387E382A3E382B9E382AF.html
光ディスク 【optical disk】 データの読み書きにレーザー光を利用する記憶媒体のこと。 CDやDVD、PDなどが代表的な光ディスクである。
- 435 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 19:48:37 ]
- e-words.jp/w/E58589E7A381E6B097E38387E382A3E382B9E382AF.html
光磁気ディスク 【MO】 読み方 : ひかりじきディスク 別名 : Magneto-Optical disk
|

|