★初心者にVisual C++を教えるスレ★ Part25at TECH
★初心者にVisual C++を教えるスレ★ Part25 - 暇つぶし2ch577:デフォルトの名無しさん
07/02/27 18:44:27
メンバ変数の登録がちゃんとできてない。
もう一度やり直してみるといい。
対象のボタンを右クリックして「メンバ変数の追加」、
んでコントロール変数として適当なのを追加。

578:570
07/02/27 18:52:14
>>576
>>577
了解しました。
もう一度見直してみます。

579:デフォルトの名無しさん
07/02/27 19:50:05
roopoutには確実にFALSEがはいっているのに

if(roopout==FALSE)
break;
else
....

が機能しませんが環境によってそういうことがあるのですか?
デバッグしながら確実に中にはいってるものを確かめましたがelseのほうにいきます

580:デフォルトの名無しさん
07/02/27 19:56:06
FALSEとfalseは違うんじゃなかったっけ
if (!roopout) とか書いた方が安全

581:デフォルトの名無しさん
07/02/27 19:57:12
それかifの後ろのどっかに変なセミコロンが紛れ込んでいて
条件式が真の場合にただの空行を実行してるとか

582:デフォルトの名無しさん
07/02/27 19:57:24
やってみます

583:デフォルトの名無しさん
07/02/27 20:03:07
ifとelseの間がbreakだけなので、ステップ実行で確認したときあたかも素通りしたように
見えるだけなんじゃない?

584:デフォルトの名無しさん
07/02/27 20:06:22
ではなぜelseの処理に

585:デフォルトの名無しさん
07/02/27 20:06:35
2005から始めた初心者はかなりきつい状態だろうな
本もサイトも全然ないもんな……

586:デフォルトの名無しさん
07/02/27 20:21:12
実は
if(roopout=FALSE)
と書いていた。

587:デフォルトの名無しさん
07/02/27 20:23:05
それに気付かなくてえらい苦労をした経験から、
条件文は必ず定数を先に書くことにしてる
if(200 == myIQ) みたいな

588:デフォルトの名無しさん
07/02/27 20:29:16
今時それくらいは警告を出すから、わざわざナンセンスな書き方をする必要など無い。

589:デフォルトの名無しさん
07/02/27 20:39:44
そんな書き方してません
再起動したりしたら動きました

590:516
07/02/27 21:44:56
ありがとうございました。
テキストファイルを見比べてみて同じようにすれば出来ました。

VC++6.0のSDKのときはライブラリをリンクして winsock2.h をインクルードして
たんですが、今回、2003のMFCの場合、ヘッダをインクルードして後はちょこちょこっと
関数を呼び出しているだけでライブラリのリンクは特にしていないように思えました。
良く分からなかったのですが、とにかく出来ました。

591:デフォルトの名無しさん
07/02/28 01:23:13
>>588
VCだと警告されない罠。
gccでは文句言われるので、そっちに合わせた書き方してるけど。

592:デフォルトの名無しさん
07/02/28 01:51:43
warning C4706: 条件式の比較値は、代入の結果になっています。

593:591
07/02/28 02:46:30
ありゃ、見逃してた。ひゃくにんいっちゅの所為かorz
安全性考えると、pragmaか/wオプションでレベル下げとくのもありかなあ。

594:デフォルトの名無しさん
07/02/28 14:56:39
if(FALSE == flag)
みたいに定数を先に書くソースを見ると身震いするほど嫌悪感を抱くのは俺だけ?

595:デフォルトの名無しさん
07/02/28 15:09:53
一度精神科を受診することをオススメする。

596:デフォルトの名無しさん
07/02/28 15:43:04
>>594
初めて見た。

597:デフォルトの名無しさん
07/02/28 17:00:54
>>594
オレも。

598:594
07/02/28 17:09:35
>>595
ちょっと受診してくるから良い病院を紹介してくれ

599:デフォルトの名無しさん
07/02/28 23:18:59
URLリンク(www.kouno.jp)

600:デフォルトの名無しさん
07/03/01 00:39:08
打ちそこねで=を一つ落とすことはあっても
うっかりしてリテラルと変数を逆に書くなんてことはない。

601:デフォルトの名無しさん
07/03/01 08:11:35
>>600
そりゃいないだろ
わざと逆にやってんだから

602:デフォルトの名無しさん
07/03/01 10:24:23
プログラムを文章として読むと、それが気持ち悪いんだよね。
文章のように読めるプログラムを理想としてるのがわるいのかなあ。

603:デフォルトの名無しさん
07/03/01 11:20:23
>>602
そうそう。たとえば、
if( a == 100 )
だと、頭の中で「a は 100 か」と読める。

でも
if( 100 == a )
だと、「100 は a か」と読んでしまう。
主題が a ではなくなってしまい、思考が後戻りしてしまう感覚が
あってなんかイラッとする。

604:デフォルトの名無しさん
07/03/01 11:27:04
デバッグの停止ボタンを押すとデバッグ中のプログラムは停止しますが
解放処理等はちゃんと行われているのでしょうか?

605:デフォルトの名無しさん
07/03/01 12:04:11
>>604
行なわれるものと行なわれないものがある。

606:デフォルトの名無しさん
07/03/01 12:09:02
C言語で
#include <stdio.h>

int main(void)
{
printf("こんにちは\n");
return 0;
}

って書いたプログラムってそのままC++で実行できる?
それとも
#include <iostream>
using namespace std;

int main()
{
cout << "こんにちは" << endl;
}
って書かなきゃだめ?

607:デフォルトの名無しさん
07/03/01 12:10:41
そのままできるのがC++の強み

608:デフォルトの名無しさん
07/03/01 12:16:52
正しくは#include <cstdio>

609:デフォルトの名無しさん
07/03/01 12:18:10
>>607
そうなんですか~ ありがとうございます。
はじめたばかりの初心者ですみません。

610:デフォルトの名無しさん
07/03/01 12:21:24
#include <cstdio> ですか。間違えました。

611:デフォルトの名無しさん
07/03/01 12:42:34
<cstdio>を使うならprintfではなく、std::printfと書かなければいけないぞ。

612:デフォルトの名無しさん
07/03/01 13:01:53
C++だからといって、cin,coutに拘る必要は無い。
とか思う俺は年寄りなんだろうな……

613:デフォルトの名無しさん
07/03/01 13:15:26
すみません。もうひとつ。

#include <stdio.h>

int main(void)
{
printf("こんにちは\n");
return 0;
}

マイクロソフトのVisual C++でやってみたところ
画面が一瞬出てからすぐ消えちゃうんですがどうすればいいでしょうか?

614:デフォルトの名無しさん
07/03/01 13:16:41
こんにちは→helloに変更します。

615:デフォルトの名無しさん
07/03/01 13:22:56
>>613
Visual Studioのバージョンによるが「デバッグなしで開始」するか、
コマンドプロンプトを開いてそこから実行する。

616:デフォルトの名無しさん
07/03/01 14:15:45
>>613
何回も何回も出るな、その質問。
>>615でいいけど、デバッグしたいなら
rerturn にブレークポイント置くか、その前に getchar(); でも入れとけば。

617:デフォルトの名無しさん
07/03/01 14:23:07
>>615-616
ありがとうございます。

618:デフォルトの名無しさん
07/03/01 15:07:29
C++をCコンパイラとして使うのはやめた方が良くないか?
それは強みというより、自分の首を自分で絞めているようなもののような気がする。
stdioなんて使わずに、がんばってC++のライブラリを使用すべきなんじゃないか。
論じる次元が違うかもだけど、構造化プログラミングというパラダイムとオブジェクト
指向というパラダイムを同時に使っているような気がして、なんか嫌だ。
C++がますます煙たがれ、衰退するような気がする。

619:デフォルトの名無しさん
07/03/01 16:19:30
>>618
話が飛躍しすぎ

620:デフォルトの名無しさん
07/03/01 16:32:13
>>618
C++はそういう複数のパラダイムを使えることが強みだと
C++の作者Stroustrupも自著D&Eで言っている。

621:デフォルトの名無しさん
07/03/01 16:37:20
質問があります。
afxwin.hをインクルードしているのにも関わらず、CWndを使うと
error C2061: 構文エラー : 識別子 'CWnd'
というのが出ます。
CWndを使用するためにはafxwin.hをインクルードするだけでは足りないのでしょうか?


622:デフォルトの名無しさん
07/03/01 18:44:42
そのエラーの行を、前後数行含めてコピペしてみ

623:デフォルトの名無しさん
07/03/01 19:24:24
>>622
返答ありがとうございます。

この行が先頭に出て、他にエラーは出ません。

624:デフォルトの名無しさん
07/03/01 21:06:01
afxwin.hがあればいい

625:デフォルトの名無しさん
07/03/01 21:14:14
つまりそれ以外の原因を疑えということ

626:デフォルトの名無しさん
07/03/01 22:31:17
俺としてはcinとかcoutってそんなにいいものなのかねって思う。
C言語に変なもの持ち込んでC++を作りやがってとすら思っている。

627:デフォルトの名無しさん
07/03/02 03:05:26
> 俺としてはcinとかcoutってそんなにいいものなのかねって思う
実に便利だと思う。STLと絡めると特に。

628:デフォルトの名無しさん
07/03/02 08:40:14
ユーザ定義型を組込型と同じように入出力できるのはいいと思う。

629:デフォルトの名無しさん
07/03/02 08:46:27
VCじゃなくてC/C++の話になると書き込みが増えるのは
VCの話には参加できなくてROMってる初心者が多いということか

630:デフォルトの名無しさん
07/03/02 08:56:49
俺もストリームだけは便利さがいまだに分からん。
まあテキスト入出力自体あまりしないからかもしれん、
作るのは GUI アプリばっかだからコンソールは使わないし、
、データ保存はもっぱらバイナリだし、
設定ファイルは WritePrivateProfileString だからなあ

631:デフォルトの名無しさん
07/03/02 12:18:27
>>629
C/C++の話の方がdeepな感じがするが

632:デフォルトの名無しさん
07/03/02 13:25:30
VC6使ってる初心者が多いしVCは万年初心者が多いのか?
C/C++のベテランでも挫折するという話だし

633:デフォルトの名無しさん
07/03/02 17:22:29
いつまでたっても初心者だ

634:デフォルトの名無しさん
07/03/03 19:53:59
完全VCオンリーで語ることなんかあるのか?

635:デフォルトの名無しさん
07/03/03 20:27:38
VC固有の動作、CRTの独自拡張、MFCやATLとか

636:デフォルトの名無しさん
07/03/03 21:55:11
VCという道具について語るのが目的か?
VCという道具を使ってWindowsプログラミングをするのが目的だろ

637:デフォルトの名無しさん
07/03/03 22:58:37
API直打ちしている人はC言語のfgetsみたいにファイルから
テキストを一行取得するようなことをしたい場合は
ReadFileとかで適当なバイト数読み出して
行末を見つけて抜き出す、のようにやっているんですか?


638:デフォルトの名無しさん
07/03/03 23:38:21
人によるだろう

639:デフォルトの名無しさん
07/03/04 01:38:18
>>637
そうだよ。SDKだけでやるならね。

640:デフォルトの名無しさん
07/03/04 05:34:28
ちなみに CRT は内部で
>>637 が言ってることをやってるよ。

641:デフォルトの名無しさん
07/03/04 09:13:46
SDKオンリーだろうかCランタイムだろうがVBランタイムだろうが
自前でやるか、呼び出す関数・メソッドが内部でやるか
ただそれだけのことでしかないわな

642:デフォルトの名無しさん
07/03/04 11:49:44
641って馬鹿?意味を全く理解してないw

643:デフォルトの名無しさん
07/03/04 13:59:09
たぶんCでべたに書くのが一番効率がいい。
けど安全性とか汎用性とかもあるから既存のライブラリを使う場合もある。
どれが一番いいのか?といわれたら
自分で何種類か書いて実際試してみるしかないだろうな
自分で試さずに人に聞いたり脳内でやってるやつは使いものにならない。

644:デフォルトの名無しさん
07/03/04 18:20:21
質問です。
プロパティウィンドウからコントロールのフォントや色を変えたいのですが、
それらしい項目が見つかりません。
使っているVCのバージョンは2005なのですが、昔のバージョンは
それっぽいのがあったと思ったのですが・・・
どうやったら変更できますでしょうか?

645:デフォルトの名無しさん
07/03/04 18:30:45
もともとネェヨ

646:デフォルトの名無しさん
07/03/04 18:32:59
いちばん肝心な情報が抜けてるから

647:デフォルトの名無しさん
07/03/04 23:49:02
>>644
それはVBだ

648:デフォルトの名無しさん
07/03/06 08:50:44
VC++ やっと2003から2005に上げられたんですけど
メニューのイベント・ハンドラが変・・・・


2003ではメニューのアイテムから
イベントハンドラの追加を選ぶと、
『追加して編集』と『コードを編集』ってボタンがあって

すでにイベントハンドラがある場合は、
『コードを編集』を押すと、
ソースのその関数に飛んでくれたんだけど

2005では『追加して編集』しかないんです

これって使用なんですか?
『コードを編集』はなくなって、自分で関数を探すしかないんでしょうか?


649:デフォルトの名無しさん
07/03/06 10:19:47
「コードを編集」はある。見えないだけだろう
タブで進めてリターン押してみ
IEのバージョンは?

650:デフォルトの名無しさん
07/03/06 10:23:51
確かにIE7だと見えない。
>>649 の言うように、タブで移動して押すしかないな。

651:デフォルトの名無しさん
07/03/06 12:37:22
>>649
>>650

確かにIE7です

『追加して編集』と『キャンセル』の間が開いてて
タブで移動していって適当なところでリターンしたら『コード編集』できました

とりあえず、ありがとうございます

だけど、コード編集ボタンを直接見たり、押すことはできないんですか?

IEのバージョンを6とかに戻せばいいんでしょうか?
(戻せるのかどうかわかりませんが・・・・)

652:デフォルトの名無しさん
07/03/06 12:45:29
>>644を見て思ったんだけど
unixのmotifなんかだとあらゆるコンポーネントにほとんど同一のメンバを追加することができる。
windowsのgui開発言語もそうなればいいのに。


653:デフォルトの名無しさん
07/03/06 13:42:57
windowsのgui開発といってもVCに限定してもいろいろあるし

654:デフォルトの名無しさん
07/03/06 13:55:30
リソースエディタはリソースを編集するエディタだから、
リソースの仕様に含まれていない以上、できなくて当然とも言えるな。

655:デフォルトの名無しさん
07/03/06 14:16:21
すいません、質問があります。

MS VC++.NET2003なのですが、
画面をキャプチャする方法をどなたかご存知でしょうか。

画面全体でなくてもいいのですが、
(マウスカーソルの部分の1ドットだけでいいんですが)、
キャプチャしてそこからマウスカーソルの部分の色情報を取得したいと考えています。

よろしくお願いします。

656:デフォルトの名無しさん
07/03/06 14:27:16
マウスのイベントかなんかで
指定された座標のピクセルの RGB (赤、緑、青) 値を取得

657:デフォルトの名無しさん
07/03/06 14:38:18
デスクトップのDC取得してGetPixel

658:デフォルトの名無しさん
07/03/06 16:31:25
どうしてもうまくいかんので質問すま。

URLリンク(wwwdoi.elec.nara-k.ac.jp)
のソースを参考にDirector用のXtraを作成中なのです。
んで、ソース中の
BITMAPINFO BitmapInfo;
をヘッダに書くとその直後のCopyMemoryの箇所で落ちるのです。
何故?

ちなみに開発環境はWindowsXP+VC6.0です。

659:デフォルトの名無しさん
07/03/06 17:20:03
> 何故?
コードがおかしいから

660:デフォルトの名無しさん
07/03/06 17:30:33
ドコガオカシインダロウ・・・(;´д`)

661:658=660
07/03/06 17:32:11
ID出ないの忘れてた。

662:デフォルトの名無しさん
07/03/06 17:35:36
落ちるコードを見せろ
つーか、Copyで落ちるならサイズ間違ってんだろ

663:658
07/03/06 17:37:40
HRESULT Cam::initialize()
{
HRESULT hr;
IBaseFilter *pSrcFilter=NULL;

CoInitialize(NULL); // COMの初期化
------------------------------(中略)--------------------------------------------------
// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

// ---- キャプチャ開始 ----
pMC -> Run();
//バッファリングを有効にする
pGrab->SetBufferSamples(TRUE);
//ワンショットモードを無効にする
pGrab->SetOneShot(FALSE);

// 画像処理バッファ用メモリ確保
bufferTemp = (BYTE *)malloc(bufsize);

return S_OK;

}

664:デフォルトの名無しさん
07/03/06 17:38:56
(中略)部分は658リンク先のコードのコピペ。

665:658
07/03/06 17:41:24
ヘッダは以下。
#include <windows.h>
#include <dshow.h>
#include <qedit.h> // SampleGrabber用
#include <math.h>
#include <malloc.h>

static const GUID GUID_NULL = { 0x000000, 0x0000, 0x0000, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}};

#ifndef __ATLBASE_H__
#include <atlbase.h>
#endif

IGraphBuilder * pGraph = NULL;
IMediaControl * pMC = NULL;
ICaptureGraphBuilder2 * pCapture = NULL;
ICreateDevEnum * pDevEnum = NULL;
IEnumMoniker * pClassEnum = NULL;
IBaseFilter *pbf = NULL;
IMoniker * pMoniker = NULL;
ULONG cFetched;
IBaseFilter *pF = NULL;
ISampleGrabber *pGrab = NULL; // これらは後で解放すること

long bufsize = DEFAULT_VIDEO_WIDTH*DEFAULT_VIDEO_HEIGHT*3; //必要なバッファのサイズ
BYTE *bufferTemp = NULL;
AM_MEDIA_TYPE amt;

HWND hwnd;
BITMAPINFO BitmapInfo;
HBITMAP hBitmap;
(以下略)

666:デフォルトの名無しさん
07/03/06 17:43:19
コンピュータ名の取得の仕方を教えてください

667:デフォルトの名無しさん
07/03/06 17:43:24
// ビットマップ情報の取得 
pGrab -> GetConnectedMediaType( &amt ); 
// ビデオ ヘッダーへのポインタを獲得する。 
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat; 


ちゃんと取れてるんだろうな。
エラーチェックぐらいは当然やってるよな?

668:デフォルトの名無しさん
07/03/06 17:43:59
>>666
ぐぐれ

669:デフォルトの名無しさん
07/03/06 17:46:00
>>667
いかんせんデバッグモードみたいなのがないのですよ。orz
これがXtra開発の嫌なところで(ry

>>658のサンプルをコンパイルして実行したら普通に動くのでたぶん取れてるはず。

670:655
07/03/06 17:46:59
>>656-657
まだ確認はとれていないのですが、やってみます。
ご回答ありがとうございます。

671:デフォルトの名無しさん
07/03/06 17:54:40
せめてASSERTくらい入れとけ

672:デフォルトの名無しさん
07/03/06 17:59:29
ちなみに>>663中略以降を

// ビットマップ情報の取得
pGrab -> GetConnectedMediaType( &amt );
// ビデオ ヘッダーへのポインタを獲得する。
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

てな感じにすると普通に動くます。
だけどこれじゃBITMAP情報取れないので意味がない。orz

673:デフォルトの名無しさん
07/03/06 18:10:50
>>672
違いがわからんぞ
BITMAPINFO BitmapInfo; の場所だけか?

674:デフォルトの名無しさん
07/03/06 18:16:49
>>673
そうなのです。

675:デフォルトの名無しさん
07/03/06 18:17:22
Xtraって知らないけど663のCopy前で

BITMAPINFO tmp;
if( tmp.bmiHeader.biSize != BitmapInfo.bmiHeader.biSize)
  MessageBox(0,"勘弁してよ",0,0);

ってやったらどうなる?

676:デフォルトの名無しさん
07/03/06 18:20:27
グローバル変数なのかよ。
本来BitmapInfoは可変サイズだからそのまま宣言することは
あまりないんだが、、まあヘッダだけ欲しいならいいのか・・・

まずは、BitmapInfoのアドレスと、sizeof(BitmapInfo)を出してみ

677:デフォルトの名無しさん
07/03/06 18:21:03
あ、だめだ675は忘れて

678:デフォルトの名無しさん
07/03/06 18:21:10
>>675
「勘弁してよ!」って言われた!

・・・つまりどういうこと?(;´д`)

679:デフォルトの名無しさん
07/03/06 18:21:39
>>675
初期化してないbiSizeに意味が?

680:デフォルトの名無しさん
07/03/06 18:25:18
sizeof(BitmapInfo)を出そうとしたら落ちる・・・orz

681:デフォルトの名無しさん
07/03/06 18:26:42
BitmapInfoって名前がよくないw
何かとぶつかってんじゃないのか

682:デフォルトの名無しさん
07/03/06 18:29:52
MessageBox(0,(const char *)&BitmapInfo,0,0);
なんてのを加えたら空ダイアログが出たけどこれ壮大に間違ってますよねorz

683:デフォルトの名無しさん
07/03/06 18:34:05
正直、全体的にツッコミどころ満載。

684:デフォルトの名無しさん
07/03/06 18:35:02
そういうのは、
sprintf(str, "%X", &BitmapInfo);
とかやるもんだ

685:658
07/03/06 18:38:57
>>684
stdioは使えないのですよ。
コンソールとか開きませんし。

686:デフォルトの名無しさん
07/03/06 18:41:41
あ、使えるか。orz

687:デフォルトの名無しさん
07/03/06 18:43:51
アドレス:1000E380
sizeof(BitmapInfo):44
と出ました。

688:デフォルトの名無しさん
07/03/06 18:55:13
で、ZeroMemoryで落ちなくて
CopyMemoryで落ちるのか?

ローカルでBITMAPINFO を作ってそっからコピーしては。
とにかく、オオボケかましてる率98%だからな

689:デフォルトの名無しさん
07/03/06 19:07:42
>>688
大ボケですか・・・orz

class Cam {
BITMAPINFO BInfo;

とか宣言して

// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));
BInfo = BitmapInfo;

なんてやっても落ちます。

690:デフォルトの名無しさん
07/03/06 19:14:01
初心者スレだから言うけれど
落ちるにも色々あるんだ。

落ちた時のエラーメッセージを貼り付けるとよいかと

691:デフォルトの名無しさん
07/03/06 19:14:22
BInfo = BitmapInfo;
で落ちるのか?
落ちるというのは、その行で落ちるのか?

BInfo.bmiHeader.bfType とか、各メンバにはアクセスできるのか?

692:デフォルトの名無しさん
07/03/06 19:19:25
>>690
A fatal error has occurred. Director will quit now.
と出た後
Warning! Director is completely out of memory and
must exit immediately.
てなダイアログが出て終了しま。

693:デフォルトの名無しさん
07/03/06 19:20:18
>>691
その行で落ちるので以降アクセスできるかどうかもわかりません。

694:デフォルトの名無しさん
07/03/06 19:25:58
BITMAPINFO BitmapInfo;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
char str[100];
sprintf(str, "%X", &BInfo);
MessageBox(0,str,0,0);
printf(str, "%d", BInfo.bmiHeader.biWidth);
MessageBox(0,str,0,0);
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof(BITMAPINFOHEADER));

てな感じだと普通に動きます。

695:658
07/03/06 20:32:33
似たプログラムが手元にあるんですけどそっちは普通に動くんですよね・・・。orz

とりあえず、もうちょい一人であれこれ考えてみます。

696:デフォルトの名無しさん
07/03/07 00:09:09
どっかでスタック壊してそうな
こっちで再現できるだけのコードが無いともうわからん

697:デフォルトの名無しさん
07/03/07 09:12:52
SendInput、INPUT構造体、KEYBDINPUT構造体を使おうとしたのですが
ビルドかけると「定義されてません」とコンパイラに怒られます
windows.hはstdafx.h内でインクルードしてあり、stdafx.hもちゃんとインクルードしてます
_WIN32_WINNTの値も問題なく、#ifディレクティブの条件にも合ってます
特に定義がスキップされる要素は無いのになぜ定義されてないと出るのかサッパリわかりません・・・

何か、原因とか手がかりとかわかる方いらっしゃいませんか

698:デフォルトの名無しさん
07/03/07 10:39:38
NOUSER定義してました、とかなら殴る。
問題無いと言っている_WIN32_WINNTの値は、具体的には何だ?
stdafx.hをupした方が早いかもしれんな。
あと、とりあえずVCのバージョンは書いとけ。

699:デフォルトの名無しさん
07/03/07 10:56:52
_WIN32_WINNTだけではなくWINVERも指定しておけよ。

700:デフォルトの名無しさん
07/03/07 11:28:21
バージョンはVC++7.0です
_WIN32_WINNTは0x0500となってました
(winuser.hのSendInput周辺を囲ってる#ifは_WIN32_WINNT > 0x0400でした)
WINVERの方は覚えてないです・・・

701:デフォルトの名無しさん
07/03/07 17:59:19
質問があります。

VS.NET 2003 VC++ の環境で、
フォームにラベルを配置し、ラベルのMouseMoveイベントに以下のコードを書きました。

  // ボタン押下しっぱなしであれば移動
  if(e->Button == MouseButtons::Left) {
    label_sp->Location.X = e->X;
    label_sp->Location.Y = e->Y;
    label_sp->Invalidate();
  }

私は、このラベルをマウスでドラッグできることを予測して
このコードを書きました。

ところが、ラベルはぴくりとも動いてくれません。
なぜなのでしょうか?

702:701
07/03/07 18:48:08
自己解決しました…。
以下に解決に至ったコードを書きます。

  // ボタン押下していれば移動
  if(e->Button == MouseButtons::Left) {
   int X = Form1::MousePosition.X - Form1::Location.X
   int Y = Form1::MousePosition.Y - Form1::Location.Y
   label_sp->Location = Point(X, Y);
  }

多少ズレはありますがこのようにやってみます。
スレ汚しすみません。

703:デフォルトの名無しさん
07/03/07 18:56:45
localtime関数はマルチスレッドで使う場合
スレッドセーフではないと聞きました
VC++2002ですが解決策を教えてください

704:デフォルトの名無しさん
07/03/07 19:01:54
>>703
マルチスレッドは良くない。

705:デフォルトの名無しさん
07/03/07 19:02:36
マルチかよ

706:デフォルトの名無しさん
07/03/07 19:03:16
>>702
label_sp->Location = Point(X, Y); // ここ重要
Location.Xは、返された一時オブジェクトに対しての操作なので、
ラベルには反映されなかった。

707:702
07/03/07 19:27:56
>>706
あ、いえ、あれで実際動いてますよ?
ラベルのドラックができてます。
まだ、マウスカーソルのサイズ分のズレがありますが、それは調整中です。

回答ありがとうございます。

708:デフォルトの名無しさん
07/03/07 19:31:11
>>703
スレッドセーフでないものをスレッドセーフにするには、
ラップすれば良いと何かの本で…
私ごときでは具体例は出せませんが

709:デフォルトの名無しさん
07/03/07 19:52:02
>>703
VC++2002がどんな設定だったか覚えていないが
設定でマルチスレッド対応のランタイムライブラリを選べばOK。
(推測)

それとスレッドの作成に
Win32APIのCreateThreadではなく
C言語用かMFC用のを使えばいいんじゃない。

710:706
07/03/07 20:04:20
>>707
>>701が動かない理由な。判りにくくてすまそ。

711:デフォルトの名無しさん
07/03/07 20:07:53
>>703
マルチってほんとに便利ですね。いらないスレッドはポイですよ。

【初心者歓迎】C/C++室 Ver.35【環境依存OK】
スレリンク(tech板:331番)


712:デフォルトの名無しさん
07/03/08 10:59:55
質問に合うスレッドに書き換えただけですがなにか?

713:デフォルトの名無しさん
07/03/08 11:17:00
そもそも、何でスレッドセーフではないのか?
を考えたことあるか?

714:デフォルトの名無しさん
07/03/08 11:58:24
内部の静的な領域を使い回しするからですよね

715:デフォルトの名無しさん
07/03/08 13:16:21
「~ですけど、何か?」ってすっかり一般的になってるなw

もともとこの言い回し、WhiteAlbumってゲームに出てきたジャーマネの口癖を
パクッたやつだって知ってるヤツはあまりいまい…


716:デフォルトの名無しさん
07/03/08 13:35:25
数年前にはやった

717:デフォルトの名無しさん
07/03/08 14:00:28
6年来の葉鍵板住人だけど初耳だった

718:デフォルトの名無しさん
07/03/08 18:04:21
>>717
だったら「~ですが何か?PART.XX」ってスレ、何度も目撃してるはずだが…
たしか名前は弥生さんだった
スレ違いスマソ

719:デフォルトの名無しさん
07/03/08 19:49:01
C++で委譲しまくってたら処理を振り分ける部分が恐ろしく複雑で忙しそうになってしまった
最初のうちは入門書に載ってるみたいに色んな機能を併せ持った奴作っていくようにした方がいいんでしょうか?

720:デフォルトの名無しさん
07/03/08 22:56:09
教えてください。
VC .NET 2003 でMFCを使ってプログラムを使うと、他の2003、2000の
環境で「MFC70.DLLがない」というエラーで実行できませんでした。

DLLを入れれば動くのは分かりますが、VCのコンパイルオプションなどで
通常の2000などの環境でも動くように出来ないのでしょうか?
「プロパティ-全般-MFCの使用」でスタティックにすれば実行できましたが、
スタティックにしたために実行ファイルのサイズが大きくなり格好が悪いです。

もっとスマートな方法はないでしょうか?

721:720
07/03/08 22:56:50
> VC .NET 2003 でMFCを使ってプログラムを使うと
VC .NET 2003 でMFCを使ってプログラムを作ると


の間違いでした。

722:デフォルトの名無しさん
07/03/08 23:16:42
寝言?

723:デフォルトの名無しさん
07/03/08 23:56:13
実行ファイルが数MBあったところで、ガタガタ抜かす奴は今時いないから気にするな。

724:デフォルトの名無しさん
07/03/09 00:00:24
>>720
EXEにMFC70.DLLを同梱
スタティックリンク
MFCを使わない

さあどれでも好きなものを選べ。

725:デフォルトの名無しさん
07/03/09 00:04:10
ネットで配布されてるフリーのライブラリを複数併用してると
実行ファイルが凄いことになるよな
併用できるように(試行錯誤で)改造することは出来ても不要なコンポーネントを削ることまでは出来ないから
結局10MbytesのExeとかになっちゃう
そんなのでも一から自分で組むよりはパフォーマンスが良いって言うのが悲しいというか情けないところなんだけど・・・orz

726:720
07/03/09 00:04:15
.NETでMFCを使う以上、仕方がないということですね。
ありがとうございました。

727:デフォルトの名無しさん
07/03/09 00:19:34
>>725
ならんよ。デバッグのままなんじゃないのか

728:デフォルトの名無しさん
07/03/09 14:54:28
10Mのexeはすごいなぁw
どんだけ超大作なんだろうか

729:デフォルトの名無しさん
07/03/09 15:35:37
10MBの実行コードってソースコードにしてどのぐらいだろうね
きっと、いろんな人のコードがいっぱい詰まってるんだね

730:デフォルトの名無しさん
07/03/09 19:57:12
Perlのコードがそのまリテラルとして入ってるんだろ。

731:デフォルトの名無しさん
07/03/10 12:51:17
要らん.lib削ったら5分の1になりますた
ライブラリの機能実験のため一杯詰め込んでたの忘れてましたすいません><

732:デフォルトの名無しさん
07/03/10 13:24:53
質問です。

複数のコントロールをcreateで作成するときに、
リソースIDを割り当てることに困っているのですが、
割り当てようとしているID値が他で使われていないか、
または使われていないID値を返すような関数はありますでしょうか?

よろしくお願いします。

733:デフォルトの名無しさん
07/03/10 17:29:04
自分で管理してないと使いものにならないと思うんだが気のせいか?
使う予定がないんだったら全部staticにしとけばいいし

734:デフォルトの名無しさん
07/03/10 19:25:05
>>732
VC2005ならリソースを選択した状態で編集メニューのリソースシンボル。
新規作成で追加し、そのIDを使うようにすれば管理は多少楽かも。
でも使い勝手は良くないな...

735:658
07/03/10 20:10:15
スレリンク(tech板:268-280番)
というやりとりを経て戻ってきました。
&BitmapInfo.bmiHeaderの値がおかしい気がするんですが・・・。

736:デフォルトの名無しさん
07/03/10 20:30:23
1. もう一度最初から組みなおす
2. デバッガを上手く使う
3. 諦める

少なからず、デバッガについて機能を調べ上手に利用して
原因を特定していくとかいう根性がないようであれば、
VCとは相性が悪かったと思って別の言語に移った方がいい。
VC(というか、C/C++)は結構面倒だ。

Visual Studio でのデバッグ
URLリンク(msdn2.microsoft.com)(VS.80).aspx

C# なんかメモリなんかあんまり考えなくて済むから割とオススメだぞ。

737:デフォルトの名無しさん
07/03/10 20:39:09
実は付近のメモリ破壊していて
そのとばっちりを受けている場合は直すの大変だよね。
まず原因を探すのが大変。


738:デフォルトの名無しさん
07/03/10 20:41:04
>>736
C#使いたいんですがXtraがC++しか対応してないんですよ。orz

739:658
07/03/10 20:49:45
あと、デバッガ使えるなら使ってるんですよ。
いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz

740:デフォルトの名無しさん
07/03/10 20:57:54
> いかんせん組み上げてあとは動くかどうか神頼みみないな検証しかできないので困ってます。orz 
良く解らんけど、何故に VC のデバッガが利用できない?
プラグインとして動作するしかないからか?

もしそれならデバッガのアタッチ機能を使え。プロセスに侵入するんだ。
(とはいえ、Mcromedia製の云々っぽいからデバッガに関連する何かはありそうだが…)


それと、デバッガの機能としての
「特定のメモリアドレスにアクセスした場合にブレーク」
も併用するとよいと思うぞ。

741:デフォルトの名無しさん
07/03/11 02:19:13
createで作ったStatic Controに画像(jpg)を表示する処理を入れたのですが、
ソース上では先にcreateしているのに、
実行時には「画像描画」→「createしたStatic Controlの表示」の順になっているためか、
画像の上にstaticがでてしまいます。
どうにかならないでしょうか・・・よろしくお願いします。


742:デフォルトの名無しさん
07/03/11 08:31:18
Staticつかう意味があるんだろうか?

743:741
07/03/11 08:53:50
>>742
当方、Staticじゃないと表示させられないという認識でおりました。
他のコントロールでも表示できるのであればそちらでよいと思ってます・・・

744:デフォルトの名無しさん
07/03/11 09:24:02
staticが表示するのと別のものを自分で表示するんだったら
static使う意味がないんじゃないかということ

745:743
07/03/11 09:43:50
>>744
説明がちょっとわかりづらくなっていました。すみません・・・

Static Controlの枠の上にjpgを乗せるということをやりたかったんですが、
どういうわけか画像がStatic Controlの下に隠れてしまうんです。。。

Static Controlの属性が悪いのかなあ・・・

746:デフォルトの名無しさん
07/03/11 11:21:22
Static Controlのウィンドウスタイルだろ
オレもSTATIC並べて枠と座標だけ利用することはたまにやる

747:743
07/03/11 11:26:02
>>746
回答ありがとうございます。
そのときのStatic Controlのウィンドウスタイルは
どのようになっていますでしょうか?
私は
SS_BITMAP | SS_WHITERECT | WS_BORDER | WS_VISIBLE
でやっているのですが、なにか足りないものがあるでしょうか・・・
よろしくお願いします。

748:デフォルトの名無しさん
07/03/11 12:14:23
ビットマップも表示するんだ

749:デフォルトの名無しさん
07/03/11 12:17:05
SS_BITMAPは自分で中も描いちゃうから消えるだろ

750:743
07/03/11 12:48:39
>>748-749
SS_BITMAPを消してみましたがまだ駄目みたいです・・・
泣きそう・・・

751:デフォルトの名無しさん
07/03/11 13:07:36
SS_WHITERECT も中を描画するだろw
枠だけとかあるだろ

752:743
07/03/11 14:00:30
>>751
SS_WHITERECTを消して、
SetBkModeでTRASPARENTにしてみても変わらないです。。。


753:デフォルトの名無しさん
07/03/11 14:07:00
SS_WHITEFRAMEとかSS_BLACKFRAMEとかあるだろう

754:743
07/03/11 14:18:25
>>753
GODと呼ばせてください・・・ できました・・・
今日中に作成しないといけないものだったので、
昨日から胃が痛くてしょうがない状態でした。
ありがとう、本当にありがとうございました!

755:デフォルトの名無しさん
07/03/13 18:36:23
「胃が痛くてしょうがない状態」
あああ…。悲しいなそれは。

756:デフォルトの名無しさん
07/03/15 15:56:25
質問があります。

MS VC++.NET 2003 なのですが、以下のソースで三角を描画しました。

Pen * pen = new Pen(Color::Black);
Point poly[] = { p1, p2, p3 };
g->DrawPolygon(pen, poly);

これは成功しました。
今度はこれを塗りつぶしたいのですが、どうすれば良いのでしょうか?
ここでのBrushの使い方がいまいち分かりません。
よろしくお願いします。

757:デフォルトの名無しさん
07/03/15 16:18:34
FillPolygon

758:デフォルトの名無しさん
07/03/15 16:20:18
中を塗り潰すのはFill~と命名されている。
FillPolygonはDrawでPenを引数に取っていた代わりにBrushを引数に取る。
単色に塗り潰すブラシはBrushの派生の1つSolidBrush、ほかにも何種類かブラシがある。
だから結局こうなる。
Brush* brush = new Brush(Color::Black);
Point poly[] = {p1, p2, p3};
g->FillPolygon(brush, poly);


759:デフォルトの名無しさん
07/03/15 17:03:50
w= *((ULONG *)( &iv->rbuf[iv->rbufq] ));

既設のvc++のソースを調査しています。
上記、処理の実行結果(w)には何が設定されるかわかりません。
*((ULONG *) ってどういう意味ですか?
ご存知の方、ご教授願います。


760:デフォルトの名無しさん
07/03/15 17:05:36
unsigned long のポインタにキャストして、そのアドレスが指してる値を取り出してる

761:デフォルトの名無しさん
07/03/15 17:09:22
>>760 ご教授に感謝

762:デフォルトの名無しさん
07/03/15 19:05:02
テキストファイルのダンプ(16進)を表示したい。VC++のツールにありますか?
・メモ帳でunicode形式で保存したファイルを CStdioFile::ReadString()した時
 意図しない動作をするので unicode形式のファイルの中身をコードで確認したい

Visual C++ standard editionです。
ヘルプで検索するとデバッグ時のメモリダンプばかりヒットしてしまいます。
よろしくお願いします。

763:デフォルトの名無しさん
07/03/15 19:08:56
vectorあたりでバイナリファイルエディタ探すのが早いんじゃ

764:デフォルトの名無しさん
07/03/15 19:13:42
>>762
どのバージョンかわからんのであれだが、
ファイルメニュー - 開く - ファイル で出たダイアログで
ファイルを選択し、開くボタンの右の矢印を押して
ファイルを開くアプリケーションの選択からバイナリエディタを選べばいける

バージョンによって開き方が違うかも

765:デフォルトの名無しさん
07/03/15 19:23:39
>>764
VC++2005 でバイナリエディタ開けました! ありがとうございます。

>>763
レス ㌧。

766:658
07/03/21 14:10:17
向こうでも書きましたが、動きますた。
ご迷惑をおかけしました。

迷惑ついでにもうひとつ質問が。
コンパイル時にLNK 4006のwarningが大量発生するのです。
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IRegFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IFilterInfo は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _CLSID_FilgraphManager は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IQueueCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
strmbase.lib(strmiids.obj) : warning LNK4006: _IID_IDeferredCommand は wcamregister.obj で定義されています; 2 つ目以降の定義は無視されます
といった感じのが1000近く出ます。
動くので問題はないんですが、コンパイル時にウザいので解決したいなーと思った次第です。
どなたか解決方法をご存知の方はいらっしゃいますでしょうか?

767:デフォルトの名無しさん
07/03/21 14:53:35
#pragma warning(disable: 4006)

768:デフォルトの名無しさん
07/03/21 14:58:28
リンクのワーニングにそれ使えるの?

>>766
リンク指定してるライブラリを調べてみて。重複してないか?

769:658
07/03/21 15:09:23
>>767
効かないようです。

>>768
winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib strmbasd.lib
以上がリンクしているライブラリですね。

770:658
07/03/21 15:26:06
ついでに書くと、strmbasd.libとstrmbase.libをプロジェクトのディレクトリにコピーして使ってます。
それがまずいんでしょうか?

771:658
07/03/21 15:45:25
strmbase.libがResource Filesに入っていたので外しました。
数が700くらいまで減りましたがまだ大量に発生中です。

URLリンク(www.users.gr.jp)
これズバリだと思ってこのとおりに試してもダメでした。
リンク先のmsdnサイトのやり方も試してみましたがダメです。orz.......

772:デフォルトの名無しさん
07/03/21 16:34:06
>>769
それはデフォルトライブラリの使用をありにしたうえで別に指定しているのか?

773:658
07/03/21 16:43:51
>>772
今出先なんで確認できないんですが、多分デフォルトありにしてます。
帰ったら早速調べてみます。

774:デフォルトの名無しさん
07/03/21 17:02:25
>> 658
> 向こうでも書きましたが、動きますた
原因と問題解決方法と書いておけ。
将来的に同じような所で躓くヤツも居るだろう。


775:658
07/03/21 18:13:52
>>772
「デフォルトライブラリをすべて無視」にチェック入れても同じ状態(というかリンクエラーが追加される)ですた。

>>774
原因:DVSD形式でデータが流れてくるためDIB形式に変換しようとしたら失敗する。
対処:
AM_MEDIA_TYPE amt;
ZeroMemory(&amt, sizeof(AM_MEDIA_TYPE));
amt.majortype = MEDIATYPE_Video;
amt.subtype = MEDIASUBTYPE_RGB24;
amt.formattype = FORMAT_VideoInfo;
pGrab -> SetMediaType( &amt );
といった感じで一度RGB24形式に指定してあげた後
pGrab -> GetConnectedMediaType( &amt );
で再度取得する。
というかリンク先のソースをコピペでも動くます。
URLリンク(wwwdoi.elec.nara-k.ac.jp)

CopyMemoryで落ちるとか、ヘッダに書くと動かないってのは謎のままです。orz

776:デフォルトの名無しさん
07/03/21 18:43:00
まとめ
拾って来たソース適当にコピペしたら動きました。
でもワーニング出まくりです。

777:デフォルトの名無しさん
07/03/21 18:52:44
たしか、#defineの具合によって、UUIDが実体化されることがあったはず。
だから、どこでも#defineせずにlibを含めるか、どこか1つの翻訳単位で
実体化させて、UUIDの含まれたlibはリンクしないか、どちから。

778:658
07/03/21 20:27:07
>>776
まあそれで正解です。w

>>777
ちょっと時間ないんで明日にでも試してみます。
777オメ。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch