■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

★初心者にVisual C++を教えるスレ★ Part23
501 名前:490 :2006/07/07(金) 08:18:47
spyってなんだろう。。。 調べてやってみます

502 名前:490 :2006/07/07(金) 12:13:30
付属ソフトのspy++で見てみましたが、メッセージは無いみたいでした。
よく分からないので、ゼロから作り直しました。関数や変数はVC++の
機能を使って改めて作り、関数の中身はもとのプログラムをそのままコピペ
しました。つまり、中身は同じはずですが、どういう訳か今度は思い通りに
動きました...結局どこが悪かったのが分からないままです...

503 名前:デフォルトの名無しさん :2006/07/07(金) 14:02:33
コードのDiff取ればわかる。
原因を放置すれば又、ハマる。

504 名前:デフォルトの名無しさん :2006/07/07(金) 23:00:57
>>496,498
おかげさまで直りました。スペシャルdクス

505 名前:デフォルトの名無しさん :2006/07/08(土) 23:16:00
ATL+WTLでプログラミングしてます。
HTTP通信まわりを処理するのって、
どのへんのクラスライブラリを使うのが一般的でしょうか?

506 名前:デフォルトの名無しさん :2006/07/09(日) 15:19:50
ダイアログに表示するアイコンをLoadIcon()→SetIcon()で自分で設定しました。
このときに、ダイアログの中のチェックボックスのチェックあり/なしで
アイコンに別のアイコンをオーバーレイしたいのですがうまくいきません。

オーバーレイ関係を調べるとCImageListがあるようなんですが、これでオーバーレイイメージに設定しても
オーバーレイではなくアイコンが完全に変わってしまいます。
さらに戻すことができません。

どうするのがよいのでしょうか。

507 名前:デフォルトの名無しさん :2006/07/10(月) 04:52:32
延長キタ━━━━━━(゚∀゚)━━━━━━!


508 名前:デフォルトの名無しさん :2006/07/10(月) 06:28:55
延長30分で10万円になります

509 名前:デフォルトの名無しさん :2006/07/10(月) 15:12:59
タケーよ

510 名前:デフォルトの名無しさん :2006/07/10(月) 22:19:18
typedef なんですけど、
typedef [既存型名][型の別名]
と調べたらありました。この場合、

typedef enum{
AAA,BBB
}CCC;

ってどういう意味なんでしょうか?enumは整数列挙型だから、
「整数列挙型をCCCと別名をつけて、さらにAAA、BBBというenum型の変数を
宣言する」ってことでしょうか?

ご教授お願いしますm(_ _)m

511 名前:デフォルトの名無しさん :2006/07/10(月) 22:46:37
enum CCC { AAA, BBB };
と同じ意味。

512 名前:デフォルトの名無しさん :2006/07/10(月) 22:47:10
>>510
enum {
  AAA, BBB
}
これで、1つの型が表されている。(無名の列挙型)
それをtypedefしてCCCと名付けている。
AAAとBBBは列挙定数。

言い換えればこういうこと。
enum xxx {
  AAA, BBB
};
typedef xxx CCC;

513 名前:デフォルトの名無しさん :2006/07/10(月) 23:09:48
511,512さん
即レスありがとうございます。
良く分かりました。
宣言ひとつでも、いろいろな書き方があって難しいですね。
分かりやすいレスで感謝です。

514 名前:デフォルトの名無しさん :2006/07/10(月) 23:18:44
いろいろ書けるのがCの強みだからな。

スタイル論争も烈しいが…

515 名前:デフォルトの名無しさん :2006/07/10(月) 23:20:59
VCに関係ない質問だと回答があるのは初心者が多いからか

516 名前:デフォルトの名無しさん :2006/07/10(月) 23:26:28
C初心者が教えるスレ

517 名前:デフォルトの名無しさん :2006/07/11(火) 10:09:16
waveformatについて説明しているサイト知りませんか?

518 名前:デフォルトの名無しさん :2006/07/11(火) 10:12:30
MSDN

519 名前:デフォルトの名無しさん :2006/07/12(水) 00:45:59
教えて下さい。

class AAA{
public:
void PPP();
}

class BBB : public AAA{

}

と定義したあとで、オブジェクトを作成。

class XXX = new BBB();

この時

XXX->PPP();

というような記述は可能なんでしょうか?可能だとしたら、
クラスBBBを宣言する際に、クラスAAAも取り込んでいるというような
感じなのでしょうか。

520 名前:デフォルトの名無しさん :2006/07/12(水) 00:50:25
すみません。
class XXX = new BBB();
ではなくて、
BBB* XXX = new BBB();
でした。

宜しくお願いします

521 名前:デフォルトの名無しさん :2006/07/12(水) 00:55:51
>>519-520
Visual C++の質問っぽくないけど
「取り込んでいる」だとオブジェクトコンポジションっぽいけど
これは「派生」ってやつなので、ちとちがう感じ。
もしかして、コンパイラがどう翻訳しているか聞いている?

522 名前:デフォルトの名無しさん :2006/07/12(水) 15:46:57
質問です。

ファイルからビットマップを表示させるプログラムを作っています。
LoadImage で HBITMAP を作ってAttachして表示、はできたのですが、
スクロールバーで詰まっています。

スクロールバーを表示/非表示をビットマップの大きさに合わせるにはどうすれば良いでしょうか。
お願いします。

523 名前:デフォルトの名無しさん :2006/07/12(水) 16:21:45
>>522
ttp://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/scrollbars/aboutscrollbars.asp
ここをよく読んで勉強しなさい

524 名前:デフォルトの名無しさん :2006/07/12(水) 17:03:28
表示/非表示ということは
必要ない時はスクロールバーを出さないようにしたいんだろうか?
スクロール自体はできているということだな

525 名前:デフォルトの名無しさん :2006/07/12(水) 17:05:29
ドトネトは対象外ですね?

526 名前:デフォルトの名無しさん :2006/07/12(水) 17:11:11
VC++でドトネトは初心者向きじゃない。

527 名前:デフォルトの名無しさん :2006/07/12(水) 18:26:08
VC++はポトペタできないの?

528 名前:デフォルトの名無しさん :2006/07/12(水) 18:45:28
馬鹿がVCやってもしょうがないと思うんだが

529 名前:デフォルトの名無しさん :2006/07/12(水) 20:49:15
じゃあお前もやるなよ

530 名前:デフォルトの名無しさん :2006/07/12(水) 22:22:05
環境:VC++.net
テンプレ:CLR - Windowsフォームアプリケーション


質問させてください。
CSVファイルから取り込んだデータを
CheckedListBoxの項目にしようと考えているのですが

string str = test;
checkedListBox->Items->Add( str, false );

error C2664: 1 番目の引数を 'std::string' から 'System::Object ^' に変換できません。

とエラーが出てしまいます。
String^ str = "test"; ならばエラーは出ませんが変数文字列を項目として設定できません。
String^ や Object^ の 「^」 の意味がわからず手詰まりとなってしまいました。
どうやったら変数文字列をCheckedListBoxに追加できるのでしょうか?

531 名前:デフォルトの名無しさん :2006/07/12(水) 23:03:03
>>530
^はマネージ型における*だと思えば(とりあえずはそれで)いい。

その場合は、std::stringをSystem::Stringに変換する必要がある。
と言っても単にcheckedListBox->Items->Add(gcnew System::String(str.c_str()), false);としたらどうか。
http://msdn2.microsoft.com/ja-JP/library/ms235631.aspx

532 名前:デフォルトの名無しさん :2006/07/12(水) 23:13:54
VC++でドトネトは初心者向きじゃない。

533 名前:530 :2006/07/12(水) 23:45:14
>>531
なるほど。^に合わせるにはnew演算子系が必要だったんですね。
無事目的を達成できました。
ありがとうございました。

534 名前:デフォルトの名無しさん :2006/07/13(木) 14:03:36
新規作成でWin32dllで作ってしまったのですが、(そうせざるを得ないのですが)
その場合でもMFCライブラリって使えますか?

<afxwin.h>をincludeすると
「dllMainは既に定義されています」なんて出るし、
Officialにあった解決方法を参考にリンク順序を変えても
エラーは消えないですし。
dllでMFCを使うための手順があれば教えていただけないでしょうか。
環境はVC6エンタープライズです。

535 名前:デフォルトの名無しさん :2006/07/13(木) 15:20:04
MFC(dll)

536 名前:534 :2006/07/13(木) 15:34:42
>>535
配布されているテンプレートがWin32dllなので
今から変えるわけにはいきません・・・。
MFC(dll)に変更するしか方法はないでしょうか?

537 名前:デフォルトの名無しさん :2006/07/13(木) 16:01:02
MFC(dll)で作ったやつを参考に変更する

538 名前:デフォルトの名無しさん :2006/07/13(木) 21:14:47
以下をビルドすると
「error LNK2019;未解決の外部シンボ"public;_thiscall CAAA::(void)"(??0CAAA@@QAE@XZ)が関数_WinMain@16で参照されました。」
と怒られてしまいます。
やりたいことは、AAAというクラスを作って、オブジェクトを作成して、オブジェクトのメソッド(メッセージボックス)を実行することです。

何が悪いかと、いろいろ調べて見たのですが分かりません。
アドバイスお願いします。


#include<windows.h>
#include <string>

class CAAA {
private:
public:
CAAA();
~CAAA();
void MsgBox();
};

void CAAA::MsgBox(){
MessageBox(NULL , TEXT("ここでテキストを表示") ,
TEXT("メッセージボックス") , MB_OK);
};

INT WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, INT){
CAAA* XXX=new CAAA();
XXX->MsgBox();
return 0;
};


539 名前:デフォルトの名無しさん :2006/07/13(木) 21:21:44
【IT】Microsoft、「Virtual PC 2004」の無償提供を開始
http://news19.2ch.net/test/read.cgi/newsplus/1152788480/


540 名前:デフォルトの名無しさん :2006/07/13(木) 21:24:04
>>538
コンストラクタ、デストラクタの定義がないよ。

541 名前:デフォルトの名無しさん :2006/07/13(木) 21:39:52
>540さん
即レスありがとうございます。
無事、ビルドが通りました。

542 名前:デフォルトの名無しさん :2006/07/13(木) 22:15:43
もう一度質問させて下さい。519です。
オブジェクトXXXはCBBBというクラスのオブジェクトですが、
CAAAの処理MsgBox()が使えます。

class CBBB : public CAAA {

みたいな書き方をすると、クラスAAAの機能を含んだ、
新たなクラス(ここではBBB)を定義することが出来る・・・
ってことで間違っていませんか?
そして、このことが、521さんが言ってる「派生」ってことでしょうか?

クラスAAAのオブジェクトを作らずに、クラスAAAの機能を使えるって
言うのは、なんか不思議な感じがしますね^^>

543 名前:デフォルトの名無しさん :2006/07/13(木) 22:16:49
ちょっと失礼します・・

当方VC++2005のプログラマ見習い(の見習い)です。
WM_ACTIVATEを使ってウィンドウのアクティブ/非アクティブを判断させようと思ったんですが、
WM_ACTIVATEの中にウィンドウがアクティブかどうかのフラグ処理を書くとWM_PAINTを読み取ってくれません。
どなたかいい方法を教えていただけないでしょうか・・

544 名前:デフォルトの名無しさん :2006/07/13(木) 22:18:23
以下、ソースです。
#include<windows.h>
#include <string>
class CAAA {
private:
public:
CAAA();
~CAAA();
void MsgBox();
};
class CBBB : public CAAA {
private:
public:
CBBB();
~CBBB();
};
CAAA::CAAA() {};
CAAA::~CAAA() {};
CBBB::CBBB() {};
CBBB::~CBBB() {};
void CAAA::MsgBox(){
MessageBox(NULL , TEXT("ここでテキストを表示") ,
TEXT("メッセージボックス") , MB_OK);
};
INT WINAPI WinMain(HINSTANCE hinst, HINSTANCE, LPSTR, INT){
CBBB* XXX=new CBBB();
XXX->MsgBox();
return 0;
};

545 名前:デフォルトの名無しさん :2006/07/13(木) 22:18:40
>>542
悪いこといわないから、オブジェクト指向の入門書読め。
『憂鬱なプログラマのためのオブジェクト指向開発講座』とか。

546 名前:デフォルトの名無しさん :2006/07/14(金) 03:01:31
>>543
自分のコードが間違ってるはず。
というわけで問題点を見つけ出して修正するべし。

ブレークポイントや、OutputDebugString など使うと便利かも。

547 名前:デフォルトの名無しさん :2006/07/14(金) 11:41:06
SDKでAfx.hをincludeしたところ
WINDOWS.H already includeと警告が出ます。
自分で作ったプログラム中ではWINDOWS.Hはincludeしてないし、
Afx.hも1度しかincludeしていません。
試しにMFC\include配下でwindows.hをincludeしていたところも
全てコメントアウトしましたがエラーは消えません。
windows.hをincludeしてるのはどこなのでしょうか?

548 名前:デフォルトの名無しさん :2006/07/14(金) 12:07:14
あてずっぽうでコメントアウトしまくったんだ。
すごいね

549 名前:デフォルトの名無しさん :2006/07/14(金) 18:51:48
Visual C++ 2005 MFCダイアログベースを使っています。
CEditのエディットボックスから入力された文字列String型を読み取り、
int型へ変換するのに

CString moji;
int suuzi;
edit.GetWindowTextW(moji);
swscanf(moji,_T("%d"),&suuzi);

と打ったのですが、
warning C4996: 'swscanf' が古い形式として宣言されました。
'swscanf' の宣言を確認してください。
と警告が出ました。
修正点のご指摘お願いします。

550 名前:デフォルトの名無しさん :2006/07/14(金) 18:56:15
CString使うなら普通CStringのメンバ関数使う

551 名前:550 :2006/07/14(金) 18:59:53
フォーマットと勘違いした

552 名前:デフォルトの名無しさん :2006/07/14(金) 19:11:10
コンパイラに言われた通りパラメータ確認すりゃいいだろう

553 名前:デフォルトの名無しさん :2006/07/14(金) 19:31:48
CString moji;
int a = atoi(moji);
double b = atof(moji);

554 名前:デフォルトの名無しさん :2006/07/14(金) 20:49:04
int suuzi = boost::lexical_cast<int>(moji);

555 名前:デフォルトの名無しさん :2006/07/14(金) 23:54:35
swscanf_s

556 名前:デフォルトの名無しさん :2006/07/15(土) 12:55:28
printf(""neko"");
のようにprintfで「"」や「%s」等を表示したい場合は
どうすればいいか教えていただけないでしょうか?

557 名前:デフォルトの名無しさん :2006/07/15(土) 13:01:33
\" %%

558 名前:デフォルトの名無しさん :2006/07/15(土) 13:02:40
スレ違い

559 名前:556 :2006/07/15(土) 13:04:41
>>557
ありがとうごぜいます

560 名前:デフォルトの名無しさん :2006/07/15(土) 13:05:19
printfについてVCスレで質問する馬鹿、答える馬鹿

561 名前:556 :2006/07/15(土) 13:18:04
>>557
答えていただいたのに不快な思いをさせて申し訳ないです。
ごめんなさい。

スレ住民のみなさんすいませんでした。

562 名前:デフォルトの名無しさん :2006/07/15(土) 13:33:37
VC6のメニュー→ビルドにある項目の意味を教えてください

[ビルド]はプロジェクト中のソースファイル、ヘッダファイルを
コンパイルすることですよね?

[リビルド]は変更のあったものだけを再コンパイルするんですよね?

じゃあ[コンパイル]はなんでしょうか?
現在アクティブなソースファイルのみをコンパイルする?

563 名前:デフォルトの名無しさん :2006/07/15(土) 13:40:00
コンパイルだけじゃ実行ファイルは作成できない。

564 名前:デフォルトの名無しさん :2006/07/15(土) 14:08:46
[ビルド]×
[リビルド]×
0点

565 名前:562 :2006/07/15(土) 14:34:06
[コンパイル]は合ってるの?

訂正です

[ビルド]プロジェクト中の.cpp、.hファイルをコンパイルして
リンクする

[リビルド]変更のあったファイルだけをコンパイルしてリンクする



566 名前:デフォルトの名無しさん :2006/07/15(土) 14:36:38
.hは単体でコンパイルされないよ。

567 名前:デフォルトの名無しさん :2006/07/15(土) 14:38:04
>>565
またしてもビルドとリビルド間違い。

568 名前:565 :2006/07/15(土) 14:54:10
え〜〜

わかんないよ

[ビルド].cppファイルをコンパイルする。
そのあと、.hによって依存関係を解決してリンクする

[リビルド]変更のあった.cppファイルをコンパイルして
リンクする
.hはコンパイルされない

569 名前:デフォルトの名無しさん :2006/07/15(土) 14:56:30
>>568
またしてもビルドとリビルド間違い。

570 名前:デフォルトの名無しさん :2006/07/15(土) 15:06:03
無能な解答してんじゃねーよ。黙っとけ。

>>565
およそこんなかんじ。

[ビルド] 変更のあったファイルに関連するものをコンパイルしリンクする。
foo.cppがfoo.hをインクルードしているときにfoo.hを変更すると、foo.cppも
コンパイルされる。

[リビルド] 変更のあるなしにかかわらず、全てを一からコンパイルしリンクする。

571 名前:565 :2006/07/15(土) 15:13:02
くっそー

[ビルド]プロジェクト中の.hファイルを参照して.cppファイルをコンパイルする
コンパイルしてできた.objファイルをリンクして.exeファイルを生成する

[リビルド]通常ビルドは変更のあった.cppファイルのみを、依存する.hファイルを
参照してコンパイルし直して.objファイルを作り、再度リンクして.exeファイルを
生成するが、リビルドは.cppファイルの変更に関係なく、全てを再ビルドする

572 名前:565 :2006/07/15(土) 15:14:27
>>570
ありがとうございます
ようやっと理解できました

573 名前:デフォルトの名無しさん :2006/07/15(土) 15:19:50
>>570
残念。リビルドは「クリーン時に削除する拡張子」にしたがって
中間ディレクトリからファイルを削除し、ビルドを開始すること。

574 名前:デフォルトの名無しさん :2006/07/15(土) 15:23:49
>>573
お前という人間が残念だよ

575 名前:デフォルトの名無しさん :2006/07/15(土) 18:21:55
確かに573は小便くさいw

576 名前:デフォルトの名無しさん :2006/07/16(日) 15:57:14
質問させていただきます。

ネットゲームでのツール(オートログイン、経験値時給表示、キャラ自動操作等)
を作成してみたいと考え、C/C++の開発を行おうとおもっています。

そこで、c/c++の統合開発環境として
Visual C++ Express Edition を勧めていただき、これから構築しようと
思っているのですが、「ゲーム作成ができない」という表現が、
VCEEについてありました。ゲーム作成とネットゲームのツール作成は
確かに異なりますが、私のやりたいことはVCEEにて可能なのでしょうか。

577 名前:デフォルトの名無しさん :2006/07/16(日) 16:28:54
「ゲーム作成ができない」です

578 名前:デフォルトの名無しさん :2006/07/16(日) 16:35:23
不可能

579 名前:デフォルトの名無しさん :2006/07/16(日) 16:43:51
できないです

580 名前:デフォルトの名無しさん :2006/07/16(日) 17:03:42
>>576
「ゲーム作成ができない」とは一体どこの誰の発言だ?
少なくともMicrosoftは、VCEEでどんなアプリケーションを作るかなどといったことについて、
法的にも技術的にも制限を設けていない。

581 名前:デフォルトの名無しさん :2006/07/16(日) 17:29:56
スルーでお願いします

582 名前:デフォルトの名無しさん :2006/07/17(月) 07:49:58
> オートログイン、経験値時給表示、キャラ自動操作等
やりたいことが糞杉だからな

583 名前:デフォルトの名無しさん :2006/07/17(月) 10:09:46
win2000,VC6でコンソールで制御コードを使いたいのですが
以下のようにやってもうまくいきません

#include <cstdio>

int main(void)
{
putchar(0x1b);
printf("[7;31m");
printf("あああ");
}

あああが赤色で反転表示されるのを期待したのですが
Enterキーの下部分に印字されている左矢印のような
文字が表示されて、そのあとに「[7;31mあああ]と表示されます

どこがまずいでしょうか?

584 名前:デフォルトの名無しさん :2006/07/17(月) 10:15:41
>>583
NT系のWindowsでは、DOSプログラムしかエスケープシーケンスを使えない。
だから、DOS用のコンパイラを使うか、Windows APIでどうにかするかのどちらかを選べ。

585 名前:デフォルトの名無しさん :2006/07/17(月) 10:17:00
VC6でコンパイラオプションを設定するには
どこをいじればよいでしょうか?

586 名前:デフォルトの名無しさん :2006/07/17(月) 10:59:27
そんなに見つけにくいかな?
探さずに聞いてないか?

587 名前:585 :2006/07/17(月) 13:31:03
>>586
プロジェクトオプションという項目がそうですか?

588 名前:デフォルトの名無しさん :2006/07/17(月) 14:20:16
つーかヘルプ読めよ

589 名前:585 :2006/07/17(月) 14:24:48
めんどくせーだろ

590 名前:585 :2006/07/17(月) 14:27:19
氏ねクズ共。

591 名前:585 :2006/07/17(月) 14:28:46
>>589>>590は自分ではありません。
ほんとーに困っているんです。教えてください。

592 名前:デフォルトの名無しさん :2006/07/17(月) 14:31:12
ヘルプ読めよ

593 名前:585 :2006/07/17(月) 14:41:46
ヘルプって、MSDNとか言う奴ですか?よんだけど判りません。

594 名前:デフォルトの名無しさん :2006/07/17(月) 14:50:26
あれ読んでもわからない奴に、教える自信は俺には無い。

595 名前:デフォルトの名無しさん :2006/07/17(月) 16:28:57
本当に困ってるなら
コンソールからオプション指定してコンパイル、
makeファイル書く、
プロジェクトファイルをいじる
とかいくらでも方法あるだろ
それすらできないやつがコンパイルオプションいじってもしょうがない。

596 名前:585 :2006/07/17(月) 17:27:25
(◕∀◕)

597 名前:デフォルトの名無しさん :2006/07/18(火) 18:53:32
パソコンの電源を切るにはどのライブラリ使えばいいですか?
教えてください。

598 名前:デフォルトの名無しさん :2006/07/18(火) 18:54:14
>>597
Windows API

599 名前:デフォルトの名無しさん :2006/07/18(火) 18:56:41
>598
もう少し詳しくお願いします。
まだVisual C++を買っていないので・・・
今使っている言語からは切れなさそうなので、
そこからプログラムをコールしようかと思うんですが・・・
ライブラリ名とメソッド名または関数名か何か教えていただければ。


600 名前:デフォルトの名無しさん :2006/07/18(火) 19:01:27
>>599
ExitWindowsEx
あとはMSDN見ろ。

601 名前:デフォルトの名無しさん :2006/07/18(火) 19:04:41
>598
>600
すません。ありがとうございました。
なかなか引っかからなかったので申し訳ないです。
これで何とかできそうです。

602 名前:デフォルトの名無しさん :2006/07/18(火) 19:07:12
>>601
電源切るだけなら自分でプログラムを作るまでもないな、そういうツールを作っている香具師が必ずいるはずだ。
#作るにしても、VCである必要は全くないし。

603 名前:デフォルトの名無しさん :2006/07/18(火) 19:18:28
>602
dクス。電源切るプログラムは一応見つけてはいたんですが・・・
商用利用できるかどうか微妙だったのでとりあえず自分で書きます。


604 名前:デフォルトの名無しさん :2006/07/18(火) 19:30:16
うはぁ、商用利用なのか。ある意味剛毅だな。

605 名前:デフォルトの名無しさん :2006/07/18(火) 22:18:22
電源切るアプリを売るつもりかね

606 名前:デフォルトの名無しさん :2006/07/18(火) 22:21:57
何かの処理が終わったら電源をオフするようなオプションを
付けたいんだろ。何か不思議なことでもあるんかいな。

607 名前:デフォルトの名無しさん :2006/07/18(火) 22:22:57
>まだVisual C++を買っていないので・・・

608 名前:デフォルトの名無しさん :2006/07/19(水) 00:19:05
>急にボールが来たので…

609 名前:デフォルトの名無しさん :2006/07/20(木) 13:17:13
Visual Studio 2003.netの時は普通にコンパイルできたプログラムが、
Visual C++ 2005 Express Edition にしたらコンパイル時に
windows.hが見つからないといったコンパイルエラーが出るのですが、
EEではwindows.hをサポートしていないのですか?
それと、この問題をEEで解決するにはどうしたらいいですか?教えてください

610 名前:デフォルトの名無しさん :2006/07/20(木) 13:30:43
>>609
書き飽きたが、Platform SDKを入れろ

611 名前:デフォルトの名無しさん :2006/07/20(木) 15:21:19
>>610
ご助言ありがとうございました

612 名前:デフォルトの名無しさん :2006/07/21(金) 08:45:05
>>553-555
それぞれのメリット・デメリットを教えてくださいっ


613 名前:デフォルトの名無しさん :2006/07/21(金) 09:05:45
MFCだったらDDX

614 名前:デフォルトの名無しさん :2006/07/21(金) 09:47:21
>>612
それぞれの仕様調べて自分なりの見解示してみろ。
人に聞いてるだけじゃ進歩ねーぞ。

615 名前:デフォルトの名無しさん :2006/07/21(金) 10:35:33
そのへんの基礎的なことが全然できなくてMFC使ってることに驚き

616 名前:デフォルトの名無しさん :2006/07/21(金) 11:05:18
MFCは初心者にも優しくウィンドウブのプログラミングができるってママが言ってた

617 名前:デフォルトの名無しさん :2006/07/22(土) 01:01:12
MFCのバージョンリソースのバージョン情報は4桁もあるけど普通みんなどこ変えるの?
1.01にしたときは1.0.1.1にしてる?最後の4桁目いらなくない?

618 名前:デフォルトの名無しさん :2006/07/22(土) 03:06:49
major minor build revision

619 名前:デフォルトの名無しさん :2006/07/22(土) 11:22:08
あまり基本的なことで恐縮ですが、教えて下さいm(_ _)m
main.cpp main.h sub.cpp sub.h の4つのファイルがあったとして、
main.cppはmain.hを、sub.cppはsub.hをそれぞれインクルードしてます。
この状態で、
main.cppでsub.hをインクルードします。
この時、
sub.cppで記述した関数等(ヘッダーで定義した関数の実部?)が使えるんですが、どうもシックリきません。
main.cppから見ると、sub.cppはインクルードしている訳ではないのに、
sub.cppの内容が見えているってことなのでしょうか?

初心者考えでは、
main.cppでsub.cppをインクルードする。すると、
そのsub.cppは、sub.hをインクルードしているので、main.cppからsub.hは
見えている。
と言う風に考えてしまうのですが・・・

どういう理屈なのかご教授お願いしますm(_ _)m


620 名前:デフォルトの名無しさん :2006/07/22(土) 11:25:57
>>619
郵便局の中身を知らなくても、ポストがあれば手紙を届けることができる。相手からも手紙が返って来る。
関数の実態をしらなくとも、ヘッダにあるプロトタイプ宣言があれば、関数を呼び出すことが出来る。戻り値を受け取ることもできる。

621 名前:デフォルトの名無しさん :2006/07/22(土) 11:29:14
すみません。
書いた傍から、思ったんですが、
main.cpp に[include main.h]と書くことは、

main.cppにmain.hを含める・・・ではなくて
main.hにmain.cppを含める

という理屈なのでしょうか?
これですと、理解できるのですが・・・



622 名前:デフォルトの名無しさん :2006/07/22(土) 11:34:20
includeはその場所に、ファイルの中身が展開されるだけ。

623 名前:デフォルトの名無しさん :2006/07/22(土) 12:20:16
コンパイラは関数の型が分かれば呼び出しコードを生成できる。
別モジュールにある関数を繋げるのがリンカの仕事。

624 名前:デフォルトの名無しさん :2006/07/22(土) 16:08:10
PeekMessageを使うとCPU使用率が常に100%になるんですが、
これをどうにかする方法ってないんでしょうか?
Sleep(10)やGetMessageに変える以外の方法が検索しても出てこないので、
もしわかる方がいらっしゃればよろしくお願いします.

625 名前:デフォルトの名無しさん :2006/07/22(土) 18:22:39
なんで、Sleep(10)やGetMessageじゃだめなのか?

626 名前:デフォルトの名無しさん :2006/07/22(土) 19:35:17
64bit版のtime_t型変数同士で減算した結果が負かどうか調べたいのですが、
普通に0と比較すると必ず負であるという判定になってしまいます。
0をtime_tでキャストしてもダメで、(long)でキャストしたlong型の
変数に代入すれば正常に負の判定が出来ます。
減算前の変数同士でいちいち大小比較するという方法以外で、
キャストもせずに正攻法で判定する方法はないでしょうか?


627 名前:デフォルトの名無しさん :2006/07/22(土) 19:58:33
>>626
つ[difftime()]

628 名前:デフォルトの名無しさん :2006/07/22(土) 20:24:14
>>627
ありがとうございます。
しかし減算結果を保持する変数の型もtime_tで、なるべく修正個所を
少なくしたいと考えております。
64bitの開発環境はまだ整備されてないのでしょうか・・・

629 名前:デフォルトの名無しさん :2006/07/23(日) 00:02:37
time_t同志の差の型は、time_tじゃないと思うぞ。

630 名前:デフォルトの名無しさん :2006/07/23(日) 09:16:47
time_t ってただの秒数だと思ったけど
数値の演算や比較ができないってどんな間抜け?

631 名前:デフォルトの名無しさん :2006/07/23(日) 10:11:11
>>630
それが32ビットか64ビットかって話だろ。

632 名前:デフォルトの名無しさん :2006/07/23(日) 10:22:54
>>626
どんなコードを書いたらそうなるんだ?

633 名前:デフォルトの名無しさん :2006/07/23(日) 11:22:22
time_t a,b,c;
a=b-c;
if(a<0) {
 //負の処理
} else {
 //正の処理
}
詳細省くと上のような処理ではaの符号に関わらず必ず負の処理が
走ってしまいます。
long型のワーク変数にキャストして、そちらで判定するように
誤魔化してしまいましたがそれじゃ64ビットの意味が無いような気も。

634 名前:デフォルトの名無しさん :2006/07/23(日) 11:39:19
>>633
>629

635 名前:デフォルトの名無しさん :2006/07/23(日) 11:40:17
例えば1970年から32ビットで表せなくなった未来に於いて、
明日引く今日は高々86400秒でしかないと思うのだが。

636 名前:デフォルトの名無しさん :2006/07/23(日) 11:44:42
>>635
頭悪い人は黙っててください

637 名前:デフォルトの名無しさん :2006/07/23(日) 12:08:17
>>634
昨日から調べているのですが、何も見つけることが出来ませんでした。
もし良ければもう少し詳しくお教えください。

>>635
まだ暫くは問題ないけど、この先の移行の事とか考えると
なるべく手間を減らせるのが良いかなと・・・
今まで普通に動いていたソースが64bit版のコンパイラで動かなく
なったので、まだ下調べしてるだけの段階なんですけどね。

638 名前:デフォルトの名無しさん :2006/07/23(日) 12:50:12
time_t同士をそのまま比較すればよさそうに思うけど
きっと何か深い理由があるんだろうね。

639 名前:デフォルトの名無しさん :2006/07/23(日) 13:58:37
>>633
このコードだけのテストプログラムでもそうなの?

640 名前:デフォルトの名無しさん :2006/07/23(日) 14:31:12
>>639
time_tがunsignedなら警告が出てもいいと思うんだけどね。
しかも、unsignedなら常に正になりそうな気がするし。

641 名前:デフォルトの名無しさん :2006/07/23(日) 14:54:49
>>633
なんでif (b < c)ではだめなの?

642 名前:デフォルトの名無しさん :2006/07/23(日) 15:09:55
大小比較するのにいちいち引き算してるから相当頭悪そう。

643 名前:デフォルトの名無しさん :2006/07/23(日) 15:15:24
比較後に差をつかうんじゃね?

644 名前:デフォルトの名無しさん :2006/07/23(日) 15:15:43
デバッガ使って調べれば1発でわかりそうなもんだが

645 名前:デフォルトの名無しさん :2006/07/23(日) 15:26:28
デバッガってなんですか?

646 名前:ぼるじょあ ◆yBEncckFOU :2006/07/23(日) 15:37:26
(・3・)最下級人種、不可触賤民のことだNE!

647 名前:デフォルトの名無しさん :2006/07/23(日) 16:29:16
> 64bitの開発環境はまだ整備されてないのでしょうか・・・

デバッガ使えないくせにずいぶん偉そうなこと言ってるな

648 名前:デフォルトの名無しさん :2006/07/24(月) 14:57:50
そもそも aを time_tと宣言しておきながら int型の定数と比較してる
時点で問題ありそうだが・・・

32bit環境ではtime_tは long int だろけど64bit環境では違うだろうし


649 名前:デフォルトの名無しさん :2006/07/24(月) 15:05:08
>>648
VC++ 2005から、Win32でもtime_tは64bitが標準。

650 名前:デフォルトの名無しさん :2006/07/24(月) 23:44:09
一度使い終わったコードをメモリ上から破棄して、メモリの節約をしたいのですが
そういう方法ってありますでしょうか?

651 名前:デフォルトの名無しさん :2006/07/25(火) 00:00:15
>>650
捨てたい部分をDLL化して明示的リンク(LoadLibrary/FreeLibary)すれば同じようなことができると思う。
もっとも、それでどれだけメモリを節約できるかは疑問。ほかにやることはないのか?

652 名前:デフォルトの名無しさん :2006/07/25(火) 01:13:50
>>651
ありがとう、そうしてみます。
他にやる事は沢山あるんですが
一度しか呼び出さないコードがすごく気になっちゃって・・・

653 名前:デフォルトの名無しさん :2006/07/25(火) 10:30:08
>>650
こういうのがいいという話ではないが、似たような御仁がおられると思って。
昔メモリの少ない時代には、subroutine のオーバレイという手法があった。
Macintosh には、リソース(Windows のと似てはいるが)に proc という
種別があってこれに処理させる方法があった。
自分の最初の Windows マシンは 64MB で、今でも application file サ
イズは 1MB を超えると抵抗感がある。
で、651 の方法を考えて始めたのだが、dll を別ファイルというのも面倒で
なんとか application file に同梱できないかと考えて、今やっている方法
は、dll を lzh 圧縮してリソースに入れて、使うときは解凍して呼ぶ。
終わると dll file を破棄。このため lzh 解凍ルーチンを抱えることに
なって、コードをけずってけずってlzh 解凍に 3KB。
んで、jpeg, gif, png, tiff などの解凍? dll もリソースに抱えている
のだが、application file サイズは肥大化して、なんのことか分からなく
なっている。いいことは違うマシンにこの appli を写すときは .exe 一本で
済むこと。因みに、エラーメッセイジ(150KB超)も lzh 圧縮してリソースで
持つようにしたので、.exe をバイナリで見ても見えない。
後、UNICODE 化ではすごい難儀。まだ終わっていない。

654 名前:デフォルトの名無しさん :2006/07/25(火) 14:03:20
Windowsだって馬鹿じゃないから、
スワップアウトが必要になればEXEファイルの部分のメモリだって捨てるよ。
そうなったらその部分は必要になるまでメモリには帰ってこない。

そういう問題じゃないって?すまん。

655 名前:デフォルトの名無しさん :2006/07/25(火) 15:20:35
DOS時代にだってあっただろ。

656 名前:デフォルトの名無しさん :2006/07/25(火) 15:32:42
>>654
アドレス空間の節約をしたいのかもしれない。

657 名前:デフォルトの名無しさん :2006/07/25(火) 16:42:31
オーバーレイなつかすぃな。
Windowsなら>>651の言うようにdll化して、
いらなくなったアンロードだろうね。

658 名前:デフォルトの名無しさん :2006/07/25(火) 19:37:30
>>653
リソースにあらかじめ格納しておく方法もあるのか・・・
>>654-657
気分的にexeファイルのメモリ使用量を抑えたかっただけだったりして

659 名前:デフォルトの名無しさん :2006/07/25(火) 19:43:58
(#^ω^)ビキビキ

660 名前:デフォルトの名無しさん :2006/07/25(火) 20:24:34
ttp://www.athomejp.com/goldfish/api/sharedmemory.asp
とかでLPSTRの変数を共有メモリにするのは分かったのですが、

CStringArrayの変数を共有メモリにすることはできますか?


環境は
VC++6.0
WinXP Home
です。

661 名前:デフォルトの名無しさん :2006/07/25(火) 20:32:22
>>660
無理にやればCStringArray自体は出来るかもしれないが
CStringArrayの要素は別に確保されるので共有できないがそれでもいいのか?

662 名前:デフォルトの名無しさん :2006/07/25(火) 20:37:46
>>661
ええと、「CStringArray自体は出来る」というのは共有出来るということなのでしょうか?

やりたいことは
EXE1で作ったCStringArray変数を、
EXE2で参照出来るようにしたいわけですけど。

663 名前:デフォルトの名無しさん :2006/07/25(火) 20:49:13
言い方が悪かったかもしれん。
CStringArrayのインスタンスは配置newで共有メモリ上に構築できるかもしれないが
CStringArray内で確保されるメモリは共有メモリではないし
複数のプロセスから操作すればおかしなことになるし

ようするに無理。

664 名前:デフォルトの名無しさん :2006/07/25(火) 20:52:04
>>663
なるほど、無理なのですね。
ありがとうございました。

665 名前:デフォルトの名無しさん :2006/07/25(火) 23:59:00
VC6.0 で作った HOGE.DLL を VB6.0 で作ったアプリから呼んでいます。
administrators 権限では問題なく動くのに、
power users 権限では、
'HOGE.DLL'の読込に失敗しましたみたいなメッセージをアプリが吐いて
終了します。

HOGE.DLL の DllEntry にブレークポイントを仕掛けても、DllEntry がコールされる
前にエラーが発生することから、 HOGE.DLL が依存している DLL のいづれかが
power users では動かないんだと思います。

こういう状況で、どの dll がエラーの原因となっているのか特定する方法はありますでしょうか?

666 名前:デフォルトの名無しさん :2006/07/26(水) 01:00:01
そもそもHOGE.DLL自体のアクセス制御は問題ないか?

667 名前:665 :2006/07/26(水) 15:12:57
レスありがとうございます。
HOGE.DLL も、HOGE.DLL があるフォルダも、
Power Users で、読み書き実行できるようにしてあります。

668 名前:デフォルトの名無しさん :2006/07/27(木) 00:48:54
VS2005でAfxBeginThread()を使って開始したユーザー インターフェイス
スレッドを作ったのですが、正常終了できません。
どなたか、正常に終了する方法を教えてください。

ExitThread(0)とPostQuitMessage(0)では、スレッド生成画面ごと終了
してしまい、AfxEndThread(0)ではASSERT(pThread != AfxGetApp())
でエラーが発生しています。
AfxGetApp()はウォッチでは文字化けして見れないのですが、immedで
見ると確かにpThreadと同じアドレス値になってます。
スレッドを生成した画面からPostThreadMessage()で WM_QUITを送っても
エラーにはならないのですがスレッドは終了してくれません。

今のところTerminateThread()でしか停止できないのですが、
それではメモリリークが発生するためなんとか普通に停止させる
方法が知りたいと思っています。
何か使用法が根本的に間違っているのでしょうか?

669 名前:デフォルトの名無しさん :2006/07/27(木) 01:31:47
スレッド生成画面って何よ?

670 名前:デフォルトの名無しさん :2006/07/27(木) 01:45:27
>>669
ダイアログ画面のボタンを押すとAfxBeginThread()で複数のスレッドを
生成する処理をしています。
しかしスレッドは動き出すのですが、正常に終了してくれません。

スレッド内からExitThread(0)を呼び出すと最初のスレッドでダイアログ
が閉じて無限ループになり、PostQuitMessage(0)を呼び出すと全ての
スレッドが終了した後でダイアログ画面も終了してしまいます。

671 名前:デフォルトの名無しさん :2006/07/27(木) 07:55:08
>>670
なんでASSERT(pThread != AfxGetApp())でピンと来ないかな。
どう見たってアプリケーションクラスからExitThread呼んでるでしょ。
ExitThreadを呼ぶのは作成したスレッドからだよ?

672 名前:デフォルトの名無しさん :2006/07/27(木) 13:33:37
C++だとワーカスレッド内で定義したオブジェクトのデストラクタが
呼ばれなくなってもいけないからExitThread()は使わない方が委員で内科医?
ワーカスレッドからreturnするだけで充分じゃないかと。
#メインスレッドからExitThread()を呼ぶ間違いも起こり得ないし。

673 名前:デフォルトの名無しさん :2006/07/27(木) 14:20:14
とてつもない馬鹿登場

674 名前:デフォルトの名無しさん :2006/07/27(木) 14:35:23
>>671-672
いえ、それがアプリケーションクラスではなくCWinThreadを継承した
スレッド内で呼んでます。だから困っているんです。
(PostThreadMessage()だけはダイアログから呼んでます)
それから、ワーカスレッドではなくユーザー インターフェイス
スレッドを作っています。
ワーカスレッドでは中断して待たせたりはできないんですよね?

675 名前:デフォルトの名無しさん :2006/07/27(木) 14:44:08
TerminateThread()もダイアログから呼んでました。
これだとスレッドは終了してくれますが、強制中断してスレッドの
後始末をしないらしく、メモリリークが発生します。
SuspendThread()やResumeThread()はまったく問題なく動作するんですが・・・
(こちらももちろんダイアログ側から呼んでます)

676 名前:デフォルトの名無しさん :2006/07/27(木) 14:49:28
>TerminateThread()もダイアログから呼んでました。
            ~~
??

677 名前:デフォルトの名無しさん :2006/07/27(木) 14:59:50
ヒント:PostThreadMessage()

678 名前:デフォルトの名無しさん :2006/07/27(木) 15:51:45
夏休みの成果、モンモウガ多いなwww

679 名前:デフォルトの名無しさん :2006/07/27(木) 16:17:53
>>673
?

680 名前:デフォルトの名無しさん :2006/07/27(木) 18:22:12
ウィンドウをクラス化しようと頑張っています。
ttp://techtips.belution.com/ja/vc/0009/
のwndbase.cpp と〜.h を使用して、ビルドした際に、ウィンドウが
表示されるのを目標にしています。以下、ソースです。

[m(_ _)m]の手前までで、オブジェクトwindow を作りましたが、
この後、何を書いて行けばよいのでしょうか?
windowcreate を記述するのは分かるのですが、どこに記述したらいいのか分からず、
皆さんのお力を貸して頂けないでしょうか?
ビルド後にウィンドウが出るよう、アドバイスを宜しくお願いします。

#include <windows.h>
#include "wndbase.h"

INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
// ウィンドウハンドル
HWND HWnd;

CWndBase* window=new CWndBase();
//m(_ _)m
//window->WndProc;
//delete window;
return 0;
}

681 名前:デフォルトの名無しさん :2006/07/27(木) 18:46:18
>>680
そこの掲示板で作ったやつに聞け
馬鹿

682 名前:デフォルトの名無しさん :2006/07/27(木) 19:04:17
すみません(T_T)
2chの皆さんの方が教えてくれるような気がして。
ウィンドウをクラス化したいと考えてる人はたくさん
いると思いますので、ここに今まで作った方がいて、
何か良いアドバイスを頂けるかと思った次第です。

このサイトの方のソースを必ず使いたいわけではなく、
このソースを使ったほうが早いかなって思いました。

何か良いサイトでもよろしいので、引き続きアドバイス
宜しくお願いします。

683 名前:デフォルトの名無しさん :2006/07/27(木) 19:07:07
作った本人にすごく失礼だと思わないか?

684 名前:デフォルトの名無しさん :2006/07/27(木) 19:22:22
VC++.NET2003です。
MFCのGUIコントロールから派生クラスを作り、
スタティックライブラリにしようと思っています。
描画はGDI+でやろうとしているのですが、
何故かGDI+の方で大量のエラーが出てしまいます。
GDI+を利用するクラスはスタティックライブラリにできないのでしょうか?

685 名前:デフォルトの名無しさん :2006/07/27(木) 19:26:56
>>682
とりあえずここ読んでから質問してくれ。
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/aboutmessagesandmessagequeues.asp
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windowprocedures/aboutwindowprocedures.asp
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/aboutwindows.asp

686 名前:デフォルトの名無しさん :2006/07/27(木) 20:50:26
>>680
そもそも、C++を使わないでウィンドウを作ることはできるんだよな?
C++のクラスにするということは、そのときのプログラムの動きをクラスの枠組みに乗っけてやるということ。
個々の細かな流れは大して変わらない。

687 名前:668 :2006/07/27(木) 21:31:15
出来る限り単純な構成にして、PostThreadMessage()でスレッドの終了が
出来るようになりました。どうもスレッド内で書いていた終了時の処理が
悪かったみたいです。

少しずつ処理を追加して調べてみると、thrdcore.cppの_AfxThreadEntry()を
AfxEndThread()で抜ける際にvectorの例外(out_of_range)が発生していました。
自分の処理でvectorは使っていますが、その行ではエラーが起きてないので無関係
だと思ってたのですが、これが原因でしょうか?
それとも、AfxBeginThread()の戻り値を使用してスレッドのメンバに直接アクセス
してはいけないという決まり事か何かがあるのでしょうか?

688 名前:デフォルトの名無しさん :2006/07/27(木) 21:52:20
>>687
いけなくはないが、複数のスレッドがアクセスする場合
同期してやらないと問題が起きる場合がある。

689 名前:デフォルトの名無しさん :2006/07/27(木) 22:14:21
680です。
ウィンドウズをクラス化することが出来ました。
ありがとうございます。

感謝の気持ちとして、ソースを公開したほうが宜しいでしょうか?
(大した内容ではないですが><)
また、分からないことあったら来ます。

690 名前:668 :2006/07/27(木) 22:23:17
>>688
ありがとうございます。
個々のスレッドがアクセスするメンバは別々の実体でそれぞれのExitInstance()内で
deleteしてたのですが、念のためにPreTranslateMessage()でユーザメッセージを
受け取ってから処理するようにしてみます。
(ネットで調べた他の人のソースではメッセージマップ使ってCWinThread::OnQuit()で
処理してるみたいなんですけど、VS2005ではメッセージマップが選択できないんですよね・・・)

691 名前:デフォルトの名無しさん :2006/07/28(金) 01:05:35
すみません、Visual Basic6のプログラムをVisual C 2005に移植しなくてはいけません。
どのように書き換えればいいのか、教えてください。ActiveXコントロールモジュールを読み込んで、その中の関数を使ったものです。
サブルーチンの一例は、


Public Function SetSerialNum(ByVal lSerialNum As Long) As Long
MG17Motor1.HWSerialNum = lSerialNum
MG17Motor1.StartCtrl
End Function

Private Sub Command1_Click()
SetSerialNum (30808366)
fPosition = 0
MG17Motor1.SetAbsMovePos CHAN1_ID, Text1
MG17Motor1.MoveAbsolute CHAN1_ID, False
End Sub

692 名前:デフォルトの名無しさん :2006/07/28(金) 01:19:12
ヘッダが

public:
long SetSerialNum(long& lSerialNum);
private:
afx_msg void OnBnClickedCommand1(void);

で、cppが

long クラス名::SetSerialNum(long& lSerialNum) {
MG17Motor1.HWSerialNum = lSerialNum;
MG17Motor1.StartCtrl();
}
void クラス名::OnBnClickedCommand1() {
SetSerialNum(30808366);
fPosition = 0;
MG17Motor1.SetAbsMovePos(CHAN1_ID, Text1);
MG17Motor1.MoveAbsolute(CHAN1_ID, False);
}

みたいな感じになると思う。
AcrtiveXコントロールの使い方も変わるだろうが
それ以上にVBのフォームとVCのCWnd派生クラスじゃ使い勝手が
まったく違うからそっちから調べたほうがいい。

693 名前:デフォルトの名無しさん :2006/07/28(金) 01:22:04
ん?
Public Function SetSerialNum(ByVal lSerialNum As Long) As Long
で値返して無いじゃん。まあいいけどwww

694 名前:691 :2006/07/28(金) 01:38:55
>>692

とりあえず、コピーして貼り付けてビルドすると、MG17Motor1が定義されていない、というエラーが出てきます。
VisualCは全くの初心者なのですが、何かで勉強し直した方がいいですね。

695 名前:デフォルトの名無しさん :2006/07/28(金) 05:49:46
エクスプローラ上の右クリック拡張について教えてください!><

696 名前:デフォルトの名無しさん :2006/07/28(金) 06:16:07
レジストリに追加するだけ

697 名前:デフォルトの名無しさん :2006/07/28(金) 08:48:34
>691
まずはソースを公開してくれよ
部分的にあーだこーだ言われても分からん

698 名前:デフォルトの名無しさん :2006/07/28(金) 15:08:39
リストコントロール(じゃなくてもいいかもしれないけど)のカスタムドロー作る時に
NM_CUSTOMDRAWのハンドラ使いますよね。
VC++.NET2003だとリソースエディタからハンドラ作成できるけれど
どうしてLPNMCUSTOMDRAWに勝手にキャストされるの?
↓こんな感じに。

void CHoge::OnNMCustomdrawList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR); ←これ
// TODO : ここにコントロール通知ハンドラ コードを追加します。
*pResult = 0;
}

LPNMCUSTOMDRAW じゃなくて更に次の
LPNMLVCUSTOMDRAW使いたいのにっ!なんで最初からLPNMLVCUSTOMDRAWにキャストしといてくれないの??

699 名前:デフォルトの名無しさん :2006/07/28(金) 15:18:44
ウィザード作った奴に聞けよ。

700 名前:デフォルトの名無しさん :2006/07/28(金) 15:22:35
>>698
別にリストビュー専用じゃないからでしょ。

701 名前:デフォルトの名無しさん :2006/07/28(金) 15:33:02
>>699-700
リストビューから作ったハンドラなのにっ

702 名前:デフォルトの名無しさん :2006/07/28(金) 16:52:45
それくらい自分で直せよ。スケルトン作ってくれるだけでもありがたいと思え。
俺が若い頃は(ry…


じいちゃんばあちゃんの気持ちがわかった希ガス。

703 名前:691 :2006/07/28(金) 17:32:42
>>692,697

目的は単純に、装置制御するプログラムです。
MG17Motor.ocxというActiveXコントローラーが付属されていて、Visual Basic6のサンプルプログラムが付いていただけです。
Visual Baicでは、MG17Motor.ocxをコンポーネンツとして追加して、メインルーチンに

Private Sub Command1_Click()
   SetSerialNum (30808366)
   fPosition = 0
   MG17Motor1.SetAbsMovePos CHAN1_ID, Text1   //Text1 は変数で、この値で装置の状態を変えられます。
   MG17Motor1.MoveAbsolute CHAN1_ID, False
End Sub

と書き込み、実行し、フレームに現れるボタンを実行すると問題なく動きます。
僕の用途では、ボタンなど必要なく、コンパイル後、実行するとすぐに命令が執行されるプログラムの方が好ましいのです。
MG17Motor.ocxをどこに読み込むのか?さえ分かりません。
よろしくお願いします。

704 名前:デフォルトの名無しさん :2006/07/28(金) 17:37:33
>>703
VBのままでいいなら、Form_Load()で実行すればいいよ。
VC++に移植したいのなら、OCXのままだと先ず無理だと思った方がいい。

705 名前:691 :2006/07/28(金) 17:58:58
>>703
有り難うございます。移植は無理だということですね。それでも構いません。
VB6でForm_Load()の中にコマンドを書き込んで実行するとすぐに動きました。
実はこのプログラムのexeファイルを作り、他のプログラムで動かしたいのです。
試してみたところ、ちゃんと動きますが、exeファイルを実行するたびにFormが出てきてしまいます。
このFormを出さない方法、あるいは、実行後Formを消す方法とかないでしょうか?
よろしくお願いします。

706 名前:デフォルトの名無しさん :2006/07/28(金) 18:00:20
Sub Main()

707 名前:デフォルトの名無しさん :2006/07/28(金) 18:00:39
>>705
VBでOCXを取り込んだOCXなりDLLを作ってそれをVCに組み込めばいいと思う.


708 名前:704 :2006/07/28(金) 18:12:41
>>705
なんだ、Formも要らないなら先に書けよ。
それだったら>706のようにMain()に書いちゃえばOK。
つーか、それくらい調べろよって気もするが。

709 名前:668 :2006/07/28(金) 22:37:44
>>688
おかげさまで解決しました、ありがとうございました。

各スレッドにユーザメッセージを送信して、スレッドのPreTranslateMessage()で
終了時のメモリ解放処理とPostQuitMessage(0)をするように変更すると、全ての
スレッドが綺麗に終了するようになりました。
メモリ解放処理をスレッドのメソッドにしてダイアログ側から直接呼び出していた
のが悪かったようです。(予想外に大量のメッセージが溜まっていました)

ただ、他の人のソースに良くあるようなPostThreadMessage()でユーザメッセージを
送信した後にSleep(1000)などとタイミング調整のスリープを入れると、その直後の
WaitForSingleObject((*it)->m_hThread,INFINITE)がロックしてしまいます。
単にタイミング調整してるだけだから無くても正常に動くならいいか、と思ってますが
原因が突き止められないのでちょっと不安・・・

710 名前:デフォルトの名無しさん :2006/07/28(金) 22:44:32
itのcontainerとかitとか*itとか、(*it)->m_hThreadを他スレッドで操作してるとか

711 名前:デフォルトの名無しさん :2006/07/28(金) 23:03:32
itのコンテナはスレッドのアドレスを格納してるんですが、コンテナ自体は
各スレッドを呼び出すダイアログ側がprivateで管理しているので同時に複数の
操作は入らないはずなんです。
(*it)が指しているスレッドは、WaitForSingleObject(INFINITE)の後で
deleteするまで生きてるので参照にも問題は無いようなんです。
普通は処理の終了待ちで入れているはずのSleep(1000)を入れるとロックして
入れないとWaitForSingleObject(INFINITE)はすぐに帰ってくるので、
何か変(想像と逆)ですよね?

712 名前:デフォルトの名無しさん :2006/08/01(火) 21:16:47
ハンドルされていない例外が発生・・・というエラーが出て困っています。
あるクラスを作って、その中にさらにクラスを入れ子にした場合、
この、「ハンドルされていない例外」というのが出てるような気がします。

なぜ、この様なエラーが出るのか?回避の方法は如何様かを
ご教授お願いします。
以下、ソースです。
よろしくお願いしますm(_ _)m

713 名前:デフォルトの名無しさん :2006/08/01(火) 21:17:29
main.h________________________________________
#include "sub.h"
main.cpp______________________________________
#include <windows.h>
#include "main.h"
INT WINAPI WinMain( HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR szStr,INT iCmdShow)
{
CSUB* SUBOBJ=new CSUB();
SUBOBJ->RUN();
delete SUBOBJ;
return 0;
}
sub.h_________________________________________
#include "sub2.h"
class CSUB {
protected: CSUB2* SUB2OBJ;
public:
CSUB();
~CSUB();
void RUN();
};
sub.cpp_______________________________________
#include "sub.h"
#include <windows.h>
CSUB::CSUB(){ }
CSUB::~CSUB(){ }
void CSUB::RUN(){
MessageBox(NULL, "check01", NULL, MB_OK);
SUB2OBJ->XXX(SUB2OBJ->YYY());
MessageBox(NULL, "check03", NULL, MB_OK);


714 名前:デフォルトの名無しさん :2006/08/01(火) 21:18:11
sub2.h________________________________________
class CSUB2 {
protected: bool ZZZ;
public:
CSUB2();
~CSUB2();
void XXX(bool zzz);
bool YYY() { return ZZZ; }
};
sub.cpp_______________________________________
#include "sub2.h"
#include <windows.h>
CSUB2::CSUB2(): ZZZ(false) { }
CSUB2::~CSUB2() { }
void CSUB2::XXX(bool zzz) { MessageBox(NULL, "check02", NULL, MB_OK); }

715 名前:デフォルトの名無しさん :2006/08/01(火) 21:32:05
そりゃ確保されてないSUB2OBJに対してメンバ関数を呼び出して、
しかもそこでメンバ変数に触ってるんだから落ちるだろ。

716 名前:デフォルトの名無しさん :2006/08/01(火) 22:18:22
sub.cpp の最後に }; が抜けてました。すみません。

>715さん
レスありがとうございます。
レスを元に、今、「メモリ 動的確保」 でぐぐって調べています。

この例での、SUBOBJ を作った段階では、
まだSUB2OBJ が作られていなくて、更にそこにアクセスしようと
したからエラーが発生した・・・ということでしょうか?

ご面倒とは思いますが、何卒ご教授お願いします。

717 名前:デフォルトの名無しさん :2006/08/01(火) 22:47:38
はい、それはトムです。

718 名前:デフォルトの名無しさん :2006/08/01(火) 22:50:24
SUBOBJはnewしてdeleteしているだろ。
SUB2OBJだってどこか(と言ってもまず間違いなくコンストラクタとデストラクタ)で
newとdeleteをしなければならない。

ところで、全部大文字のクラス名・変数名きもい。
あと、main.hの存在意義が無いだろ、それ。
さらに、そもそも動的に確保する必要はあるのか疑問。

719 名前:デフォルトの名無しさん :2006/08/01(火) 23:00:21
複数階層のディレクトリを一発で作れるSHCreateDirectory
相対パス指定するとエラー
どうすればいいの?

720 名前:デフォルトの名無しさん :2006/08/01(火) 23:24:30
エラー値を確認。
MSDNで仕様を確認。

721 名前:デフォルトの名無しさん :2006/08/01(火) 23:30:02
>>719
GetFullPathNameはどう?

722 名前:デフォルトの名無しさん :2006/08/01(火) 23:37:41
>718さん
レスありがとうございます。
sub.cppを書き直してみました。(下記参照下さい)

コンストラクタとデストラクタ(つまり@とA)でnewとdeleteを
してみたのですがビルドエラーが出てしまいます。
BCだと無事通ることができました。
何故か分かりませんが、少し自分で調べてみます。
レスをして頂いた方々。ありがとうございます。m(_ _)m

#include "sub.h"
#include <windows.h>

CSUB::CSUB(){
//@CSUB2* SUB2OBJ=new CSUB2();
}
CSUB::~CSUB(){
//Adelete SUB2OBJ;
}
void CSUB::RUN(){
//BCSUB2* SUB2OBJ=new CSUB2();
MessageBox(NULL, "check01", NULL, MB_OK);
SUB2OBJ->XXX(SUB2OBJ->YYY());
MessageBox(NULL, "check03", NULL, MB_OK);
//Cdelete SUB2OBJ;
}

723 名前:デフォルトの名無しさん :2006/08/02(水) 00:27:05
C++を一からやり直せ。

724 名前:719 :2006/08/02(水) 00:59:42
>>721
サンクス。それでうまくいきました。

725 名前:デフォルトの名無しさん :2006/08/02(水) 01:31:04
>>722

クラス定義みてないけどこれはまずいだろ。

@はコンストラクタのローカル変数で、CSUBのメンバ変数のSUB2OBJじゃないからこのnewはメモリリークしてる
AはCSUBのメンバ変数だけど@のSUB2OBJとは別物で初期状態のままの不定値が入ってるから落ちる
BはCSUB::RUN()関数のローカル変数でCSUBのメンバ変数のSUB2OBJじゃない
CはCSUBのメンバ変数だけどBとは別物だから結果はAと同じ

ってか、上なおしてもこの設計だとCSUB::RUN()をよびだしたらアウト。

726 名前:デフォルトの名無しさん :2006/08/02(水) 03:00:11
なんで全部大文字なんだよ定数かよっ

727 名前:デフォルトの名無しさん :2006/08/02(水) 07:27:57
コボラー?

728 名前:デフォルトの名無しさん :2006/08/02(水) 20:23:21
>725さん
詳しい解説ありがとうございます。
理解できました。愚かな質問で申し訳ございません。
また、教えてくれた方々にも感謝しています。
ありがとうございましたm(_ _)m

729 名前:デフォルトの名無しさん :2006/08/02(水) 21:29:54
>>728
次からは、エラーが出たならエラーメッセージくらい書いてね

730 名前:デフォルトの名無しさん :2006/08/03(木) 14:41:39
>>115
と同じcmd.exeに関するエラーに悩まされてます。

ツール>オプション>実行可能ファイルの設定を見直すといいと分かりましたが
できればエラーの出ない(みなさんの)環境での設定項目を
羅列してもらえないでしょうか?

731 名前:nmn :2006/08/03(木) 22:44:43
今年入社した新人です。
質問なんですが、VC++6.0を安く買える方法ないですか?

気合いれて、1万もするVC++6.0の本を買ったんで、
折角だから、家でも勉強したいなと…。


732 名前:デフォルトの名無しさん :2006/08/03(木) 22:45:28
いまさらVC6なんぞ買うな。VC2005EE落として来い。

733 名前:nmn :2006/08/03(木) 23:01:18
折角、
商品名 :プログラミングMicrosoft Visual C++6.0
販売価格:9,975円

買ったのに…。
仕事場の開発環境がVC6.0ってだけで即決してしまいました↓↓

やっぱりVC2005ですかね?

734 名前:デフォルトの名無しさん :2006/08/03(木) 23:43:05
その本だとVC6でMFCなんだろうね

735 名前:nmn :2006/08/04(金) 00:06:43
今まではUNIXでC++の開発だったんですけど、
プロジェクトが変わり、VC++を使うことになりました。

ttp://www.amazon.co.jp/gp/product/4891000503/503-0614484-7271114?v=glance&n=465392&s=gateway

VC2005でもこの本使えますかね…。

736 名前:デフォルトの名無しさん :2006/08/04(金) 00:11:19
>>735
使えません。
さらに言うなら、VC2003などの書籍もさけた方が良いです。混乱の元。

737 名前:nmn :2006/08/04(金) 00:21:44
あ゛う…。
やっぱりダメですか…。
どうしたもんだか…。

まずはVC++6.0を勉強しようかな…。
きっと役に立つ…立ちますよね?
何かいいアドバイスいただけたら幸いです。


738 名前:デフォルトの名無しさん :2006/08/04(金) 00:33:36
>>737
ん?業務で使うのはどっち?
業務で使うほうの勉強をしたほうがいいよ。

ざっくり言うと、VC6の知識はVC2005では通用しないものがほとんどだし、逆もまた真だから。

739 名前:デフォルトの名無しさん :2006/08/04(金) 00:35:52
あーごめん、スレ読んでなかった。

業務でVC6使うなら、VC6の本でいいね。
基本部分以外はVC2005じゃ使えないから、なんとかしてVC6を手に入れることだね。

MSDNには入ってるんだっけ?

740 名前:nmn :2006/08/04(金) 00:38:29
なるほど…。アドバイス有難うございます。

今の業務で使っているのはVC6の方です。
VC6の方で勉強していきます!!

あとはソフトか…。

あ、ちなみに一概には言えないのは承知の上で、
現状でVC6での業務って多いんですかね?
最近はVC2005なんですか?

741 名前:デフォルトの名無しさん :2006/08/04(金) 00:39:35
つーか、VC6ってライセンスは特定個人に与えられるもので、コピー自由だから、
会社に断って家のPCにインストールさせてもらいなよ。

742 名前:nmn :2006/08/04(金) 00:42:56
定かではありませんが、たぶんMSDNには入ってないと思われます。

今のプロジェクトの場合、
ライブラリは自分で作ってるとか言っておりました。

743 名前:nmn :2006/08/04(金) 00:44:20
コピー自由なんですか?
なるほど!有難うございます。
明日会社で聞いてみます。

744 名前:デフォルトの名無しさん :2006/08/04(金) 00:46:41
>>743
会社の人は知らない可能性があるから、もしそうなら、コピーが自由だってことは
EULA.txtに書かれてるって教えてやれ。

745 名前:デフォルトの名無しさん :2006/08/04(金) 00:49:54
会社にひとつのパッケージしかなかったりして・・・

746 名前:nmn :2006/08/04(金) 00:56:22
おぉ!知りませんでした!
ここで質問してみてよかった!

ありがとうございます!!

747 名前:デフォルトの名無しさん :2006/08/04(金) 01:03:21
明日上司に言って規約違反だったことが判明して>>746の首が飛ぶに1.dll

748 名前:デフォルトの名無しさん :2006/08/04(金) 01:41:44
VC6の案件は急速に減ってきていますが、公的機関向け制御系を中心に根強い人気を保っています。

749 名前:デフォルトの名無しさん :2006/08/04(金) 07:05:59
>>747
んな適当なこと言ってないで、早く就職したらどうだ?

750 名前:デフォルトの名無しさん :2006/08/04(金) 07:59:40
>>747
なんか問題あんの?


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.