★初心者にVisual C++ ..
[2ch|▼Menu]
331:デフォルトの名無しさん
07/02/06 17:36:36
いまだにdllの仕組みが理解できません。
猫でものホームページ見ながら作ってみたんですが
dllを作った時のヘッダを含めて
かつその時出来たlibファイルを
#pragma comment(lib,"〜.lib)
か、リンカの設定でリンクしないと使えないのは
libを通してやらないと、dll内の関数を呼び出すことは出来ないと
いう事なんでしょうか。
LoadLibraryを使っても意味無かったので、よくわからないです。
どなたか教えて頂ければ幸いです。

VS2005というIDE環境で勉強してるから楽出来てる分その楽
出来ている理由が解って無く勉強不足になってると自らは思います。


332:デフォルトの名無しさん
07/02/06 17:41:21
>>330
「静的」「動的」の意味が分かっていないような気がする。

コードの中で
  int i;
  char String[80];
とかやるのが「静的確保」。これらの変数は実行ファイルがメモリ上に
ロードされた時点で既に存在していて、終了と同時に消滅する。
グローバル変数だろうが(クラスの)メンバ変数だろうがそれは同じ。
したがって delete/delete[] は必要ない。

333:デフォルトの名無しさん
07/02/06 17:48:03
>>331
LoadLibraryで読み込んだDLLの関数を呼び出すには、
GetProcAddressで関数のアドレスを取得するんだよ。

334:デフォルトの名無しさん
07/02/06 17:49:34
>>331
VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、
この2つは完全に別種のもの。中身は一緒、ただ使い方が違う。

LIBファイルは静的リンク用のファイル。
自分の実行ファイルの中に(コンパイルの時点で)取り込んでしまって、
あたかも自分の書いたコードと同じように使えます、というもの。
だからLIBを組み込むときにはリンカなり#pragmaなりで予め設定をして、
コンパイルのときにリンクすることを明示しなければならない。

DLLは動的リンク用のファイル。
一般的には、まずLoadLibrary()でDLLファイルを読み込み、
(そこでもし成功したなら)次にGetProcAddress()で
DLLの中に埋め込まれた関数を取り出して使う、
最後にFreeLibrary()でDLLを自分のプログラムから取り外す、
という段取りを踏む。
コンパイル時には存在しなくても構わない、実行時にあればいい。

335:デフォルトの名無しさん
07/02/06 17:55:16
>>332
うーんということは私が知らず知らずのうちに
どこかで動的確保しているということでしょうか?

336:デフォルトの名無しさん
07/02/06 18:02:34
>>334
>VS2005で「DLLを作る」と言ったときには自動的にLIBファイルも作られるけど、 
このLIBはインポートトライブラリ。
LoadLibraryやらGetProcAddressやらメンドクサイ処理をしてくれる短いモジュール。
これを静的にリンクすればDLLの呼び出しが簡単に出来る。
インポートトライブラリがあるなら極力使ったほうが楽。

337:デフォルトの名無しさん
07/02/06 18:05:31
インポートトライブラリ
インポートトトライブラリ
インポートトトトライブラリ

338:320
07/02/06 18:12:06
スレッドオブジェクトの配列をグローバル変数にしてるんですが
これはまずいですか?せめて原因をつきとめたいです

339:デフォルトの名無しさん
07/02/06 18:12:57
>>335
動的確保はスタックに積むケースとnewやmallocなどでヒープから確保するケースがある。
静的確保はstaticで定義した場合(明示的にstaticをg使わないケースも含む)
クラス内のメンバー変数はクラスがどう生成されたかによる。

>>336
誤字をさらにコピーしてしまったか、インポートライブラリだな。


340:331
07/02/06 18:44:51
>>333さん
>>334さん
>>336さん
ご教授ありがとうございました。
GetProcAddress()FreeLibrary()ってのも必要なんですね。
それと、dll作った時のlibはインポートライブラリなんですね。
「プログラムはなぜ動くのか」って本を読んだにもかかわらず
流し読みで頭に入っておらず再読したらちゃんと書いてありました。
はぁ、馬鹿だな俺って。

341:デフォルトの名無しさん
07/02/06 19:56:07
SendMessageであるウィンドウにDボタンを送りたいのですが、
SendMessage(hwnd,
このあとをどうすればよいのでしょうか。
ご教授願います。

342:デフォルトの名無しさん
07/02/06 20:06:34
>はぁ、馬鹿だな俺って。
それに気がつくことができれば、今後はもっと「馬鹿」じゃなくなるでしょう。
そうやって向上できる人間が、「賢い」のです。
#で、「ご教示」ですね。

>>320
ソース公開しちゃった方が話が早そうですね。

343:デフォルトの名無しさん
07/02/06 20:07:43
>>341
Dボタンってなんですか?
マウスクリックのイベントを送りたいなら、Spy++でどういうパラメータを渡せばいいか覗いてみると宜しいかと。

344:317
07/02/06 21:25:08
>>319
フラグを使うのは普通なんですね。
ありがとうございました。

345:デフォルトの名無しさん
07/02/07 00:17:13
>>320
いろいろ言われてるけど、とりあえず
配列利用時に、添え字がオーバーアクセスしてないか確認するべし。

> 原因を突き止めたい
デバッガを上手に利用しましょう。
ある特定のメモリ空間にアクセスした時にbreakかけることも出来たはず。
詳しくは「ブレークポイント」をMSDNで調べてくれ。

346:デフォルトの名無しさん
07/02/07 00:59:43
基礎的すぎる質問なんですが、


ダイアログエディタで適当にあれこれコントロールを張ったとき、
VC++2003でビルドしたプログラムを98SEで走らせると、

コントロールのマルチバイト文字がすべて文字化けする。
エディットボックスに直接マルチバイト文字入れても同じく。
メニューバーやステータスバーは文字化けしない。

文字はTCHAR系統を使い、ビルドした結果はすべてwchar_tになっているはず。


このような状況で、文字化けさせない用にする方法を教えてくださいませんでしょうか?

347:デフォルトの名無しさん
07/02/07 01:47:02
9xはUNICODE対応していないから、MSLUを使うか非UNICODEにするかしないとだめだよ。

348:デフォルトの名無しさん
07/02/07 02:07:28
2000とXPは内部コードはUnicodeだけど98とかはどうなんだろう。
localeまわりかな?Unicode適応しないでビルドしたらSJISになっていけるのかな?

349:デフォルトの名無しさん
07/02/07 02:23:29
>>347
なるほど…
わかりました。
ありがとうございました。

350:デフォルトの名無しさん
07/02/07 09:03:22
>>346
マルチバイト文字(列) と ワイド文字(列) の意味を
使い分けられて無い気がするぞ。

マルチバイト文字列は char* で
ワイド文字列は wchar_t* だ。

351:デフォルトの名無しさん
07/02/07 10:14:21
そもそもダイアログでコードページ932で作ってたりして

352:デフォルトの名無しさん
07/02/07 10:18:25
クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが

そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?

353:デフォルトの名無しさん
07/02/07 10:26:03
>>352
C++スレ行くか
C++の入門書でも読んで勉強してください

354:デフォルトの名無しさん
07/02/07 10:31:05
>>353
わからないんですね

355:デフォルトの名無しさん
07/02/07 10:36:05
入門書にしっかり書いてある

356:デフォルトの名無しさん
07/02/07 10:39:04
スレリンク(tech板)
ではここで教えてください

357:デフォルトの名無しさん
07/02/07 11:03:34
グローバル変数はコンパイル時に場所が決まってるから

358:デフォルトの名無しさん
07/02/07 16:30:17
というより、C/C++の規格でそうなると定められているためと言ったほうがいいと思う。

359:デフォルトの名無しさん
07/02/07 16:33:10
どうだろね。
仕組みから入ったほうが、そう決まってるからそうなんだ、より納得いくかもしれんし

360:デフォルトの名無しさん
07/02/07 17:01:56
実装がそうだからそれが正しいという保証はどこにもない

361:デフォルトの名無しさん
07/02/07 17:25:43
逆にこれは実装が先にあって仕様が追いついた例でもあるな。
構造体のコピーも似たようなもの。

362:デフォルトの名無しさん
07/02/07 18:49:23
VC++7.0でライブラリファイルをリンクする方法を教えてください
winsockライブラリを使いたいのでお願いします

363:デフォルトの名無しさん
07/02/07 19:23:53
#pragma comment(lib, "Mswsock.lib")

364:269
07/02/08 08:10:55
269です。たびたび申し訳ありません。

SDK入れてWindowsアプリが作れるようになったんですが、ダイアログやアクセレータ等の
リソーススクリプトファイル(.rc)をエディットするResEditorがついてないみたいなので断念しそうです。
というかそれが目的だったので。
Windowsフォーム(.h)は作れるみたいですがどうしていいのかわかんないです。

Visual Studio 2005 Academic Editionだったらリソーススクリプトファイル(.rc)の作成は可能でしょうか?
可能ならば購入したいと思います。よろしくお願いします。

365:デフォルトの名無しさん
07/02/08 10:01:56
MSに訊け

366:デフォルトの名無しさん
07/02/08 10:07:23
>>363
ありがとうございます

367:デフォルトの名無しさん
07/02/08 10:35:00
>>364
可能だがフリーのエディタもあるよ

368:デフォルトの名無しさん
07/02/08 11:04:04
メモ帳でええがな

369:デフォルトの名無しさん
07/02/08 11:50:13
VisualStudio2005C++ExpressEditionにて
#include "stdafx.h"
#include"stdio.h"

int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp=fopen("d:/test.txt","rw");
というコードを書きました。
FILE文付近で「〜Expression:(Invalid file open mode",0)〜」
というダイアログボックスがでます。
CRTセキュリティ強化されたためということですが、このセキュリティを
弱くしたいと思います。どのようにすればよいですか?

370:デフォルトの名無しさん
07/02/08 11:50:39
WinSockのAPIを使ってphpから文字列を取得することはできますか?

371:デフォルトの名無しさん
07/02/08 12:12:23
>>369
セキュリティ強化用の関数が追加されたけど
標準関数の仕様はかわらないのでは?

372:デフォルトの名無しさん
07/02/08 12:18:22
>>370
プロトコル次第

373:デフォルトの名無しさん
07/02/08 12:20:17
>>372
httpなんですが
あとサーバーに送る文字列の改行コードは\nで大丈夫でしょうか?

374:デフォルトの名無しさん
07/02/08 13:09:22
>>371
標準関数の仕様はかわらないのでは?
たぶんそうだと思うのですがうまくいかないです。


375:デフォルトの名無しさん
07/02/08 13:18:46
エラー通り"rw"が悪い

376:デフォルトの名無しさん
07/02/08 14:04:09
>>275
VisualStudio2003だとうまくいくのですが、
構文的にrwなんてつけたらだめなのですか?

377:デフォルトの名無しさん
07/02/08 15:05:50
unicodeかなんかじゃないの?

378:デフォルトの名無しさん
07/02/08 15:56:14
"rw" なんてのは無い

379:デフォルトの名無しさん
07/02/08 16:37:09
MSDNこういう例ものってるし "rw" もあるだろ

URLリンク(msdn2.microsoft.com)(VS.80).aspx

fopen("newfile.txt", "rw, ccs=<encoding>");

380:デフォルトの名無しさん
07/02/08 17:11:52
多分すごい有名な
「新VisualC++6.0入門ビギナー編 林春比古署 ソフトバンク社」
を使って今勉強中なんですが、
241ページのサンプルプログラムで、
CPenクラスのオブジェクトのポインタ、’oldPen’ってゆうのを、
’旧ペン’と銘打って保存って書いてありますが、
これをする意味がわかりません。
わざわざポインタでなぜ確保しているのでしょうか?
pDC->SelectObject(&CPen型Object)で選択して書くだけなのに、
別に’旧ペン’を保存しておく必要があるのでしょうか?
私が簡単に確認した程度では、
oldPen 自体設定しなくても実行可能でしたし、
最後に’旧ブラシに戻す’ってゆう作業もなくても問題ありませんでした。
他にもいろいろ記述してoldPenの有用な使い方を検証しましたが、
やればやるほど意味がないのではという考えに傾きます。
大変限定的な質問ですが、
よければ本を持ってる方、もしくはよく知ってらっしゃる方でわかる方がいれば
教えていただけないでしょうか?




381:デフォルトの名無しさん
07/02/08 17:21:08
MSDNのサンプルだとこんな感じだね

void CMyView::OnDraw( CDC* pDC )
{
CPen penBlack; // Construct it, then initialize
if( newPen.CreatePen( PS_SOLID, 2, RGB(0,0,0) ) )
{
// Select it into the device context
// Save the old pen at the same time
CPen* pOldPen = pDC->SelectObject( &penBlack );

// Draw with the pen
pDC->MoveTo(...);
pDC->LineTo(...);

// Restore the old pen to the device context
pDC->SelectObject( pOldPen );
}
else
{
// Alert the user that resources are low
}
}

382:デフォルトの名無しさん
07/02/08 17:24:47
URLリンク(forums.belution.com)
メモリ上のDCは元に戻すべきか?

383:デフォルトの名無しさん
07/02/08 17:24:47
>>380
URLリンク(msdn2.microsoft.com)
>An application should always replace a new object with the original, default object after it has finished drawing with the new object.

384:デフォルトの名無しさん
07/02/08 17:28:50
げ、マルチか

385:デフォルトの名無しさん
07/02/08 18:10:14
だな
スレリンク(tech板:200-番)

386:デフォルトの名無しさん
07/02/08 18:56:26
>>379
VS2005でソースみてみな

387:デフォルトの名無しさん
07/02/08 20:16:15
プログラムからtabindexの設定をするには?

388:デフォルトの名無しさん
07/02/08 20:20:28
>>369>>379
C/C++の標準規格としては"rw"なんてありません。
標準で認められているのは"r", "w", "a", "r+", "w+", "a+"及び
それにバイナリモードのbを2-3文字目(+とは順不同)に入れたもののみです。
勿論Visual C++はViusal C++で色々と独自に拡張はしていますが。

389:デフォルトの名無しさん
07/02/10 17:51:19
WinSockでhttpsを扱えますか?

390:デフォルトの名無しさん
07/02/10 18:07:09
扱えるかどうかと言えば扱える
ソケットとプロトコルは関係ない
要はアプリケーションがWinSockを使ってSSL通信できるように作ればいい

391:デフォルトの名無しさん
07/02/10 18:49:44
>>390
ありがとうございます少し調べてみます

392:デフォルトの名無しさん
07/02/11 01:39:25
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
で聞いたらスレ違いという事でここでオナガイシマス
VC6ですCtrl + Fで検索ダイアログを開いた時過去に検索した文字が出せますが
便利ですが間違えた検索単語を間違えたときの文字も残っています
一度まっさらにするにはどうしたら良いですか?

393:デフォルトの名無しさん
07/02/11 06:19:07
パソコン初心者だろうか?

394:デフォルトの名無しさん
07/02/11 09:42:36
WinFormsのTextBoxで、
テキストの行がコントロールからはみ出たら最終行がきちんと見えるように
オートスクロールさせたいのですが
デザイナ内にもそれらしき設定はなさそうですし、
マニュアルでプロパティを調べてもそれっぽいものが見当たりません。
どうしたらいいでしょうか?

AutoScrollOffsetってのがそうですか?
なんかPointでスクロール先を指定するみたいですが、
もしこれがそうなら使い方が良く分からないので教えてください。

395:394
07/02/11 10:10:49
とりあえず格好悪いですが
textBox->SelectAll();
textBox->ScrollToCaret();
でできました。

396:デフォルトの名無しさん
07/02/11 12:27:54
ヒント
・オートスクロールが有効になっている場合、自動的にキャレットのある位置が表示されるようにスクロールされる
・TextBox::SelectionStartが現在のキャレットの位置

397:デフォルトの名無しさん
07/02/11 14:46:27
392ですがどうしたら消せる?


398:デフォルトの名無しさん
07/02/11 15:02:24
レジストリ辺りにでも保存されてるんじゃねーかな。
もしくは再インストール。

399:デフォルトの名無しさん
07/02/11 23:32:04
Lap[Count - 1] + Step >
(Lap[Count] = GetTickCount())
);/* case 2: の timeGetTime の部分*/
Stepが0以外だとStepに関わらず、このループを抜けるのに15ms以上もかかってしまいます。(Lap配列の数値を見て)
最初のtimeGetTimeの10万回ループは47msで遅いわけでもないですし、そもそもtimeGetTimeだとうまく動くのです。
どうしたらよいのでしょうか。


400:デフォルトの名無しさん
07/02/11 23:43:08
いったいそれのどのあたりがループなんだ?

401:399
07/02/11 23:50:06
>>400
ソースはってませんでした。

URLリンク(deaikei.biz)
pass:cpp

#pragma comment(lib, "winmm.lib")を追加したら、
timeGetTime()とGetTickCount()の両方でうまく時間が出てこなくなってしまいました。

元に戻してもダメなので、ビルドする度に違うのかもしれません…

402:デフォルトの名無しさん
07/02/12 00:07:11
まず、ビジーループ氏ね
それに、timeGetTimeのNTでの規定精度は「5ms以上」
ついでに、強制コンテキストスイッチの間隔もある。

403:399
07/02/12 00:29:54
>>402
試しに比較したかっただけなので、ループの方は勘弁してください。
timeBeginPeriodで精度を1msに調整しても結局GetTickCountで同様の症状になってしまいます。
コンテキストスイッチの待ち時間は10msを超えるようなものでしたっけ?

404:デフォルトの名無しさん
07/02/12 02:17:41
GetTickCountのヘルプ読んだか?
家のPCだと100ns単位で156250、約16ms程度の解像度だぞ。

405:デフォルトの名無しさん
07/02/12 08:24:06
普通1/60秒だからそんなもんだね。

406:399
07/02/12 19:24:33
>>404-405
ようやく理解できました。
Sleep(0)ループのようにタイマー割り込みを待つのですね…
GetSystemTimeAdjustmentで測ってみたら15.625msでした。

407:デフォルトの名無しさん
07/02/13 12:47:54
CString型のメンバ変数strに文字列をいれていたのに
突然中身がなくなるというかデバッグ時にみると不適切なptr
となってアドレスは0を指しているようでした

関数から関数を呼び出してさらに関数をよびだしていきどんどん奥にいくと
この現象が起きたのですが
これはスタックオーバーフローというものですか?
解決策を教えてください

408:デフォルトの名無しさん
07/02/13 12:49:09
>>407
関数一個ずつ丹念にデバッガで追っていくのが無難かな。
スタックオーバーフローにしろ領域破壊にしろ、どっかで誰かがなんかやってるだろうから。

409:デフォルトの名無しさん
07/02/13 13:00:34
>>408
ありがとうございます!!
strncpyで領域破壊を起こしていました

すごく助かりました!!

410:デフォルトの名無しさん
07/02/13 14:14:12
私はもともとC++Builder出身なのですが
VB6で、あるアプリを作成しています。

このアプリは、主処理のほとんどが
MS.NET Framework1.1 VC++.NET
で生成されたDLLで行われています。

このDLLをステップ実行やインスペクタでデバグしたいのです
が、親アプリがVBなので、どうやってデバグしたら良いやら
困り果ててます。

どなたかVC++のDLLのデバグ方法を伝授してください…
できれば簡単なやつで。

411:デフォルトの名無しさん
07/02/13 14:50:21
ソースとデバッグ版DLLとpdbファイルがあればおk

412:デフォルトの名無しさん
07/02/13 14:54:59
ソース、デバッグ版DLL、pdbファイルあります!
もちょっとだけ具体的に教えてもらえないでしょうか…

413:デフォルトの名無しさん
07/02/13 15:32:24
それって開発環境そのまま?
途中で止めてアタッチする手もあるが、環境あるなら
DLLのデバッグ開始すると、実行時にEXE指定しろって言ってくるから
それでそのEXE指定すればいいと思う。
デバッグしたいとこはブレークポイント設定しておけばいいし。

414:デフォルトの名無しさん
07/02/13 15:35:06
もしVB側もデバッグしてるのなら、関数呼び出し時にステップインで
DLLとPDBが同じとこにあればソースの場所聞いてくると思うので
そこでソース選べば追えると思うけど、、、

VB呼び出しはもしかしたら違うかもしれん、、、
C/C++からの呼び出ししかやったことないんで。
もしだめなら試すから言ってくれ

415:デフォルトの名無しさん
07/02/13 18:25:23
>>413-414
丁寧なご回答ありがとうございます。
でもまだちょっと分かってないです…

DLLですが、メイク時に実行すると
「ActiveXコントロールテストコンテナ」というのが
出ます。
これかのことか!?と思ったのですが、EXE指定はできないっぽいです。

>>414さんの方法は今がんがってる最中です…

416:デフォルトの名無しさん
07/02/13 20:56:40
質問です。
学校で使っている描画のプログラム(?)をVC++6.0で使いたいと思い、
ヘッダーファイルとライブラリファイルを
Microsoft Visual Studio\VC98 のIncludeフォルダとLibフォルダにそれぞれ入れ、
プログラムをコンパイルしたのですが、

warning LNK4003: ライブラリの形式が無効です; ライブラリは無視されます

とエラーになってしまいます。
これと同様のことをBCC5.5でしても問題ありませんでした。
何か間違っているところがあれば是非教えてください。

417:デフォルトの名無しさん
07/02/13 21:01:20
ライブラリがBCC用なんだろ。

418:418
07/02/13 21:40:29
>>417
Win32 Static Libraryでプロジェクトを作りそこにライブラリソースを追加しビルドしました。
そしてできたライブラリファイルで再び試してみると、

ライブラリの形式が無効です  このエラーはでなくなりましたが、
LNK2001 :外部シンボル"関数名"は未解決です  このエラーは消えませんでした。

ライブラリファイルの作り方もよくわからなかったのですが合っているでしょうか?


419:デフォルトの名無しさん
07/02/13 21:41:53
"関数名"が、そのライブラリに入っているべきものなら、
どっか、あってないんだろ。

420:デフォルトの名無しさん
07/02/13 22:36:39
.NETでダイアログベースで作ってます。
CRectとGetWindowRectを使用して自身の座標を得ることはできたのですが
自身と関係ないWindowの座標を得る場合にはどうしたらいいんでしょうか?


421:デフォルトの名無しさん
07/02/14 00:22:20
GetWindowRectだな。

必要とするウィンドウのハンドルを取得するべし。。
.NET Frameworks だけじゃ無理な気がしたので、WinAPI を使いましょう。

422:デフォルトの名無しさん
07/02/14 12:19:22
エディットコントロールにintの中身を表示させるにはどうしたらいいんですか?
文字列は"”でできました。
変数だけ書いたらエラーでました。

423:デフォルトの名無しさん
07/02/14 12:33:45
釣れますか?

424:デフォルトの名無しさん
07/02/14 14:47:48
編集制御->文字列 = 文字列にな〜れ(数値);

425:デフォルトの名無しさん
07/02/14 16:27:57
>>420
なぜ.NETでCRectとGetWindowRectが出てくる?

426:デフォルトの名無しさん
07/02/14 17:05:59
VC6.0でベースがDIALOGか、SDIで出力結果をDOS窓に出す方法はあるんですか。
はじめからDOS窓アプリにしないとだめですか?


427:デフォルトの名無しさん
07/02/14 17:13:21
AllocConsole?

428:デフォルトの名無しさん
07/02/14 17:18:42
VC++プログラマーちょっとこい!!
スレリンク(news4vip板)

429:デフォルトの名無しさん
07/02/14 17:31:05
CTypedPtrList<CObList, VALUE*>のSeqValueListを
CTypedPtrList<CObArray, VALUE*>にする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}

430:426
07/02/14 17:36:11
AllocConsole();
freopen("con", "w", stdout);
printf("hello console\r\n");
//FreeConsole();
でできました。すみません。

431:デフォルトの名無しさん
07/02/14 17:54:01
エディタの背景を黒にカスタマイズしたいのですが、どこにもそんな項目がありません
ちなみにヴァージョン6.0です

432:デフォルトの名無しさん
07/02/14 18:57:23
エディター?IDEのかな?
ツールのオプションの書式の背景でない?

433:420
07/02/14 21:14:12
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
ってところでpointに入っててrectはサイズを知りたくて使ってただけでした、すみません。

クライアント座標はpointに入ってたのですがスクリーン座標を知るにはどうしたらいいんでしょうか?
SetCapture()でクライアント領域外の座標は得れたんですがクライアントが中心になってしまっています。
よろしくお願いします。

434:デフォルトの名無しさん
07/02/14 21:20:59
ClientToScreen

435:420
07/02/14 22:51:21
>>434
できました、

436:420
07/02/14 22:56:32
できました、ありがとうございます!

437:デフォルトの名無しさん
07/02/14 23:09:02
>>433
それどうみても.NETでない。

438:デフォルトの名無しさん
07/02/14 23:33:46
俺たちはとんでもない勘違いをしていたようだ
.NETとは、Visual Studio .Net 2003の省略形だったんだよ!

439:デフォルトの名無しさん
07/02/15 00:04:24
2002 のことも忘れないで上げてください。

440:420
07/02/15 00:06:40
まさしくVisualStudio.Net2003の事です。

.NETとは違ったんでしょうか・・・すみません;

441:デフォルトの名無しさん
07/02/15 00:09:27
な……なんだってー!!
……職場にもいるけどな、そういうヒト。
さらにVisual Studio 2005のことも「ドットネット」って呼んでくれるから、
毎回頭の中で翻訳するのが大変。
例「C++でデバッグしていてドットネットが落ちるんだよな〜」「???」

442:デフォルトの名無しさん
07/02/15 00:41:29
>>440
.NETと言ったら普通.NET Frameworkのことを指す。

新規プロジェクトの中に.NETとか書かれたテンプレートがあるだろ。
それが.NET Frameworkを使うプロジェクトを作るのに使うテンプレート。

.NET Frameworkには大量のクラスライブラリが含まれているし、
Visual Studioではフォームエディタも使え、作るほうとしては充実しているが、
利用者に.NET Frameworkをインストールしてもらわないといけないのが、
一般的なアプリケーション開発ではネック。
XP SP2あたりから漏れなくインストールされるようになってきているけどね。

443:デフォルトの名無しさん
07/02/15 10:44:29
Vistaで、インストールされているWindowsコンポーネントを確認すると
.NET Frameworkっていうのがあった。

言い方が良くわからないけど、つまり.NETというのは単なる1つのAPI
ってことで、開発環境を指しているのではない、ということ?

444:デフォルトの名無しさん
07/02/15 10:57:02
>>443
.NETの環境向けに開発できるのが、VS .NET

445:デフォルトの名無しさん
07/02/15 11:04:02
初心者の場合は自分勝手な略語を使わないできちんと書けばいい
ハードディスクのことをハードと呼ぶやつとか
本人はどういうつもりか知らんけど馬鹿にしか見えない。

446:デフォルトの名無しさん
07/02/15 11:05:21
なるほど…。
Visual Studio .NETというのは、.NET Frameworkがインストールされている
端末向けの開発環境、ということか。

Windows Vistaには標準で.NET Frameworkがインストールされているけど、
XPはSP2を入れないと.NET Frameworkが入っていないから、
そういう端末を対象とするなら.NET Frameworkが入っているかいないかを
確認しなければならないということか。

447:デフォルトの名無しさん
07/02/15 11:10:29
Visual Studio .NETという名前だと .net専用と間違える人が多すぎるから
Visual Studio .NETという名前は使われなくなった。

448:デフォルトの名無しさん
07/02/15 11:15:08
あ、俺も以前、ずっと勘違いしてたw
.NETというくらいだからネットワーク=インターネット専用なんだろうな、俺には
関係ないなと…w



449:デフォルトの名無しさん
07/02/15 14:39:24
逆にVisual Basicは2005でも.NETを付けておけば良かったのにと思う。
「Visual Basic .NET」 2005という具合にさ。

450:デフォルトの名無しさん
07/02/15 22:37:51
Visual Stadio2005 をインストールして
VS2005 C++で
#include <stdio.h>
main()
{
int a;
}
をコンパイルすると
error C4430: 型指定子がありません - int と仮定しました
が出ます
今まではいけてたんですが、わかる方お願いします。


451:デフォルトの名無しさん
07/02/15 22:55:09
int main(){
}

452:デフォルトの名無しさん
07/02/16 01:11:53
関数の戻り値の型を省略できるのはCだけ。

たぶん拡張子をcにしたり、コンパイルオプションから/TPを外したりすれば、
(int抜きの)main()でも行けると思う。

453:デフォルトの名無しさん
07/02/16 03:40:09
stringをintにするにはどうすれば?

454:デフォルトの名無しさん
07/02/16 03:47:10
>>453
cli::String なのか std::string なのかはっきりしろ。

455:デフォルトの名無しさん
07/02/16 03:55:21
std::string

456:デフォルトの名無しさん
07/02/16 04:03:33
>>455
std::string s("123");
int i = atoi(s.c_str());

457:デフォルトの名無しさん
07/02/16 04:07:03
>>456
それができないんですよ
エラーがでます

458:デフォルトの名無しさん
07/02/16 04:08:59
エラーが出ますじゃないでしょ。
どんなエラーが出るのか言いなさいよ。

459:デフォルトの名無しさん
07/02/16 04:09:06
>>457
どんなエラーか書け

460:デフォルトの名無しさん
07/02/16 04:16:54
>>457
そんなんだから成長しないんですよ。

461:デフォルトの名無しさん
07/02/16 04:18:10
>>457
とっとと書けよ。あんぽんたん。

462:デフォルトの名無しさん
07/02/16 04:19:58
同じ奴みたいだな。夜釣りの常習犯か。
スレリンク(tech板:877番)



463:デフォルトの名無しさん
07/02/16 12:45:22
設計でUMLを使ってる人いますか?
マルチスレッドとかUMLで設計できますか?

464:デフォルトの名無しさん
07/02/16 13:17:43
UMLは詳しく知らん身だけど
アクティビティ図使えば表現できるんじゃねーかとは思う

が、とりあえずスレ違いだ。

465:デフォルトの名無しさん
07/02/17 01:16:40
VC++でゲームを作ろうと考えてるんですが、オススメの入門書等ありませんか?
何件か書店回ってパラパラと立ち読みしてみたんですがどういうのが良いのか分からなくて困ってます。
やはり実用例があるC++でゲームを作るみたいな本が良いんでしょうか。
既出、スレ違いだったらすみませんorz

466:デフォルトの名無しさん
07/02/17 11:41:49
ゲ製作技術
URLリンク(pc10.2ch.net)
板違いやな

ゲーム製作はC++だけと考えない方がいい。
どの程度の規模で何やりたいかによって、利用する言語は変わると思う。
ミニゲームであれば、HSP/Flashでも創れるし。

467:デフォルトの名無しさん
07/02/17 12:34:10
そもそもゲームって時点で入門を超えてる

468:デフォルトの名無しさん
07/02/17 12:41:30
初等教育 算数
教養課程 数学 物理 C/C++
専門課程 ゲーム製作

469:デフォルトの名無しさん
07/02/17 16:22:37
今、Visual C++ の入門書を探しています。
Cの文法は一通り理解しています。
本格的にWindowsプログラミングができるようになりたいので、
これから勉強を始めるつもりです。

数年前、ある先生から、
「Winアプリケーションを作れるようになるためには、
 まずはWinAPIを理解→オブジェクト指向を理解→MFCを使ったプログラミング」
というような段階を踏んで勉強していくといい、と聞きました。
勧められた本が、山本信雄の「はじめてのプログラミング」(全3巻)で、
ほぼ上記の説明通りの構成で書かれている本らしいのですが、アマゾンで見てみたら
残念なことにこの本はVisualC++5.0/6.0向けらしいです。
現行のVC++2005は、6.0から「かなり変わった」と聞いているので、別の本を
買うしかないと思っています。

「2005になって、.NetFrameWorkのクラスを利用するプログラミングに変わって..」
と聞いても、私にはまだよくわからないのですが、前記の「API→オブジェクト指向→MFC」
という学習の進め方自体も、2005になってだいぶ変わったのでしょうか。
多少時間がかかっても構わないので、なるべく体系だった学習ができるような
入門書がいいのですが....

ちなみに最終的に作りたいものは、周辺機器のデバイスドライバのたぐいです。

もし色々な本を読んでいる方がおられましたら、よろしくお願いします。


470:デフォルトの名無しさん
07/02/17 17:09:09
Winアプリとデバイスドライバだとあんまり関連性ないよ

471:469
07/02/17 17:36:27
>470
すみません。「デバイスドライバ」という書き方では不十分でした。

周辺機器は、光学センサや超音波センサで空間把握をするための装置です。
通信されてきたデータをPC画面上でグラフィカルにモニターするためのWinアプリを
作りたいと思っています。そして、ドライバ周りも一緒にC++でコーディングできればと
考えています。


472:デフォルトの名無しさん
07/02/17 18:01:43
VisualC++2005なら5.0/6.0でできてた事はできるよ。
2005で「API→オブジェクト指向→MFC」という学習の進め方もできる。
かなり変わったというよりは、かなり機能が追加された。

473:465
07/02/17 18:34:36
>>466
少し探したのですが見つからなかったので助かりました。
そちらの方で聞いてみます。誘導ありがとうございました。

474:デフォルトの名無しさん
07/02/17 18:36:05
expressでapiの場合は
リソースエディタやクラスウィザードとか使わないだろうし
2005の本にこだわる意味はないだろうね

475:デフォルトの名無しさん
07/02/17 19:20:02
VCは初心者向きじゃないから嫌ならVBやC#を使えということだな

476:デフォルトの名無しさん
07/02/17 19:43:12
>>469
COMポートで繋ぐ程度ならデバイスドライバは要らない。
独自のカード経由&そのカードが仕様書しか無い、って話なら別だけど。
で、一つ言っておくなら「オブジェクト指向とMFCは一切関係が無い」。
MFCはWinAPIを手を抜いて使うためのラッパ。
あと、VC6のソースが2005で動かない病に良く効く呪文。
プロジェクト - プロパティ - 構成プロパティ - 文字セット - マルチバイト文字セットを使用する

477:デフォルトの名無しさん
07/02/17 21:47:28
VC++.NET2003 でWindowsフォームアプリケーションを作っています。
以前コンソールアプリケーションで作成した、Mysqlのクライアントプログラムを
利用したいと考えていますが、mysql.hを追加すると下記のエラーが出ます。
mysql.hは利用できますか?



Open.cpp
WINVER not defined. Defaulting to 0x0501 (Windows XP and Windows .NET Server)
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2146: 構文エラー : ';' が、識別子 'fd' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::SOCKET' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(188) : error C2501: 'st_net::fd' : 識別名を宣言するのに、型が指定されていません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2065: 'SOCKET' : 定義されていない識別子です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(358) : error C2146: 構文エラー : ')' が、識別子 's' の前に必要です。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\mysql\mysql_com.h(359) : error C2059: 構文エラー : ')'


478:デフォルトの名無しさん
07/02/18 03:29:49
C++builder5.0で、なんかの画像コンポーネントに、今手元にある
無毛でくっきり縦線・超美少女小学生のヌード写真(jpg)を貼り付
けたいのですがどうすればいいのかわかりません。

ウインドウの大きさと同期して画像のサイズも変わるようにしたい
です。誰か教えてください。

479:デフォルトの名無しさん
07/02/18 03:45:06
>>478
まず、その素敵な性癖を直せ。
話はそれからだ。

480:デフォルトの名無しさん
07/02/18 07:36:09
まず、その素敵な写真をうpれ。
話はそれからだ。

481:ぶいしー
07/02/18 16:39:58
DLLのリソースIDについて質問させてください。

拡張DLL、レギュラーDLLともに、
呼び出すクライアントとのリソースIDの重複は気にするのでしょうか?
あるサイトだと、拡張DLLはリソースIDの管理はMFCがやってくれる
みたいなことがかかれていたので・・

どなたかご教授ください。


482:デフォルトの名無しさん
07/02/18 17:41:31
>>477
#include <mysql.h>の前に、#include <winsock.h>。もれはこれで
3ヶ月ほど悩んだ。


483:デフォルトの名無しさん
07/02/18 20:57:18
Visual Studio 2005なんですけど
SystemParametersInfo(SPI_SETDESKWALLPAPER,NULL,"c:\\a.bmp",0);
でコンパイルはいけるんですが、ソリューションのビルドで
エラーになります
"c:\a.bmp"でもだめです
Vistaでもいけますよね?
解る方お願いします


484:デフォルトの名無しさん
07/02/18 20:59:14
>■質問するにあたって
>・エラーや警告のときはエラーメッセージを書きましょう。


485:デフォルトの名無しさん
07/02/18 21:21:25
>>483 です
エラーが多いんで伏せてました

リンクしています...
aaa_ch.obj : error LNK2028: 未解決のトークン (0A000022) "extern "C" int __stdcall
SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z) が関数 "
int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
aaa_ch.obj : error LNK2019: 未解決の外部シンボル "extern "C"
int __stdcall SystemParametersInfoW
(unsigned int,unsigned int,void *,unsigned int)"
(?SystemParametersInfoW@@$$J216YGHIIPAXI@Z)
が関数 "int __cdecl main(void)" (?main@@$$HYAHXZ) で参照されました。
E:\C++\aaach\Debug\aaach.exe : fatal error LNK1120: 外部参照 2 が未解決です。

以上です、お願いします。


486:デフォルトの名無しさん
07/02/19 11:11:35
超初歩的な質問なのですが、
MS Visual C++ .NET で、IntToStr関数を使えないので他の方法を調べてます。
値を文字列に変換するにはどうしたら良いのでしょうか?


487:デフォルトの名無しさん
07/02/19 11:15:20
マネージプログラムならメソッドのToString
そうでなければ、boost::lexical_cast、std::(basic_)ostringstream、std::sprintf (_stprintf)と続く

488:デフォルトの名無しさん
07/02/19 11:24:28
>>487
下の方法でできました!親切な回答ありがとうございます。

int a=100;
label1->Text = a.ToString();

489:デフォルトの名無しさん
07/02/19 15:21:20
連続で申し訳ないのですが、また質問があります。

別の人が作ったソースで下のようにオーバーロードされた関数があるのですが、
この2つの違いって何なんでしょうか?

CRect hoge(CRect & r) const
{
  :
  :
}

CRect hoge(CRect const & r) const
{
  :
  :
}

490:デフォルトの名無しさん
07/02/19 15:39:02
>>485
必要なライブラリリンクしてないんじゃね

491:デフォルトの名無しさん
07/02/19 15:40:04
>>489
中味は同じでもかまわない
コンパイラが区別できればそれでいい

492:デフォルトの名無しさん
07/02/19 15:42:38
>>489
constの有無。
特にconstな参照は右辺値を受け取れるので、
実質的にその多重定義は右辺値か左辺値かで振り分けられる。

493:デフォルトの名無しさん
07/02/19 16:11:30
>>492
右辺値、左辺値とは何を指していますか?
この例だと引数は「r」1つだけなので右辺・左辺関係ないように思えます。

あと & についてですが、& をつけると、変数の値を変更すると
呼び出し元のスコープでもそれが変更される、という風に単純に考えています。

これに const が付くということに矛盾も感じます。
const とは、「この引数は変更不可です」という宣言だと思うのですが、
だとすれば、引数を & で渡す意味がないことになります。

このソース、バグ持ちでしょうか?

494:デフォルトの名無しさん
07/02/19 16:25:50
ここはC++相談室じゃないし
くだらない質問は遠慮してほしいな

495:デフォルトの名無しさん
07/02/19 16:34:28
>>493
お前が馬鹿なだけだからVCやるまえにC++勉強してこい

496:デフォルトの名無しさん
07/02/19 17:03:54
>>494-495
わかりました…
ありがとうございます

497:デフォルトの名無しさん
07/02/19 18:35:13
そもそも右辺値、左辺値はC言語の初歩

498:デフォルトの名無しさん
07/02/19 19:53:10
>>496
あきらめるなな。最初は分かんないことばかりなんだから。

499:デフォルトの名無しさん
07/02/20 22:01:04
すみません。
プロジェクトのプロパティで、
ランタイムライブラリについての設定周りで質問なのですが、

今/MDでビルドすると上手く行くいき、/MTにしたところ
ヒープの破壊が発生するといった状況になりました。
プロジェクトには自前のDLLを使ってます。
URLリンク(support.microsoft.com)
ここにあるとおり、CRTオブジェクトの操作の不備が原因であると
分かりました。

それで質問なのですが、
多くの場合の開発では/MTと/MDどちらを使用するのでしょうか、
/MDの方が、容量が小さくなるし、CRTobjも共有できるようですが、
Cランタイム等がインストールされている必要があります。
/MTだと、ランタイムがインストールされていなくても動作
するようですが、容量が大きく、CRTobjが共有できないようです。

どっちもどっちなのですが、やはり/MDが主流なのでしょうか?

500:デフォルトの名無しさん
07/02/20 22:13:29
何の目的か知らないけど、とくに必要感じなかったらデフォのままで
あとここは初心者スレだし

501:デフォルトの名無しさん
07/02/20 22:22:00
VC++ というよりはC++の話かも知れませんが教えてください。

CStirng s;
testFunc(&s);

void testFunc(CString s)
{ CString tmp("test"); (*s) = tmp; }

とやると s の値が呼び出し元でも変更されていて、

CString *s;
testFunc(s);

void testFunc(CString *s)
{ CString tmp("test"); s = &tmp; }

とやると変更されていないのはなぜでしょう?

Cのイメージからいくと上の方が変更されずに下で変更されるような気がするのですが・・

502:デフォルトの名無しさん
07/02/20 22:30:08
int *p;
testFunc(p);

void testFunc (int *p)
{ int tmp=1; p=&tmp; }

503:499
07/02/20 22:48:00
あ、スレ違いすみません。
他スレに投げてきます。


504:501
07/02/20 22:50:22
>>502
すいません。勘違いしていました。
その通りですね。

505:デフォルトの名無しさん
07/02/20 22:52:04
上のやつもあんまり見ない使い方だな
受けたい場合はこういう風に使うのが普通

void GetWindowText( CString& rString ) const;

506:デフォルトの名無しさん
07/02/20 22:56:30
素直にCString返せよ。

507:デフォルトの名無しさん
07/02/21 00:08:53
それはどうよ。
んまぁ今のCPUじゃ一瞬だろうけどな…

508:デフォルトの名無しさん
07/02/21 01:33:29
CStringは参照カウント使ってるから、大したオーバーヘッドじゃないよ。

509:デフォルトの名無しさん
07/02/21 06:19:25
オーバーヘッドな気もするけどMFCもこんなことやってるな

CString CListCtrl::GetItemText(int nItem, int nSubItem) const
{
ASSERT(::IsWindow(m_hWnd));
LVITEM lvi;
memset(&lvi, 0, sizeof(LVITEM));
lvi.iSubItem = nSubItem;
CString str;
int nLen = 128;
int nRes;
do
{
nLen *= 2;
lvi.cchTextMax = nLen;
lvi.pszText = str.GetBufferSetLength(nLen);
nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,
(LPARAM)&lvi);
} while (nRes == nLen-1);
str.ReleaseBuffer();
return str;
}

510:デフォルトの名無しさん
07/02/21 09:41:27
CStringのコピーは、ポインタコピー + αくらいのオーバーヘッドでしょ。

511:デフォルトの名無しさん
07/02/21 16:45:09
失礼します。
MS Visual C++ .NET にて質問なのですが、テキストボックスのフォントを

textBox1->Font = new System::Drawing::Font("MSゴシック", 10);

このように変更できますが、new しっぱなしで構わないのでしょうか?
また、

textBox1->Font->Name = "MSゴシック";
textBox1->Font->Size = 10;

このように変更できないのでしょうか?
よろしくおねがいします。

512:デフォルトの名無しさん
07/02/21 16:48:36
>>511
1) コントロールに割り当てると、うまく壊すタイミングがないからGCに任せるといい。
2) 読み取り専用プロパティだから無理。

513:511
07/02/21 18:33:41
>>512
ありがとうございます。
でも分からないことだらけで死にそうです…。
ビルダーだったら簡単なのに…。とりあえず以下のように拡張しました。

  // フォント情報生成
  CString  fontName = dlg.GetFaceName();
  int    fontSize = dlg.GetSize()/10;
  COLORREF  fontColor = dlg.GetColor();

  // BOLD と ITALIC
  int fontStyle = 0;
  if(dlg.IsBold() ) fontStyle += (int)FontStyle::Bold;
  if(dlg.IsItalic()) fontStyle += (int)FontStyle::Italic;

  // セット
  textBox1->Font = new System::Drawing::Font(fontName, fontSize, (FontStyle)fontStyle);

なお new を gcnew にすると
error C2065: 'gcnew' : 定義されていない識別子です。
とエラーが出ます。
これは何故なのでしょうか?

514:デフォルトの名無しさん
07/02/21 19:33:37
言語が違うからだろう。

Visual Studio .NET 2002 / 2003
-> Managed C++

Visual Studio 2005
-> C++/CLI

おそらく2003あたりなんだろうけど、
開発環境は "MS Visual C++ .NET" なんて略さず、確り書くべき。

515:デフォルトの名無しさん
07/02/21 19:46:08
マネージドC++ではマネージクラスをnewすると漏れなくGCの管理下に置かれる。

それはともかくこのほうがいいと思う。
FontStyle fontStyle;
if (dlg.IsBold()) fontStyle |= FontStyle::Bold;
if (dlg.IsItalic()) fontStyle |= FontStyle::Italic;

516:デフォルトの名無しさん
07/02/21 22:37:04
.NET 2003でWinsockを使いたい場合どうすればいいのでしょうか?

プロジェクトを作る場合にチェックボックスで指定出来るのは後から
知ったのですが、これを忘れた場合どうすればよいのでしょうか?
ws2_32.lib のリンクなどが必要だと思うのですが、VC++6.0とは
リンクの仕方が変わっているようで分かりませんでした。

517:デフォルトの名無しさん
07/02/21 22:50:37
プロジェクトを作る場合にチェックボックスで指定した場合
プロジェクトを作る場合にチェックボックスで指定しなかった場合
2種類つくってどこが違うか比較

518:デフォルトの名無しさん
07/02/21 22:58:45
/LIBPATH

をmsdnで調べましょう

519:デフォルトの名無しさん
07/02/21 23:12:26
>>482
有難うございます、解決できました。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4328日前に更新/201 KB
担当:undef