★初心者にVisual C++を教えるスレ★ Part13
1 :
デフォルトの名無しさん :
04/07/05 16:05
立ててやろうかと思って用意してるうちに立っちゃったかよ
乙〜
9 :
デフォルトの名無しさん :04/07/05 19:29
SE関係の会社に就職しようとおもってハローワークあさってたんですが 備考の欄に実務経験2年以上とか書かれてるんですが これってどういうことなんですか? どこかで2年以上仕事してるってことですか? そのしごとはプログラムとは関係ない仕事でもいいんですか?
板違い。マ板逝け
994 名前:990[sage] 投稿日:04/07/05 14:57 どんなときに必要なんでしょうか?
実務って言ってるんだから、実務だろ
14 :
デフォルトの名無しさん :04/07/05 20:48
SE関係の仕事での実務って やっぱプログラムにかかわるの仕事のことですか?
>>14 んなもん適当にうそいっときゃいいんだよ。
おまえに実力があればの話だけど。
>>14 それを聞かなければわからんということは、
オマエは確実に募集基準を満たしていないと思っていい。
だいたい何でこのスレで聞くのかもわからんし。
だからマ板行けっつの
18 :
デフォルトの名無しさん :04/07/06 06:08
簡単なプログラムのコードを書いたのですが、コンパイルの仕方がわかりません。どうすればいいのですか?
前スレで外部クラスに関してあーだこーだと質問していた馬鹿者ですが外部のクラスのヘッダに処理を書く (インラインであったりテンプレートクラスなのでヘッダに処理を書いておいたり) 場合coutやstringを使うためにはusing namespace std;を書いておかないと動かなかったのですがそれはよくないやり方だとご指摘をいただきました。 この場合using namespace std;をつかわないで使うにはstd::coutなどとすればいいのでしょうか。またstringに関してはどうなんでしょうか。
このスレでいいのかよくわかりませんが、質問です。 今までVBしかやったことなかったのですが、 会社からの要請で今VC++を勉強しています。 メッセージ+APIを使ったWindowsプログラミングの基礎は だいたいわかったのですが、MFCがよくわかりません。 翔泳社の本を読んでいるのですが、 やたらめったらにクラス名や変数名が羅列してあって、 とても覚えられません。 MFCについての有効な学習方法や わかりやすい本をご存知の方がいましたら 教えてください。 お願いします。
>>20 翔泳社のMFCってハーバートシルトの本?
アレはMFCを理解するには最良の本だと思うが、
初心者が初めて読むにはどうかなと思う
それに20のC++に対する言語理解はどの程度だろうか?
MFCはクラスライブラリだからC++の知識は必須
本だと
3週間完全マスターVC6とかはどうだろうか
翔泳社もMFC関連の本結構出しているんだなぁ 私はハーバートシルトの標準講座MFC6..0 しか読んだことないが でもあの本のおかげでMFCに対するアレルギーはなくなったな
>>20 がどういうところで詰まっているのかわからんから何とも言えんけど、
MFCを使ってソフト作ってみる本だったら、どれもあまり大差ない気がするから、
慣れるしかないんじゃないかい?
MSDNライブラリを見れば良いから、全部暗記しなくても、
要領さえわかってくれば何とかなると思うよ。
ドキュメントテンプレートって何じゃこりゃ? とか、
このマクロって何? とかいう話で気持ち悪いんだったら
ソース読むのが早い。
26 :
デフォルトの名無しさん :04/07/06 08:37
こんにちわ。 基本的なことで、つまらないかも知れませんが質問です。 いま、MFCでAfxBeginThread()を使って、 マルチスレッドを作っているんですが、 スレッド内でダイアログにあるListBoxの項目を追加しようとすると、 デバックが止まってしまうんです。 もしかしたら、スレッド内ではダイアログにあるリソースを 操作したりしてはいけないのでしょうか? ひとしきり検索してもわからなかったです。 申し訳ないですが、教えてください。 よろしくお願いします。
「作って分かる・・・」系の初心者向けの本でソースの作成手順を追う作業を 一通りやったら、MFC使ったプログラミングの基礎は理解できると思うけど。 そこから先は数をこなして、「コレをやりたいけどどうしたら良いかな?」という シチュエーションに一つ一つぶつかっていく積み重ねだと思う。 MFCライブラリのリファレンス本(辞書タイプの)を一冊手元に置いて、ことある 毎に眺めるようにすれば、ページを繰るたびに色んなクラスやメンバの情報が 目にはいるし、使った部分には書き込みもできるからお薦め。これについては オンライン・ドキュメントより学習効果が高いと思うよ。
>>26 問題なくできますよ。
ただし、ワーカスレッドは元のスレッドとは別の世界。
喩えクラスのメンバ関数の振りをしていたとしても黙って元スレッドの資源が使えるわけじゃありません。
ワーカスレッドにポインタでも渡すようにしてそこからリストボックスを辿るようにしないといけません。
>>26 別スレッド間でのメッセージ処理はかなり危険だよ
コントロールの関数は内部的にはSendMessageを呼んでいる
SendMessageは、メッセージが戻ってくるまで呼び出し側に制御が戻らない
例えばBスレッドに存在しているコントロールに対してAスレッドでCriticalSectionを使用して
SendMessageを呼び出し、そのメッセージを発生させたことで発生するそのほかのメッセージハンドらを
Bスレッドで受けたときに再びCriticalSectionを使用するとデッドロックが発生する
一昨日も同じようなことをしようとしている人がいたのでこの注意をしようと思って
すっかり忘れていた
30 :
20の者です :04/07/06 09:16
すみません、20を書き込んだ者です。 自分の勉強の道筋としては、 ソフトバンクの「新C++言語入門ビギナー編」でC++を勉強し、 翔泳社の「プログラミング学習シリーズVisual C++」の1と2を読んで APIやクラスについて勉強しました。 それで今その本の3(MFCについて書かれている)を読んでいるのですが、 やたらめったらにクラス名や変数名が列挙されていて覚えられないのです。 それでもっといい勉強法や本があったら教えてほしいと思いました。 よろしくお願いします。
全て覚えられたら神。 覚えるのではない、感じるのだ。
>>30 階層図とかは無視していいよ
しばらくやっていれば必要なものは嫌でも覚えるし
>>30 そりゃ出てくるもの全部覚えられる人はいないだろう。よく使うようなCStringなんかの
メンバは一通り覚えることもあるだろうが、それも使っていくうちにそうなるもの。
とにかく一度使って自分のプログラムの中にソース例を残しておく。何をどう使ったか
は忘れても、「あのプログラムの中でああいう動作をさせた」ということを覚えておけば
次に似たようなことをするときに前やったソースを見れば良い。頻繁に使うなら覚える
だろう。そうでもないなら、毎回そのブロックをコピペで良い。そうやってコピペできる
ようなソースをためていくことだ。
>>30 オレもその本で持ってるから、今ざっと見てみたけど、
難易度的には1巻から3巻まで変わらんように見える。
AppWizardで書かれたコードで混乱しているのかな?
いきなり全部の意味を理解するのは無理だから、
説明されているところだけ、ふ〜んって感じで読んで理解していけば
良いと思うよ。
んで、この本読んでもさらっとしか書いていないから、
意味不明なところは残ると思うけど、
それは必要になったとき調べていけば、そのうち使えるようになる。
いきなりの質問でスミマセン。
演算子のオーバーロード(なんでしょうか?)についてなんですが演算子の定義をヘッダもしくはそのクラスのcppファイルに定義する方法がわかりません。
これだけのでは意味がわからないのでコード置いておきます。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_24/kudasitu.txt bool operator<(const Hito& a, const Hito& b){return a.GetName() < b.GetName();}をヘッダの中に書いてしまうと引数が多すぎますとエラーが出てしまい動きません。
このコードのbool operator<(const Hito& a, const Hito& b){return a.GetName() < b.GetName();}の部分を外部のヘッダなりcppになりに記述するにはどのように変更すればよいのでしょうか?
>>28 さん
>>29 さん
ありがとうございます。
今まで理由もわからず悩んでましたが、
これでなんとか光明が見出せそうです。
本当にありがとうございました。
38 :
デフォルトの名無しさん :04/07/06 11:07
Visual C++ 6.0 で、コマンドライン引数を受け取って処理をするプログラムを作ったのですが コマンドライン引数を入力するためにはどうしたらいいのでしょうか?
一瞬で自己解決しました お騒がせしました
>>36 (方法その1)
グローバルな関数として定義
class Hito {
// 中略
};
bool operator<(...) // ここ(クラス定義の後)に書く。
(方法その2)
Hitoクラスのメンバ関数として定義
class Hito {
// 中略
bool operator<(const Hito& rhs) { return GetName() < rhs.GetName(); }
};
>>36 >このコードのbool operator<(const Hito& a, const Hito& b){return a.GetName() < b.GetName();}の部分を外部のヘッダなりcppになりに記述するにはどのように変更すればよいのでしょうか?
と書いているあたりから,40の答えは36に対する答えとしてはちょっとずれてるかも知れない.
まず,mainの直前のbool operator<(const Hito& a, const Hito& b){return a.GetName() < b.GetName();}を除いて,
1. 普通の実装方法
Hito.hのHitoクラスの定義あとにプロトタイプ
bool operator<(const Hito& a, const Hito& b);
を定義する.Hito.cppを新たに作り,
#include "Hito.h"
bool operator<(const Hito& a, const Hito& b){return a.GetName() < b.GetName();}
と実装する.
2. インライン関数として実装する場合
Hito.hの最後に
inline bool operator<(const Hito& a, const Hito& b){return a.GetName() < b.GetName();}
と実装する.この場合Hito.cppは作らない.
(41の続き) これは40の(方法その1)の定義に対する実装方法ですが,(方法その2)の定義に対しても同じことが言えて, 1. 普通の実装方法 class Hito { // 中略 bool operator<(const Hito& rhs); }; を定義する.Hito.cppを新たに作り, #include "Hito.h" bool Hito::operator<(const Hito& rhs) { return GetName() < rhs.GetName(); } と実装する. 2. インライン関数として実装する場合 class Hito { // 中略 bool operator<(const Hito& rhs) { return GetName() < rhs.GetName(); } }; とクラス定義内で実装するか, class Hito { // 中略 bool operator<(const Hito& rhs); }; inline bool Hito::operator<(const Hito& rhs) { return GetName() < rhs.GetName(); } とクラス定義外で実装する.
43 :
教えてください :04/07/06 14:36
作成したプログラムをビルドして配布したいのですが VBみたいな実行可能ファイルを作る方法がみあたらなくてどうすりゃ いいのかわかりません。 installshield for VC++とかいうのもどこにもついてないみたいだし・・・・・・ プロジェクトのデバッグフォルダの中にあるexeファイルをそのまま配布 したら駄目ですよね??? 使っているのはVC6.0PROです。
46 :
教えてください :04/07/06 14:52
>>44 ,45
え??これでいいんですか?
ちなみに
デバッグフォルダの中にあるほかのファイルは一緒に渡さなくてもいいんですか??
個人制作のソフトならむしろインストーラつけないでくれ。
>>46 exeだけで動くのがCのいいところの一つだと思うのですが・・・
>>46 配布するならReleaseバージョンでね
>>46 のプロジェクトはreleaseにするとアクセス違反で落ちるに3000ぬるぽ
>>46 デバッグビルド版の配布はライセンス違反。
かならずリリースビルドした実行ファイルを配布すること。
その際に、Dependency Walker を使って依存している DLL をチェックして、
その DLL の配布の仕方を MSDN や他ライブラリのドキュメントを見て、
インストーラを作るなり同じフォルダに同梱して圧縮するなりして配布すればおk
53 :
教えてください :04/07/06 15:52
>>51 リリースビルドしてみますた。
単なるwindows.hしかインクルードしてないプログラムでも
Dependency WalkerでDLLをチェックしたりしてみると
なんかDLLに依存してる、ってことはあるんでしょうか。
なんだかDependency Walkerで調べてみたんですがパスが不正ダヨンと
言われてとたんにめんどくさくなってしまいました。
多分アドレスの中にあるアカウント名が日本語でしかも文字化けしてる
せいだと思うんですが・・・
日本語が入ってないパスにexe置け
55 :
教えてください :04/07/06 16:07
弱りますた・・・・・・ なんだか大量のDLLがでてきました。 でてきたDLLはすべてリリースビルドしたexeに同梱するとか 決められた配布方法に従うとかして 全部同梱しなくてはならないんですかね?? これは別にどんなマシンにでもはいっとるから同梱しなくてもいいよチミ、 っていう奴はなんでしょうか。 めんどくさくなってきてしまいました
>>55 キミは多分、とりあえず知人にexeだけ配ってみて足りないdllを
探した方が早いと思うぞ。kernel32.dllが何かとか知らんだろうし。
58 :
教えてください :04/07/06 16:22
KERNEL32、USER32、GDI32をトップに以下遥かなる下層まで延々と枝分かれの枝が伸びて 大量のDLLが表示されていました
お前の作ったプログラムなんか怖くて使えない。 プログラム作るのは勝手だが、人に迷惑かけないように 最低限のテスト環境ぐらい用意しとけ
典型的なヴビ厨だな・・一生VBやってた方が幸せになれるぞ。
61 :
教えてください :04/07/06 17:10
で、結局kernel32、user32、Gdi32はウィンドウズの一部だから リリースビルドしたexeファイルに同梱する必要などないと思っていいでしょうか
横レススマソ Dependency Walkerの無いVS.NETはどうやって調べるの?
付いているはずだが? スタートメニューには出ないけど、ちゃんとインストール されてるぞ。
65 :
デフォルトの名無しさん :04/07/06 18:31
vc初心者です メッセージボックスについてなのですが、 メッセージボックスの下の方に着くボタンの名称を"AUTO"/"MANUAL"/"CANCEL"と 言うようなボタン表示にしたいのですが、どのようにすればよろしいのでしょうか?
出来ません。無理やり変えることはもちろん出来るけど、 メッセージボックス程度ならダイアログエディタで自作 する方が簡単です。
>>65 SetWindowsHookExでCBTフックをインストールして
フックプロシージャの中で適当にメッセージ拾って
その中でSetWindowText汁。
68 :
デフォルトの名無しさん :04/07/06 19:18
ありがとうございます ダイアログを自作する方法が簡単に出来そうなので、それでいこうと思います
コンパイルとビルドってどう違うんですか?
猫でもわかるプログラミングとか売ってるのか 違うの買って来たよ ゜д゜)鬱死・・・
>63 PEPROBEとか言うのもある
>>69 コンパイルは、そのファイルだけ構文チェックされ中間ファイルになる。
ちょっとエラーになるかどうか知りたいだけなら、こっちのほうが速い。
ビルドは、コンパイル後にリンクして実行形式ファイルになる。
ビルド対象が複数あれば、それなりの時間がかかる。
ボタンを、アプリケーションが起動してから、Createすると、 Detected memory leaks! Dumping objects -> {83} client block at 0x003F5720, subtype c0, 80 bytes long. a CButton object at $003F5720, 80 bytes long Object dump complete. というコメントが、デバッグ時に出ます。 でも、ボタンは普通に表示されてるんですが、 こいつはいったい、何を意味してるのですか?
Detected memory leaks! 訳せる?
ごめんなさいボクがバカでした。 ちゃんと調べてきます。
WindowsXP、VC6でプログラム書いてるんですが、リンクの張り方が分かりません。。。 例えば、 main.c _______________________________________ #include <stdio.h> #include "rink.h" void main () { print(a,b); } ------------------- rink.c ------------------- #include <stdio.h> #include "rink.h" void print(a,b) { printf("a*b=%d\n",a,b); } ------------------- rink.h ------------------- extern int a= 5; extern int b= 10; extern void print(int ,int); -------------------- を実行すると rink.obj : error LNK2005: _b はすでに main.obj で定義されています rink.obj : error LNK2005: _a はすでに main.obj で定義されています LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/rinktest.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー というエラーが出ます。どうやったらビルドできるようになるんでしょうか?
#includeって何をしているか知ってる? ただ単純にソースに指定したファイルを挿入しているだけなんだよ つまり main.c------- #include<stdio.h> extern int a= 5; extern int b= 10; extern void print(int ,int); void main () { print(a,b); } rink.c---------- #include <stdio.h> extern int a= 5; extern int b= 10; extern void print(int ,int); void print(a,b) { printf("a*b=%d\n",a,b); } と同じ 今回の問題点は、externと変数の代入を同時に行っているって言うこと 変数の代入を行っているということはそこで変数が実体化してしまう ということは・・・・後は自分で考えてみてね
>>77 アドバイスありがとうございます!
つまり2重に代入してしまうからエラーが起こるということでしょうか?
rink.hでの代入をやめて、main.cで、
#include <stdio.h>
#include "rink.h"
void main ()
{a=5;
b=10;
print(a,b);
} のようにしたら
main.obj : error LNK2001: 外部シンボル "_b" は未解決です
main.obj : error LNK2001: 外部シンボル "_a" は未解決です
LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です
Debug/rinktest.exe : fatal error LNK1120: 外部参照 3 が未解決です。
link.exe の実行エラー となってしましました・・・
他にも色々やってみたんですがだめでした。
77さんの言わんとしている事と自分がやっている事は違うんでしょうか?
何度もすみません・・・。
スレ違いにも親切なスレですね
extern int a; は、砕けた言い方をすると 変数aの実体はこのソース上には無いけれど(リンクするときには見つかるはずなので) このソース内で使いますという宣言し、変数の実体を作らない。 一方 extern int a = 1; では、上記の意味と違い、変数aが値1で初期化され実体化する。 77のソースを見てもらえば分かるとおり、main.c,rink.cで後者の宣言をしているため a,bがそれぞれ2つ実体化してしまう externの意味はわかってもらえただろうか? 78のソースでは逆にどこにも実体が存在していないことになる ヒントというか回答だが extern int a; int a = 1; extern int a;を#include"rink.h"に置き換えると・・・・
rinkって.... スケートでもするかいな?
83 :
20と30を書き込んだ者です :04/07/07 12:40
すみません、20と30を書き込んだ者です。 皆さんのご意見を見ると 翔泳社の「プログラミング学習シリーズVisual C++」の3は良い本のようなので わからないところはあるにしろ、 最後までこの本を読んでみることにしました。 それで改めて皆さんに質問です。 この本は初心者向けだと思うのですが、 この本を読んだ後に読むような中級者・上級者向けの本で お勧めの本はありますか? 何かありましたら教えてください。 よろしくお願いします。
>>83 の参考にはならないかもしれないけど、
シルトの 標準MFC 6.0 を読んだ後は MSDN だけ見てれば困らないんじゃないかな。
ありがとうございます。ビルドが通りました。 もうちょっと勉強します・・・
インポートできないビットマップってあるんですか? インポートしようとしてもできるビットマップとできなビットマップがあるんですが。 インポート→ファイルを開く ってやってもすぐ消えてしまうんですが。
ちょこっと前に出たビルドしたexeファイルについてなんですがvc++から実行すると「press any key continue」となって何かキーを入れれば終了するのですが、エクスプローラ上から実行すると勝手に閉じてしまいます。 これが普通なのか違うのかわからないのですがどうなんでしょうか?
>>87 プログラムの実行が終わったらプロセスが消滅するが正常。
IDEから実行したときにすぐ閉じないのは、
別のプログラムからそのプログラムを起動してるから。
89 :
デフォルトの名無しさん :04/07/07 21:08
age
>>87 コマンドプロンプトから実行したら実行後
c:\>
に戻るだろ
今、VNCのようなものを作っていて接続先のカーソルを動かせてはいるのですが、クリックした時 接続先のデスクトップのアイコンをクリックさせる処理がわかりません。 どなたか教えて下さい。お願い致します。
>>90 閉じてしまいます。
外部のHDDから実行しているんですがそれが問題ですかね
コンソール使えない人間がコンソールプログラムを作ってるのが大きな間違い。 すこしはコンソールの使い方ぐらい勉強しろ。
95 :
デフォルトの名無しさん :04/07/08 13:21
よろしくお願いします。 void openLogFile(const string& path) { ofstream logfile; logFile.open(path.c_str(), (ios::out | ios::app), filebuf::sh_read); } このようにファイルをオープンしたかったのですが、「error C2039: 'sh_read' : 'basic_filebuf<char,struct std::char_traits<char> >' のメンバではありません。」といわれしまったので、とりあえずintならいいだろうと logFile.open(path.c_str(), (ios::out | ios::app), 0); こうしてみると、「error C2661: 'open' : 3 個の引数を持つオーバーロードされた関数はありません。」となりました。 そこで、 logFile.open(path.c_str(), (ios::out | ios::app)); こうすると正常にコンパイルできました。 なぜ第三引数をみてくれないのでしょう。 ofstreamのコンストラクタにわたしても、同様に「3 個の引数を持つ…」になります。 ヒントをご存じの方、いらしゃいませんか? 環境: Win2kSP4 Visual Studio 6.0 SPなしとSP6で確認
描画について質問させてもらってもいいでしょうか WM_PAINTメッセージ処理部分でペンを作って描画しているのですが 描画するたびにいちいちペンを作ったりしてるのがすごい気になってます WM_CREATEメッセージで全てペンを作ってしまって そのペンを使いまわしてやったほうが処理が早くなるのでしょうか
自己解決しました。 実装が変わったのが原因のようです。
99 :
デフォルトの名無しさん :04/07/08 15:47
>>98 なんで実装が変わったのか分かるなら,解説をよろしく.
当方の環境はg++(3.3.4)で,ヘッダファイルをsh_readで検索かけたけど,やはり見当たらなかった.
Visual C++スレなのでレス遠慮してたんだけど.
>>96 それぞれ10000回まわしてみました
毎回作る・・・1953ms
WM_CREATEで作ったやつに持ち替える・・・1328ms
皆様方、相反するレスありがとうございます
>>101 わざわざ試していただいてありがとうございます
やはり予想通り多少速度差が出てくるみたいですね
あらかじめ作成方式で組んで行くべきなのかなあ
>>103 速度は多少速くなりますけど、常時占めるメモリの量がペンの分増えますよね
その辺のバランスを考えてベストな方法を選べということですかね
fopenが失敗するので困っています。 ヘルプを見るとfopenが失敗するのは ファイルが存在しない時とかいてありますが、 同じ個所のfopenが成功したり、失敗したりするのです。 パラメータを変更したりしてみましたが、同じです。 fopenが失敗する原因には、どんなものが考えられるでしょうか?
>>106 >失敗する原因
お前の使い方。
又はお前の説明能力。
>>106 共有違反とかか?
Cじゃないとダメなの?win32APIとかMFCとかのファイル処理ならエラー内容を
取得しやすいし分かりやすいと思うけど
名前欄にsageって書いてる時点で(ry
110 :
デフォルトの名無しさん :04/07/08 21:58
(2n-1)! を計算するプログラムを作ってみたのですが n=2で計算すると計算結果が9になってしまいます。。 どなたか間違いを指摘していただけるとありがたいです。 for(int m=1;m<=n;m++) a=a*(2*m-1);
aの最初の中身は?
112 :
デフォルトの名無しさん :04/07/08 22:10
a=1です
113 :
デフォルトの名無しさん :04/07/08 22:15
ちなみに n=3で計算すると3375になります。 なぜなんでしょう・・・
>>113 for節の中で,
a,m,nの中身を表示させるようにして実行すると何と表示します?
例えば,n=2やn=3で.
>>113 プログラム全部見せて。
ついでに(2n-1)!だったら
for (int m = 1; m <= (2 * n - 1); m++) a = a * m;
じゃない?
>>110 が計算してるのは(2n-1)!じゃなくて
2n-1
Π m
m = 1
ちがう n Π (2m-1) m = 1 だった。
#include<iostream.h> #include<conio.h> #include<math.h> const double Pi=3.14159263; main() { cout << "整数nを入力してください。\n"; int n; cin >> n; double a=1,b=0,c=0; for(int i=1;i<=n;i++){ for(int m=1;m<=n;m++){ a=a*(2*m-1); } b=pow((-1),(i-1)); c=c+(1/a)*b*pow((Pi/2),(2*i-1)); } cout << "答えは" << c << "です。\n"; getch(); return(0); } for節の中で表示させると n=2の時 1 3 3 9 n=3のとき 1 3 15 15 45 225 225 675 3375 になります。。 アドバイスを見てもうちょい考えてみます。。
for節の中でmを表示させてみたのですが 何故か3回目の処理でm=1に戻ってしまっています。 n=2の時 m=1,a=1 m=2,a=3 m=1,a=3 m=2,a=9 と処理されてしまっています・・・。
なんとアドバイスしたらよいのやら....
なんとなく原因が分かりました・・・。 for文が2重になってたのが原因ですね。。 なんとか直してみます。
>>121 ひとつ確認したいんだが
n=2のときは (2*2 - 1)! = 3! = 6
n=3のときは (2*3 - 1)! = 5! = 120
を求めるんだよね?
>>122 そうです。
今自分でも気づきました・・・。
上記の式だと1*3*5*7・・・をやってしまってますね・・・。
意味不明ですみませんでした。。
なぜ階乗の計算でπだのpow()だのがでてくるのかと(ry
>>124 上記の式は
S=π/2 - 1/3! * (π/2)^3 + 1/5! * (π/2)^5 - ・・・・ + 1/(2n-1)! * (-1)^(n-1) * (π/2)^(2n-1)
に任意のnを計算する式だったので。。
もっとも、(2n-1)!でかなり謎い事をしていましたが・・・
>>118 どうでもいいが、 Pi=3.14159265 だ。
最近の教科書ではπ=3なんだっけ?
およそ3・・・とかだったっけ?
およよ
とてもVisual C++とは思えない アメリカ映画で日本、中国、韓国がごちゃまぜで出てきたような複雑な気持ち
133 :
デフォルトの名無しさん :04/07/09 11:47
VC++7.1にする。
135 :
デフォルトの名無しさん :04/07/09 12:51
>>134 しかし、エラーが出たコードは一年も前にコンパイルが通っていたものです。
開発PCを移してコンパイルしたら通らなくなったんです。
エラーメッセージみてないから何とも
MFCとDirectShowを使って、aviを再生しようとしています。 メインウィンドウではなく、新たにウィンドウを作れば、表示されるのですが、 メインウィンドウに表示しようとすると、うまくいきません。 どうしたらよいでしょうか、よろしくお願いします。
138 :
デフォルトの名無しさん :04/07/09 13:24
>>136 エラーメッセージはこんな感じです。
wstring wstr;
string str;
mbstowcs( wstr.begin(), str, wstr.length());
↓
error C2664: 'mbstowcs' : 1 番目の引数を 'struct _STL::_DBG_iter<class _STL::_Nondebug_string<unsigned short,class _STL::char_traits<unsigned short>,class _STL::allocator<uns
igned short> >,struct _STL::_Nonconst_traits<unsigned short> >' から 'unsigned short *' に変換できません。 (新しい機能 ; ヘルプを参照)
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
vector< BYTE > buffer;
vector< BYTE >::iterator i = buffer.begin();
*(LPDWORD)i = DWORDの定数;i += sizeof(DWORD);
↓
error C2440: 'type cast' : 'struct _STL::_DBG_iter<class _STL::__vector<unsigned char,class _STL::allocator<unsigned char> >,struct _STL::_Vector_nonconst_traits<unsigned ch
ar,unsigned char *> >' から 'unsigned long *' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。
#define NDEBUG を追加したら直りました。 でも理由がわかりません。 どうしてでしょうか?
>>139 1年前とやらは NDEBUG をつけてたのかい? (ソースに限らず)
141 :
デフォルトの名無しさん :04/07/09 14:44
>>140 自作ヘッダにこんな一文がありました〜。
このせいだったみたいです。
#ifdef NDEBUG
#undef _STLP_DEBUG
#else
#pragma warning(disable:4786)
#define _STLP_DEBUG 1
#endif
設定ではデバッグビルド時ではNDEBUGは定義されず
リリースビルド時では定義される形になっていまして
「_STLP_DEBUG 1」が定義されると上記エラーが出るようです。
これをOFFにします。
お騒がせしました、ありがとうございました。
.NET2003を使っています。演算子のオーバーロードについて質問します。 ビルド時に LNK2019: 未解決の外部シンボル "class Vector __cdecl operator-(class Vector,class Vector)" (??G@YA?AVVector@@V0@0@Z) が関数 "int __cdecl CheckForCollision(struct _RigidBody *,struct _RigidBody *)" (?CheckForCollision@@YAHPAU_RigidBody@@0@Z) で参照されました。 こういうエラーが出ます。オーバーロードはRigidBody構造体で定義 しています。
訂正 × RigidBody構造体 ○ Vectorクラス
昨日は名前にsageと書いてすみませんでした。 慌てていたもので。 何とか自己解決しました。 理由は、カレントディレクトリが 他の処理を実行中に移動してしまう場合があるということでした。 お騒がせしてすみませんでした。
>>142 リンクエラーのようですが,
Vectorクラスの定義を上げてもらえると話が進めやすいです.
でかければ,問題の演算子の部分だけでも.
>>142 あと問題の演算子がどのファイルで実装されているのか.
それで新たに質問です。 僕はC++も初心者なので、まだわからないことがあります。 staticとexternについてなのですが、 <A.cpp> static char MOZI[999]; char KOTOBA[999]; <B.cpp> extern char KOTOBA[999]; という二つのソースファイルがあるときに、 Bのファイルが実行中のときは、 static変数MOZIの値を参照できるのでしょうか? またextern宣言したKOTOBAの値を参照できるのでしょうか? すみませんが、教えてください。
>>147 まず自分でやってみる.
基本です.
それで何故そうなるのか分からなければ,
ググるなりここで聞くなりするとよいでしょう.
説教臭くて申し訳ないですが「C++も初心者」と書かれてるので説教してみます.
>>147 気悪くされないで下さいね.
ようするにやってみれば,分かると思いますよ.
>>145 Vectorクラスではinline Vector operator+(Vector u, Vector v);
このように定義しています。*,/,-も同様。宣言は
inline Vector& Vector::operator+=(Vector u)
{
x += u.x;
y += u.y;
return *this;
}です。実装しているのはWinMain関数の内部です。
実は147は身の回りにコンピュータがない環境で ひたすら文献を頼りにC++を学んでいるとすれば, 理解できなくもないですけど.
>>151 あなたの言う「実装」とは?
+,*,-,/は定義してる?
「宣言」,「定義」,「実装」の言葉使いが...(汗) class Vector { inline Vector operator+(Vector u, Vector v); }; と inline Vector& Vector::operator+=(Vector u) { (略) } は別物です.
142のエラーメッセージを読むに, int __cdecl CheckForCollision(struct _RigidBody *,struct _RigidBody *) でVectorクラスのオブジェクトの引き算をやってることと思います. コンパイルは通ってるようなので,operator-の宣言はあるのだと思います. 話をこの引き算オペレータに限定しましょう. 1. この引き算オペレータの宣言(プロトタイプ宣言)はどこでされてますか? 2. この引き算オペレータの定義(動作内容を記述した部分,実装)はどこでされてますか?
すいません VisalCのスレはどこですか?
>>138 begin()やend()等が返すのはiteratorであって、T*ではない。
っつーの、FAQじゃなかった?
data()やc_str(),&[0]を使うのが定石。
すいません Visual C++のスレはどこですか?
161 :
デフォルトの名無しさん :04/07/09 17:41
private voidって何ですか
どうもすみません、いきなり聞いてしまって。 自分でも確認してみました。 staticはだめだけど、 externはOKでした。 それで正しいですよね。 何か追加コメントがある方はお願いします。
それで今度の質問は調べてもわからないので教えてください。 プロパティシート(ダイアログボックスを複数くっつけたもの)を 作っています。 まずダイアログボックスを作りました。 次にCPropertySheetクラスでシートを宣言し、 CPropertyPageクラスをダイアログの数(2つ)だけ宣言しました。 それで次にDDXを作ろうとしたら、 ラジオボタンのコントロールIDがClassWizardのメンバ変数の 追加画面に表示されません。 エディットボックスなどは正常に表示されるのですが。 これは仕様なのでしょうか? それとも僕のやり方がいけないのでしょうか?
(1)グループ属性つける (2)メンバ変数追加 (3)グループ属性はずす
普段はbcpadとbolandのc++で満足しているのですが、学校でvisual studioを配布され入れてみました。 すると、やたらとソフトを起動するとメモリーがreadになれませんでした。とかいうエラーが頻繁に発生するようになりました。 デバックを選択すると、Visual cが起動するのですが、これは何か監視しているツールがインストールされたのでしょうか? サービスパックを入れても関係ないみたいです。 VisualBasicなら何も起こらないのですが。
>>167 > すると、やたらとソフトを起動するとメモリーがreadになれませんでした。とかいうエラーが頻繁に発生
それはそのプログラムにおかしなコードが入ってるってこと
> デバックを選択すると、Visual cが起動するのですが、
システムがバグったプログラムを食ったときバグを検証するためにツールを使うか
ご親切にも尋ねてくれているだけ
>>168 格安のビデオキャプチャーソフトのWinFASTとかいうやつの、録画ソフトを起動すると
エラーができます。出ないときもあります。
VisualC++を入れないと、エラーは出ません。
録画ソフトがおかしいとしても、直せないので、このエラー回避は出来ませんか?
>>169 大丈夫、WinXPならVisualStudioを入れなくてもエラーがでるから。
>>169 つーか
プログラムやってるくらいの人なら常識で考えたら分かるだろうけど
他の一般プログラムでエラー出てもVCとは関係ないだろ
172 :
デフォルトの名無しさん :04/07/10 20:25
>>171 そうでもないだろ。
VC++とかのマイケルソフト製ソフトはインスロールするだけで
システムをこれでもかってくらい弄りまわす。
・・・・・。
174 :
デフォルトの名無しさん :04/07/10 20:38
(a*10+b)-(b*10+b) = 45 となるようなaとbをもとめるプログラムをforを つかって書いてください。ちなみに0<=a<10,0<=b<10
175 :
デフォルトの名無しさん :04/07/10 20:43
a,bは10以下の整数です
>>174 (a*10+b)-(b*10+b) =(10a+b) - (10b+b) = 10(a-b) = 45
a,b∈Zよりa-b∈Z.
しかし10(a-b) = 45からa-b = 45/10 = 9/2だが、これは明らかにZに含まれない。
よってそのようなa,bは存在しない。
#include "stdafx.h" int main() { for(int a=0;a<10;a++){ for(int b=0;b<10;b++){ if((a*10+b)-(b*10+b)==45){ printf("a=%d, b=%d\n",a,b); return 0; } } } return 0; }
非MFCなアプリケーションにMFCなスタティックライブラリはリンクできないのでしょうか? リンクでズラーっとエラーが出てしまいます。。。(´・ω・`)
181 :
名無しさん@そうだ選挙に行こう :04/07/11 13:38
一度目の左クリックで現在のデスクトップ上の画面をグローバル変数に保存しておき 次の左クリックでウィンドウにその画面を表示したいのですがどのようにしたらよろしいのでしょうか? CreateCompatibleDC、CreateCompatibleBitmap、BitBltを使いそうな気がするのですが、うまくいきません。 宜しくお願いします
182 :
名無しさん@そうだ選挙に行こう :04/07/11 14:59
VC6で勉強中の者です。 初歩的な質問なのですが、Classの所で右クリックしても 「メンバ変数の追加」とかはあるのですが、「インプリメント」が 出てこないのはなぜでしょう???
183 :
名無しさん@そうだ選挙に行こう :04/07/11 16:02
「インターフェイスのインプリメント」をすると メソッドがずら〜っと追加されて嬉しいのですけど、 元の機能のままにしたい時はどうすればよいのでしょう? STDMETHOD(get_isAvailable)(BSTR bstrItem, VARIANT_BOOL * pIsAvailable) { if (pIsAvailable == NULL) return E_POINTER; return E_NOTIMPL; } 例えば、こんなのが追加されたけど、 元のget_isAvailableの処理してから返したいときとか。。。 ん〜わからん、、、偉い人教えて!
>>181 ディスプレイのDCでもGetすればいいと思う
>>186 現在のディスプレイの状態をウィンドウに表示はできるのですが、
どうやって一時保存をするのかわからないのです
>>187 おまいが書いたコード晒せ。
話はそれからだ。
>>188 hSrcDC = GetDC(NULL); //ディスプレイのデバイスコンテキストハンドル
hDestDC = GetDC(hWnd); //ウィンドウのデバイスコンテキストハンドル
BitBlt(hDestDC, //コピー先のデバイス
0, 0, 1024, 768, //コピー先のx,y座標
hSrcDC, //コピー元のデバイス
0, 0, //コピー元のx,y座標
SRCCOPY);
ReleaseDC(hWnd, hDestDC);
ReleaseDC(hWnd, hSrcDC);
です
>>189 メモリデバイスコンテキストにでも
一旦転送するとか?
>>166 やり方を教えてくれてありがとうございました。
出来ました。
ところで、何でグループ属性を付加すると出来るのですか?
グループ属性のヘルプを呼んでもわからなかったもので。
理由も知っておきたいのですが。
MFCが荒れてるのでこちらに再掲します 仮想リストコントロール内でのアイテム選択変更に SetItemState(nIndex, LVIS_SELECTED, LVIS_SELECTED | LVIS_FOCUSED); とやっても選択が変わってくれないんですけど、これは使えませんか? 仮想LCだと選択についてもやり方が別になってますか?
>>192 > MFCが荒れてるのでこちらに再掲します
MFCスレが・・・
の間違い(ゴメン)
194 :
デフォルトの名無しさん :04/07/12 11:40
VC++6.0を使用しているのですが、任意のヘッダファイルを すべてのソースファイルからインクルードさせる設定はないのでしょうか? VC++.netから追加された機能なのでしょうか?
>>194 StdAfx.hに書いておくのはどう?
どうせMFC使ってたらインクルードしているはずだし。
>>194 自己レスです。
プロジェクトオプションに直接
/FI"nullpo.h"
とか記述することで解決しました。
>>195 レスどもです。実はMFCを使ってない、
というかCオンリーのプログラムなもので・・・。
if(MFC != C) printf("マジっすか!?");
199 :
デフォルトの名無しさん :04/07/12 12:38
むしゃくしゃしてやった 揚げ足とれれば何でもよかった 今は反省している
非MFCなアプリケーションにMFCなスタティックライブラリはリンクできないのでしょうか? 色々やってリンクでズラーっとエラーが出なくはなったのですが 実行時にAfxGetInstanceHandle()でASSERTしてしまいます(´・ω・`) afxCurrentInstanceHandleがNULLなんですが、だめなのかなぁ。
VC6を使ってます 同名ファイルの.hと.cppを切り替えるマクロを 以前2chで頂いたのですが、うっかりOS再インストール時に無くしてしまいました。 似たようなのを使っている方いらっしゃいましたら、 ちょいとマクロソースを貼って頂けないでしょうか
203 :
デフォルトの名無しさん :04/07/12 18:00
giko.txt 名前 頭文字 地域(大) 地域(中) 地域(小) 西村 に 九州 北村 き 北関東 鈴木 す 関東 東京 多摩地区 中西 な 関西 田中 た 北海道 北島 き 東北 永田 な 中国 板垣 い 四国 中田 な 関東 高遠 た その他 (ここまでが第1グループ) 高木 た 関東 東京 23区 西村 に 関東 東京 23区 ワインバーグ わ 外国 安藤 あ その他 石田 い 関東 山本 や 中国 ファインマン ふ 外国 (ここまでが第2グループ) 有坂 あ 関西 京都 車 く 関西 石井 い 関東 阿藤 あ 九州 伊藤 い 東北 安達 あ 関東 東京 23区 金本 か 関西 大阪 井上 い 東北 キム き 外国 西村 に 関東 東京 多摩地区 (ここまでが第3グループ)
>>202 「切り替える」ってのがよく分かんないです。
>>202 Sub toggleCppAndH ()
'DESCRIPTION: ソースファイルとヘッダファイルを入れ替えます
on error resume next
Dim doc
set doc = ActiveDocument
' Be sure active document is a text document
if doc Is Nothing Then
Exit Sub
elseif doc.Type <> "Text" Then
Exit Sub
End If
lookFor = doc.Selection
fileName = doc.FullName
dotPos = InstrRev(fileName , ".", -1, vbTextCompare)
fileType = Right(fileName, Len(fileName) - dotPos)
fileName = Left(fileName, dotPos)
if UCase(fileType) = UCase("cpp") then fileName = fileName + "h" elseif UCase(fileType) = UCase("h") then fileName = fileName + "cpp" else MsgBox("Unsupported file format: " + fileType) Exit Sub End If fileName = LCase(fileName) 'first try lower case Documents.Open fileName if Err.Number <> 0 then Err.Clear fileName = UCase(fileName) 'try upper case Documents.Open fileName if Err.Number <> 0 then MsgBox Err.Description, 0 , "Error" exit sub End If End If
if Len(lookFor) > 0 then curLine = ActiveDocument.Selection.CurrentLine curCol = ActiveDocument.Selection.CurrentColumn lookForDef = "::" + lookFor ActiveDocument.Selection.FindText lookForDef, dsMatchCase if ActiveDocument.Selection = lookForDef then curLine = ActiveDocument.Selection.CurrentLine curCol = ActiveDocument.Selection.CurrentColumn - Len(ActiveDocument.Selection) End if ActiveDocument.Selection.Cancel ActiveDocument.Selection.MoveTo curLine, curCol ActiveDocument.Selection.FindText lookFor, dsMatchCase End if End Sub
>>205 言葉足らず失礼。
ええと例えば「ctrl+;」にこのマクロを割り当てておいたとします。
hoge.cpp編集中に、同名のhoge.hに記述された型宣言を確認したくなったら「ctrl+;」一発!
hoge.cpp表示中のウィンドウが、hoge.hのウィンドウに切り替わります。逆もしかり。
あると本当に便利なんですよ…。
なんて書いてたら来てたー!!!!!!!
>>206-209 ありがとうございます!無事動きました。
いやー朝からスクリプトのリファレンス眺めてたのですが、さっぱりで。
あーこりゃ自分には無理だ。本当に助かりました!
「調べれば」ね... orz
俺の推理だと恐らくIMEの悲劇だな、切り替えと切替
orv oru orγ orL orぅ sro orn L○」 口 Γ|
で、スタティックライブラリ内でウィンドウを作りたいんですが、 CreateWindow()に渡す、インスタンスってライブラリを使用する 側から貰うしかない?AfxGetInstanceHandle()みたいなのってないのかな?
GetModuleHandle(0)
>>191 ラジオボタンのグループに対してはint型の変数を追加することができる。
この変数はグループの中で何番目のボタンが選択されているかを表すもの。
便宜上グループの先頭、つまりWS_GROUPを持つボタンにこの変数を割り当てる。
間違ってほかのボタンを選ばないよう、ラジオボタンはグループ属性のやつしか
リストに出てこないようになっている。
要するに、int型以外のメンバ変数もあることをすっかり忘れてたわけよガッハッハ
>>219 グループの終了はどうやって明示するんですか?
新しいグループを作れば良いみたいですが、グループを作らずに終了させたいのですが。
猫でもわかるプログラミングのこのページ
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm のソースをコンパイルしようとしても下のようなエラーが出ます。
コンパイラはVC++6.0とBorland5.5で試しましたが同じ結果でした。
サイト内でもこの事について触れていないということは私の環境が悪いのでしょうか?
エラー E2034 test.cpp 22:
'void *' 型は 'HBRUSH__ *' 型に変換できない(関数 __stdcall WinMain(HINSTANCE__ *,HINSTANCE__ *,char *,int) )
>>222 ありがとうございました。コンパイルできました
>>190 うまくいきました。ありがとうございました
便利なショートカット機能を教えてください
Ctrl + Alt + Del
Ctrl + F4
Windowsキー + E を、押しつづけろ。
krドメインのページ開いてF5押しっぱなし
質問です。 VBだったら簡単に出来ることなのだけど、 ファイルに保存する前に、入力項目がすべて入力されているかどうか チェックをしたいのです。 印刷する場合だったらOnPreparePrintingで出来るのですけど、 保存する前に出来ないでしょうか? ちなみに保存時はSerializeを使ってます。 この関数は保存するファイルを指定してから作動するので、 ここでチェックしても意味がないのです。 わかる方、お願いします。
>>230 MFC?
入力項目っていうのはダイアログ使ってるのかな?
ダイアログならOKボタンが押されたときにチェックすればいいんじゃない?
板違いかも知れないけど聞かせてくださいませ ダイアログだとリソースエディタで作れるから楽なんですけど、 ウィンドウだとGUI部品を設置していくの大変ですよね? こういうのって気合で座標とかサイズ指定しまくるのですか?
論理レイアウト
>>232 GUI部品というのはボタンとかの標準のコントロールこと?
だったらダイアログ以外のものになぜコントロールを乗っける必要があるのかと思うわけで・・・
>>234 ウィンドウが左右に割れていて左にタブやらボタンやらエディットやらがずらっと並んでいるようなアプリ
たまにみかけるんで、あぁいうのは気合で設定してるのかなと思いまして
もしかすると、あれはダイアログを貼り付けてるってことですか!?
>>232 TabCtrlでさえ、ダイアログを貼り付けて使う。
況やSplitWindowをや。
>>235 そんなのは普通CToolBarとかCDialogBarとか使うけど。
なるほど、そういうからくりだったのですね ありがとうございます
サカーで延長ってPKでもしたのか? それとも最初からそういう枠?
>>231 MFCです。
FORMVIEWというのを使っていて、
画面にコントロールを配置しています。
それで「名前をつけて保存」で保存できるように作ったのですが、
入力項目のチェックをどこでしたらいいのかわかりません。
よろしくお願いします。
>>240 やったことないけど
DoDataExchangeにDDV_系のチェック関数置くとか
DDV_関数のソース見て自作するとかすればいいんじゃないの?
>>241 OnFileOpenをオーバーライトしてそこでチェックすることにしました。
動作好調です。
それで新たにわからないことがあります。
教えてください。
GetFileExtで拡張子は取得できますが、拡張子をセットすることは出来ないでしょうか?
印刷時に、右下にアプリケーション名とかページ数を簡単に出力する方法はないでしょうか?
わかる方、お願いします。
CViewなどに、CEditをCreateで貼り付けたとします。 このEditのテキストを保持しながら、Viewから取り除く方法ってありますか? (Destroyだと、中に書いてあったテキストも破棄) さらに、取り除いてから復元する方法はありますか? よろしくお願いします。
>>243 edit.ShowWindow(SW_HIDE);
>>244 これって、文字的に隠すだけに見えたので、使おうとしなかったのですが、
ちゃんと、VIewから、取り除いてくれるのですか?
意味不明な質問する前に試せ
MFCで、XMLを解析してくれるクラスって何かありますか?
見えなくしておきつつ実体は保持する ==隠す じゃないのか?
>>248 Javaの例で申し訳ないですが、remove();というメソッドがあります。
それは、フレーム(View)からコンポーネントを削除するのですが、
Edit等の中身は保持したまま、削除できます。
こういうやつはVCにあるのかわからなかったので、
質問させていただいております。
隠すだけでいいじゃん。 それが嫌ならテキストを保存してからEditを破棄すれ。
語感の「オレ解釈」にこだわってても生産性はあがらないYO!
質問です。 ウインドウタイトルから「無題-」というのをはずして、 ファイルを開いた時にのみ、そのファイル名を表示したいんです。 PreCreateWindowで、 cs.style ^= (LONG)FWS_PREFIXTITLE; cs.style &= ~(LONG)FWS_ADDTOTITLE; とやったら、「無題-」はでなくなったのですが、 その後にSetTitleを実行してもタイトル名が表示されなくなってしまいました。 私が望んでいることを実行する方法はないでしょうか?
SetWindowText
>>253 SetWindowLongPtr()でウィンドウスタイルを動的に変更してみてはどうだね
>>254 ,255
どうもありがとうございます。
とりあえず254のやり方でやってみたら出来ました。
SetTitleとSetWindowTextは同じ事をするのだと思っていたら、
違うのですね。
どうもありがとうございました。
昨日も質問させていただいたのですが、レスがなかったので、 今一度質問させていただきます。 MFCで、XMLを解析してくれるクラスはありますか?
MFCのクラス階層を見ればわかりますが無いです。
.NETthespokeで買ったんですけど、"{"の後に自動インデントさせるにはどうすればいいんですか?
説明不足だと思われ。
意味はわかるが。持ってないから答えられないけど。専用スレなかったっけ。
>>259 VS .NET 2003 Pro ならメニューの
ツール→オプション→テキストエディタ→C/C++
でスマートインデントをオンにする。
theSpoke版も同じじゃないかな?
CBitmapのデータをファイルに書き出すにはどうしたらよいのでしょうか?
APIスレにはHBITMAPからファイルに書き出すには、って質問が。
266 :
デフォルトの名無しさん :04/07/16 21:44
からage
>>262 ありがとうございます。無事出来ました。
268 :
デフォルトの名無しさん :04/07/16 21:59
質問です VC++.netで開発してるんですが、 DLL作成のプロジェクトで VB.netのプロジェクトをインポートしたいです。 ようするに、C++のアンマネージドDLL?を作りたいんだけど、 C++がぜんぜん分からないからロジックはVBで実装しようと。。。 VBに実装してあるHello Worldメソッドを呼び出す、 C++側ソースとか書いてくれたらうれしいです
出来ません。
うん。
複数言語サポートっていうのはこういうことじゃなくて?
Unicodeが扱えるって事じゃないのか?
>>271 複数サポートされているのはプログラミング言語じゃなくて、自然言語(日本語・英語・中国語……)の方
>>271 それは、.NETの話ではないのか?
アンマネージドは.NETではない
275 :
デフォルトの名無しさん :04/07/17 00:45
VC++6.0で、Win32コンソールアプリを、MFC使わずに作っています。 IEのオブジェクトを作るのにCreateObject("InternetExplorer.Application") みたいな書き方でコンパイルが通るようにするにはどんなヘッダーを インクルードすればよいのでしょうか。
ピンチヘッダー
プログラム言語複数で間違いないよ。VC++で開発してもVBで開発しても C#やJ#で開発しても同じ.NETアプリを作れるから便利だろ?しかも 開発環境は共通しているからわざわざ操作方法を各言語ごとに覚えなくても 済むんだぜ!ということかと。 ついでにアンマネージ・コードを開発できるのはVC++.NETだけで、 ほかのC#やVB.NETを使った場合は.NETアプリしか作れないよ、と読める。 VC++のコンパイラでVBのコードをコンパイル出来るという意味ではない。
フォルダを開いた画面で使われている 「ファイルの縮小表示ができるリストビュー」 を自作のアプリで使用したいのですが 誰かこのコントロールの名前を知りませんか?
280 :
デフォルトの名無しさん :04/07/17 02:05
というか、VC++で開発してもVBで開発しても C#やJ#で開発しても、.NETを使うなら.NETを覚えなきゃならないぜ。 .NETを覚える苦労に比べたら、言語の違いなんてどうでも良くなるぜ。 つまり.NET専用言語のC#以外は、.NET使うなら意味無いぜ ってこと。
リストビューコントロールのことか?
>>277 VC++.NETを使ってアンマネージドで作成したものは、
.NET対応の実行ファイルを出力しない。
従来のWindowsプログラムと同じようにマシン語のファイルを、出力するの。
当然、.NETフレームワークで提供される機能も使えないので、
他の.NETな言語で作成したものを使うこともできない。
284 :
デフォルトの名無しさん :04/07/17 06:30
.NETでつくった実行ファイル(.exe)ってWindows 200x,WindowsXPで しか動かないのでしょうか。しかも特定のdllファイルが入ってないと 実行時にdllが見つからないとかのエラーも相変わらずですか?
>281 サンプルコーディングはいろいろあるのは知ってました。 ただインクルードするヘッダーファイルについては どれもなんも書かれていないので困っておりました。 といってもコンパイル時に出るエラーは初歩的なエラー、 ほとんど***が定義されてない・・・たぐいですが。 とりあえず教えてもらったファイルを追加してみます。 ※どのヘッダーファイルが必要で、なおかつどんな順番に インクルードすべきかでまごついているのはVC++の使い 方が間違っているのでしょうか? やっぱ基本からVC++の本買って読んだ方がいいですかね。
>>284 開発が出来ないだけで9x系でも.NETをDLするだけで動かせます。
でかすぎるランタイムだけどな…
9xでも95では動かないよな
今時、95なんて・・・ うちの会社ではまだ使ってるけどね。しかもPC98用。
回答ありがとうございます。 要するに、マネージドで出力したプログラムは、使えるフレームワークが同じなので、 何言語で作ってもかわらない。 そうすると、僕の質問である、 「C++アンマネージドDLLの処理をVB.NETで書く」 はありえないんですね。 VB.NETはマネージドでフレームワークを要するから・・・ ではC++マネージドDLLで実現することは出来るのでしょうか?
290 :
デフォルトの名無しさん :04/07/18 01:57
test
291 :
デフォルトの名無しさん :04/07/18 04:52
テキストファイルのデータを読み込んでの実行は、 どうやって実行するんですか?
テキストファイルのデータを読み込んでの実行します
いや、テキストデータを読み込んでから実行じゃないのか?
294 :
デフォルトの名無しさん :04/07/19 02:23
今までVB6でアプリケーションを作成してきましたが、今回VC++で 仕事を押し付けられそうなんですが、IEにアドオン機能を付け加える というのですが、VC6でやればいいでしょうか?それとも今ならVC++.NET で作成したほうがいいでしょうか? 開発環境はwin pro 2000で、アドオンするIEは5.5以上です。
295 :
デフォルトの名無しさん :04/07/19 02:26
>>294 相手が.NET Frameworkランタイム入れてくれるならVC++.NETでもいいけど、
そうでなけりゃVC6しか選択肢は無いでしょ。
296 :
デフォルトの名無しさん :04/07/19 02:31
>>295 .NET Framework入ってないと、VC++.NETのアプリは動かないの?
298 :
デフォルトの名無しさん :04/07/19 11:57
それでVC++.NETで.NET Frameworkがはいってない ウィンドウズ向けのアプリは開発できないの?
できます。
VC7のリソースエディタでメニューを編集しています. しかし,「Grayed」をtrueにして,ビルドをしても, 起動したアプリケーションでは,そのtrueにしたメニューが普通に選択できてしまいます. どうすれば,最初に使用不可能の状態になるんですか? (これは,ひょっとしてバグですか?)
あるメニューが選択されたら、ビットマップを表示したいのですが、 そのメニューハンドラで //public:CBitmap bitmap,HBITMAP capBitmap bitmap.Attach(capBitmap); CClientDC tempDC(this); CDC dc; dc.CreateCompatibleDC(&tempDC); CBitmap *pOld = dc.SelectObject(&bitmap); tempDC.BitBlt(400,0,320,240,&dc,0,0,SRCCOPY); dc.SelectObject(pOld); としても、黒い画像が貼られます。 HBITMAPにデータ転送は、たぶんできているのでハンドラが間違っていると思うのですが、 このソース、どこかおかしい点はあるでしょうか?
302 :
デフォルトの名無しさん :04/07/19 17:48
304 :
デフォルトの名無しさん :04/07/19 17:52
>>303 DDB = DirectDraw Bitmap
DIB = DirectInput Bitmap
bitmap.Attach(capBitmap);を bitmap.LoadBitmap(IDB_BITMAP1); と、適当に作ったファイルを読み込むようにすると、表示されるんですが。 (今、やりたいのは、DirectShowでキャプチャをしてビットマップを表示です。)
Device Independent Bitmap
310 :
デフォルトの名無しさん :04/07/19 18:49
>>309 おまい、ばか?
そのままやんけw
その意味を答えてみろよ
必死だな・・夏の暑さで頭がやられちゃってるのか。
312 :
デフォルトの名無しさん :04/07/19 19:04
>311 答えれないと、結局それなんですねw
あの〜、それで、どのようにすれはよいのでしょうか?
>>313 夏厨もまとわりついてることだし、自分で探せ。
その程度のサンプルならweb上に腐るほどあるから。
>>315 いろいろ、試してみてできなかったんですが。
DirectInput Bitmapって何ですか? ぐぐっても出てこないですが。
ググっても出てこないんならこの世に存在しないんだろ。
試してないね。 ほんとにやって出来ないとなると、向いてないとしか言いようがない。 初心者にやさしくしたいのはこのスレの趣旨からも当然だが、 それにも限度が・・ということ。 すまん。ちょっと厳しすぎだが・・・
>>319 いろいろ、サンプルのようなものがあるのは調べてわかっています。
で、それをいろいろ試してもできなかったので、ここに聞きにきています。
>>320 素朴な疑問だが、メニューハンドラではなく(サンプルにあるように)普通に表示させることはできてるの?
>>320 普通に、というのがちょっと曖昧でよくわからないですが、
ファイルに保存してあるビットマップの表示は可能。
DirectShowのサンプルでMFCを使わない方法では確認。
解決しました。 どうやら、ファイルからフレームをキャプチャできてなかったようです。 お騒がせいたしました。 しかし、この板に来ると,Nortonが反応するんだが。 なんなんだこれは?
>>323 新型ウイルスの実験中です。
お気になさらずに。
325 :
デフォルトの名無しさん :04/07/21 09:45
>>324 気にするよ。
この症状は、皆様出てるの?
326 :
デフォルトの名無しさん :04/07/21 09:54
既出ネタうざい
>>325 ちゃんと対策している奴は出ないから気にすんな
>>325 cat /etc/passwd | m*il (*=a)
↑
この文字列(スレタイ)に反応してるみたい
対策は知らん
329 :
デフォルトの名無しさん :04/07/21 12:39
COM初心者です。 InternetExplorer 上で使われる ActiveX コントロールを開発しなくては いけなくなったんですが、参考になるソースとかアーティクルとかないでしょうか? CodeProjectとかCodeGuruを見てみましたが、シンプルなわかりやすい例が見つかりませんでした。 UNIX系のアプリケーションばかりつくってたんで、GUIDとかATLとかCOMとかハァ?状態です。 開発環境は VS.NET2003 です。
330 :
デフォルトの名無しさん :04/07/21 12:41
ある画像処理プログラムで回転の部分の最適化をしているのですが、 どうも、以前はReleaseモードでやっても激遅だったのに、さほどいじった記憶は無いのに 最近になって3倍ちょっとも速くなっていました。 その間、やった事と言えば98DDKをインストールしてMASMを導入したのですが、 VC++のコンパイル時の最適化で勝手にMMXやSSEなどに最適化してくれるってことはありうるのでしょうか??
インラインアセンブラでMMXとか使うようにコーディング してないのなら無いぽ。
ありがとうございます。そうですか、、何で速くなったか謎なのが不可解ですが、 まだ最適化の余地があるのは良かったです。。原因の方はやはり知りたいですが・・・。
>>330 妖精さんがCPUを強まったものに交換してくれたとか。
初めまして、当方VisualStudio.NET2003を入れてC++の勉強してます。 なんですが、いきなり問題が… とりあえず、何か出力しようと思い #include <iostream.h> void main(void) { cout << "test" << endl; } とやった所、iostream.hが見つからないとのエラーが出て、VSフォルダを見るとiostreamのファイルが。 そこで、#include <iostream>と書き換えたところ coutとendlに対して、定義されていませんとのエラーが出ました。 MSDNライブラリで色々調べたのですが分からないです。 誰か教えてください、お願いします。
>>335 std::cout
std::endl
>>335 .hがくっついてないのは、名前空間が導入された新しいバージョン。
coutやendlほかいろいろがstdという名前空間に放り込まれています。
std::cout って書くなり、面倒だと思うならusingするなりしましょう。
>>336-337 早速の返答ありがとうございます。
usingについて少し調べてみます。
>>333 もしかしたらDebugモードのまま測定してたのかもしれません。こちらでは普通に30秒とかかかったので。(Releaseで8秒)
以前ビルドしたやつ(DDK導入以前)のバックアップで計ってみたら同じ速度だったので、Debugモードで測ってたのかもです。
お騒がせしました。。。
340 :
デフォルトの名無しさん :04/07/21 14:42
表示中のダイアログ(CDialog)において、自身がモーダルかモードレスかを取得する方法はないでしょうか? (Javaで言うところのisModal()のような) OnInitDialog()でContinueModal()でモーダルループが継続中かチェックしようとしましたが、 モーダル/モードレスのいかんに関わらず結果は同じでした。 ご回答よろしくお願いします。
>>340 モードレスの場合、破棄の方法などでコードが違ってくるわけだから、作成元で
ごっちゃにしたらまずくないかな?呼び出し側では呼び出すときにどちらを使う
か分かるわけだし、フラグ変数使って情報を渡すことは可能だと思うけど。
どういうシチュエーションで利用しようとしているのかよく分からないんで的はずれ
かもしれないが。
HWNDやHDCの値って固定なんですか? プロシージャ以外でhWndの値を使いたいんですがグローバルで保持していいものなのか気になります どうか教えてください
OWNDCが指定してあるなら、固定として扱ってもいい、って MSDNが云ってた気がする。逆に言えばそれ以外はちゃんと解放しろとも。
344 :
デフォルトの名無しさん :04/07/21 18:37
"visual c++"のプログラミングがわかりません。問題が、<入力された3値を辺に持つ三角形の種類、及びその面積を表示するプログラムを作成せよ。 ただし、「ポインタ変数を引数に持つ関数を作成、使用すること」>というものなんですが、初心者で基本的なこともわからないので、お手数ですがこれ をプログラムしてもらえませんか?ホントわからないので、省略なしに全てお願いします。
引っ越してキター!
>344 幾ら出せる?
宿題スレ行けって。
ようかんマン以外で、教えてもらえるとこないっすか?
無い。
>>350 ありがとーございます!
>>341 回答ありがとうございます。
汎用的な子画面となるダイアログを作成して、呼び出し元に応じて
モーダル/モードレスを可変にすることが目的でした。
また、その際に画面内のコントロールをモードによって、呼び出し元とのI/Fを意識せずに
制御できればと考えていたのですが・・・・
一応今回の件は、ダイアログクラス内にBOOL型のメンバ変数を確保してコンストラクタでFALSEをセット、
オーバーライドしたDoModal()を経由した場合にのみTRUEをセットする方法で対応することにしました。
お手数をお掛けして申し訳ありませんでした・・・・
>コンストラクタでFALSEをセット、 オーバーライドしたDoModal()を経由した場合にのみTRUEをセットする方法 うーむ……
>>352 それをどうせやるなら
CDialog - CMyDialog - CMyModalDialog
- CMyModelessDialog
と派生クラスにしたほうがスマートでないでしょうか とおもいました
同じことをするんであれば、どっちもありだと思うが。考え方とそのプログラムの 他の部分がどうかにもよる。 でもそもそもそういうダイアログを兼用で作るってのが一般的なのか疑問。
モーダルとモードレスでは寿命が違うからデータハンドリングも違えば ボタンの意味合いも変わってくるからねぇ。 別々に外枠を作って、その中身だけ共通にした方がすっきりするような希ガス。
寿命?
358 :
デフォルトの名無しさん :04/07/21 23:34
<入力された3値を辺に持つ三角形の種類、及びその面積を表示するプログラムを作成せよ。 ただし、「ポインタ変数を引数に持つ関数を作成、使用すること」> 何この問題?「入力された3値を辺に持つ三角形」って何?問題作った人、算数できるのかな?
.__ ヽ|・∀・|ノ 来るな!
362 :
デフォルトの名無しさん :04/07/22 20:11
VC++6.0でWin32コンソールアプリ作成を試みてます。 コンパイルすると、「CString」が定義されていない 識別子です。。って出るんですが?どのヘッダーファ イルをインクルードすればいいのでしょうか?
atlmisc.h(WTL)か、afx.h(MFC)だったっけか。
364 :
デフォルトの名無しさん :04/07/22 21:43
>363 確かそれを書いてダメだったよーな。 あまりに基本的すぎるのか、MSDNにはどのヘッダーファイルを インクルードすればCStringクラスが使えるのかなんも書いて ないでやんす。
grepしろや。
#include <string> typedef std::stirng CString; //VC初めて1ヶ月くらいまでなら平気
367 :
デフォルトの名無しさん :04/07/22 21:56
>365 やってるよ!CStringがたくさん出てきてどのヘッダファイルか わかんねーんだよ。ポイントを教えろ! >366 どうも、おおきに。せっかくですがそんな書き方はダサくていやです。
afxwin.h
369 :
デフォルトの名無しさん :04/07/22 22:17
>368 それもダメだったよ。
プロジェクトの設定でMFCを使用しないになってない?
教えてください。 マウスカーソルを変更したり、背景にビットマップを表示したいのです。 APIで最初から全部プログラムを書いた時は簡単に出来ました。 WNDCLASSEXを宣言してそのクラスのhCursorやhbrBacgroundに ロードすればよいわけです。 それがMFCとなると、どこで何をしていいのかさっぱりわかりません。 どなたか、お願いします。
372 :
デフォルトの名無しさん :04/07/22 23:10
>370 MFCを使わない方向でやりたいです。 でも、試しにMFCを使う2通りの方法をそれぞれ試して みましたがそれでもCStringは定義されていない。。 と出ます。なにがいけないのでしょうか。
grep class.*CString *
>>372 Win32 Console Applicationでプロジェクト作って
プロジェクトの設定で共有DLLでMFCを使用に変更したあと、
#include "afx.h"
int main(int argc, char* argv[])
{
CString s;
s = "test\n";
printf((LPCTSTR)s);
return 0;
}
をビルドしたらできたよ?
>>371 SetClassLong
SetClassLongEX
あたりを使うんじゃないかな?
hbrBackgroundにビットマップって指定できたんだ。 カーソルなら、WM_SETCURSORのハンドラをつくりゃいい。
377 :
デフォルトの名無しさん :04/07/23 09:25
VisualC++2003なんですが warning C4311: '型キャスト' : ポインタを 'LPVOID' から 'DWORD' へ切り詰めます。 このワーニングが納得できません。 なんで出ますか?
>>371 SetCapture();
::SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_XXX)));
OnNcHitTestとかにこれで普通に変わるけど、こんなのとは違うのかな?
>>377 どういうところで出るのか分からないので一般的な話になるけど、
その関数の定義を確認して、使うべき型がちゃんと入ってるか調べては?
380 :
デフォルトの名無しさん :04/07/23 10:11
>>379 unsigned long a = 0;
void* b = (void*)a;
unsigned long c = (unsigned long)b;
↑をコンパイルすると↓のワーニングが出ます。
warning C4312: '型キャスト' : 'unsigned long' からより大きいサイズの 'void *' へ変換します。
warning C4311: '型キャスト' : ポインタを 'void *' から 'unsigned long' へ切り詰めます。
unsigned long long a = 0;
void* b = (void*)a;
unsigned long long c = (unsigned long long)b;
↑をコンパイルするとワーニングは出ませんでした。
コードをこれに変更することでワーニングを回避することにします。
しかし、理由がわかりません。sizeof(void*)は4でしたし。なぜでしょう?
解決しました。 デフォルトでコンパイラオプション/Wp64がセットされている為でした。 ありがとうございました。
382 :
いなむらきよし :04/07/23 10:27
何でもキケーに聞いてくれキケー!
ワーニング ワーニング ワーニング ワーニング ワーニング。
CViewから派生したクラスを動的配列で保持したいと思っています. しかし,CArrayではエラーが出て,使用することができませんでした. (コンストラクタがprotectであることが原因といっていたと思います.) 他の動的配列,例えばCObArray等を使えば,保持できるのでしょうか? それとも,他に何か良い方法はありますか? さらに,このprotectなコンストラクタをpublicにしてもよいのでしょうか? いくつか質問させていただきました. よろしくお願いいたします.
皆さんいろいろありがとうございました。
>>375 さんが教えてくれたやり方が、私の理想としている形でした。
以下の記述で出来ました。
HCURSOR hNewCursor;
hNewCursor = LoadCursor ( AfxGetInstanceHandle (), MAKEINTRESOURCE ( IDC_CURSOR1 ) );
HCURSOR hOldCorsor;
hOldCorsor = ( HCURSOR ) SetClassLong ( GetSafeHwnd(), GCL_HCURSOR, ( long ) hNewCursor );
HBRUSH hNewBrush;
hNewBrush = CreatePatternBrush ( LoadBitmap(AfxGetInstanceHandle (), MAKEINTRESOURCE ( IDB_BITMAP1 ) ) );
HBRUSH hOldBrush;
hOldBrush = ( HBRUSH ) SetClassLong ( GetSafeHwnd(), GCL_HBRBACKGROUND, ( long ) hNewBrush );
どうもありがとうございました。
>>380 あたりまえだ。
自分がやっている事の意味を理解出来ていないのなら、
プログラマを止めた方がいい。
>>386 まちがいなくプログラマじゃないでしょ。
>>387 ひょっとして
void *p;
と定義して
p * 2 とか計算するつもりなんだろうか?
>>386 推奨するわけではないけれど、ポインタを数値として
使うテクニックは存在すると思うが
380はやっていることを理解した上で、質問しているんだと思うけどね
>>380 #include <iostream>
using namespace std;
int main () {
unsigned long a;
void* b;
unsigned long c;
cout << sizeof (a) << endl;
cout << sizeof (b) << endl;
cout << sizeof (c) << endl;
cout << sizeof ((void*)a) << endl;
cout << sizeof ((unsigned long)b) << endl;
cout << sizeof (void *) << endl;
cout << sizeof (unsigned long) << endl;
return 0;
}
で結果は何と出ます?
いまさらだが ポインタ→整数ならreinterpret_cast使え
>>380 > sizeof(void*)は4でしたし。
と
>>381 > デフォルトでコンパイラオプション/Wp64がセットされている為でした。
は矛盾してないの?
>>394 手元に環境が無いで書いてるのだけど/Wp64って警告オプションなのね
納得した
396 :
デフォルトの名無しさん :04/07/23 22:38
>374 そうでつか?ありがとう。 月曜に試してみます、レスがなかったらOKってことで。
先生! RegisterClass()が失敗します。GetLastError()しても返るのは0。。。 何が起こっているのですかー。
C++スレから移動してきました int main(int argc, char* argv[]) { try { throw int(); } catch(int) { } return 0; } これだけのプログラムなのですが 例外処理 (初回) は hoge.exe (KERNEL32.DLL) にあります: 0xE06D7363: Microsoft C++ Exception。 とデバッガのアウトプットに出ます。 これはどういう意味なのでしょうか? ビルド時に警告は何も出ていません。/GXオプションも付いていることを確認しています。 VC++6.0 SP5 Win2k
try { throw int(0); } catch(int e) { } とかじゃなかったっけ?
先生方! Win95でRegisterClass()が失敗します。GetLastError()しても返るのは0。。。 何が起こっているのですかー。教えてー。
アゲ
msdn
>>399 そのようにしてもアウトプットにメッセージが出ました。
例外をthrowすると必ず出るもんなのでしょうか?
>>403 ごめんよく読んでなかった。デバッガのアウトプットに出るのは正しいんでは?
必ず出るものです。
ソース会社においてきたーよ(´・ω・`) win2kとxpではオッケーで、95ではダメ。 WNDCLASSはInstanceとClassNameとWndProcを設定してた気が。。。 わかりませんよねぇ(´・ω・`)
そういえばW98のときにAPIで何かあったな 調べるから待たれ
自分のメモには WNDCLASS / RegisterClass の組み合わせだとWin2K/XPでしか動作せず、 WNDCLASSEX / RegisterClassEx を使うように書き換えたらWin98で動作した。 と書いてあった。
>>409 Σ先生マジデスカー!
最初は
WNDCLASSEX / RegisterClassEx
でやっていて、ダメだったので
WNDCLASS / RegisterClass
に変えてやってみたですよ。。。Exの時点でパラメーターか何かが誤っていたということなのかorz
ありがとう。
ちなみにこんなコードが入っていた if(!RegisterClassEx(&wcex)){ LPVOIDlpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, // for auto allocation NULL ); __Write_Debug_File(lpMsgBuf); LocalFree(lpMsgBuf); returnFALSE; }
でもなぜかうちにはそれぞれのリリース用にディレクトリがあるんだよね。 コンパイラのオプションの違いかも。もうちょっと調べるわ。
Win2K/XP用リリースの方には /D "WIN32" んで Win98用リリースの方には /D "WIN32" /D "_WIN32_W9x" というオプションが付いておった
色々ありがとうございます。
>>411-414 手元に環境がないので涙で枕を濡らすほかないのです。
ちなみに最初書いてたのは以下のようなコード(だった気がする)
WNDCLASSEX wcx = {0};
wcx.cbSize = sizeof(WNDCLASSEX);
wcx.lpfnWndProc = (WNDPROC)WndProc;
wcx.hInstance = GetModuleHandle(0);
wcx.lpszClassName = m_ClassName;
if (!RegisterClassEx(&wcx)) {
DWORD dwError = GetLastError();
return dwError;
}
なんていうかDLL内で不可視のウィンドウを作ってソケットメッセージを何とかしたかった。
MFCのソケットみたいな。
>>405-406 そうなんですか。
前は出てなかった気がしたんですが、気のせいだったのですね。
どういう仕組みで出るのかわかりませんが、害がないということで安心しました。
ありがとうございました。
>>416 sprintf(m_ClassName, "ClassNameDaze");
適当な文字列なんです。。。
じゃあ、試しに直接書いてみたら? wcx.lpszClassName = "ClassNameDaze";
>>415 DLLなら
wcx.hInstance = GetModuleHandle(0);
は違うと思うが。
これだとEXEのハンドルになるよ。
421 :
デフォルトの名無しさん :04/07/25 10:25
関数がコールされると、returnされた際にどこにreturnするかアドレスを 記憶していると思うのですが、そのアドレスはどこにあるのでしょうか?
スタックとヒーブでぐぐりなされ。
423 :
マイク ◆yrBrqfF1Ew :04/07/25 10:49
通常はスタックフレームにリターンアドレスがある //以下未定義なコード int main() { int array[1]; std::cout<<"return address: "<<std::hex<<array[2]<<endl; }
アクセス規制が。。
>>420 とりあえずチェックしてみます。
Win2kなどでは良くてもWin95だと問題が出てしまうのですかね。。。
>>424 私はどうすれば。。
解除されたようだ。
>>420 GetModuleHandle(0);
がダメな場合はDLLMain()でもらえるインスタンスを使用するということですよね?
。。。多分。。。
427 :
デフォルトの名無しさん :04/07/25 23:34
CListCtrlから派生させてCListCtrlExをつくったのですがこれを MFCアップウィザードが用意してくれた、CXXXVew(CListViewから派生)に結び付けるには どうすればいいのかしら?
>>423 array[2]はBPじゃないのかな?
array[3],array[4]あたりのはずだが。
429 :
mike ◆yrBrqfF1Ew :04/07/26 06:59
ならarray[1]は何がある? i386 ↑low [array] //array[0] [saved frame pointer] //array[1] [return address] //array[2] [arguments...] ↓high
430 :
デフォルトの名無しさん :04/07/26 09:31
>>427 できません。CListViewから導出されたクラスにはCListCtrlが結びついていますので
CControlViewから新たに導出してあなたのCListCtrlExを結びつけて
CControlViewをCDocumentとjointしてください
結構面倒ですよ
初心者なんですが、void mainとint main の違いって何ですか? あと、 #include<stdio.h> void main(){ int a; scanf("%d", &a); printf("%d\n", a); } で実行すると、数値はちゃんと同じように出力されるんですが、 文字は変な数値で出力されてしまいます・・。 文字を出力するにはどのように変えれば良いんでしょうか?
>>432 void main 値を返さないで終了
int main 値を返して終了
scanf("%c",&a);
printf("%c\n",a);
値を返して終了することのメリットは何ですか?
Cスレ行って欲しいな
int main:絶対だれにも文句を言われない。 void main:(特にそのCスレで)規格にないとかなんとかいろいろうるさいのが出てくる。
>>434 UNIXだと,シェルスクリプト(Winのバッチファイルに相当)から,
その値を返すプログラム(Aとしよう)を起動して,
Aが終了したときの返り値をその後のシェルスクリプトの処理で利用するって使い方をする.
Winだと同様にバッチファイルで使えるんでは?
シェルだと,直前に実行したプログラムの返り値は$?で取り出せるけど,
バッチファイルだと何になるの?
>>437 IF ERRORLEVEL n 〜
mainの返り値が n 以上なら〜を実行する。IF NOT ERRORLEVEL 〜 ってのもある。
あるいは他のプログラムの中からならGetProcessExitCode()で取得することもできる。
特にGUIプログラムだとこれしかない。
#include<stdio.h> void main(){ char a[10]; scanf("%s", a); printf("%s\n", a); } でやったら出来ました。
これ以上引っ張るなボケ
%10s
444 :
デフォルトの名無しさん :04/07/27 00:10
ここってヘビーな内容はついて行けない人が多いんですねw
オレオレ
リソースエディタの事について、聞きたいんですけど visualC++でリソースをヴィジュアル的に編集する方法は 分かったのですが、スクリプト的に編集するにはどうすればいいですか 検索で色々調べてみたんですが、詳しく手順が載ってる所が無いです。 作ったリソースをスクリプトで見たいです。 BEGIN ~~~~~~ END ていう風な。 言い方おかしい所あるかも知れませんが、よろしくです。
>>446 普通にテキストエディタで編集すればいいのでは?
xxx.rc というファイルが作られてないですか?
ホントですね。。。 単にテキストエディタで見れば良かったんだ。 何故そこに気が付かなかったのか。 ありがとうございました。 あえてVisualC++でストリプト風な表示がされないのは やっぱりビジュアル的なこだわりなんでしょうかね そんな編集も必要無さそうだし。(初心者だからそう思うだけかも)
>>449 VC6でも確か開けたはず。VS.NETはファイル名右クリックでメニューで選べたし。
尤も、どちらの場合でもダイアログエディタなどのヴィジュアルなエディタとは共存できない。
#どっちかで開こうとすると閉じられてしまう。
451 :
デフォルトの名無しさん :04/07/28 02:57
質問です。 C++プログラムでnewを利用してメモリを取得しているのですが、 そのメモリ領域を内容はそのまま、後で広げる事は出来るのでしょうか?
unn
454 :
デフォルトの名無しさん :04/07/28 03:08
realloc()の存在は知ってますが・・・mallocじゃなくても大丈夫なんですか?
>>451 予め広めに取っておくしかないかもね
どういう用途でそうしたいんでしょうか?
構造体を使用する数の分だけメモリを確保しようとしています。 newで無理ならmallocに書き直そうと思います;
C++と Visual C++.NETは 実は全くの別言語だったりするんですか?
C++は総称で Visual C++.NETは数多くあるC++の実装の一部では?
newの再定義も考えましたが、結構構造体の数が増える可能性があるのでやめときました。 検索してると標準テンプレートライブラリ関連の情報がでてきたのでベクトルあたりを使って なんとかできないか調べてみます。(それで無理ならmallocで・・・) ご協力ありがとうございました。
C++は言語の事でVisual 〜 というのは統合開発環境の事だと思います。 基本的な構文は変わりませんが.NETが追加した関数とかクラスがあったりします。
libg++ の string クラスとか vector クラスの実装見ると、参考になるかも
つーか、vectorで書き直せばことが足りるんで内科医?
464 :
Visual C++初心者です :04/07/28 14:30
すいません、初心者なんですけど、質問させてください>< Visual C++でプログラムのコンパイルをした時に、 『error C2146: 構文エラー : ';' が、識別子 'lpDD' の前に必要です。』っていうエラーが出るんです。 きっとDirectDrawが関係しているエラーだと思うんですけど、(使っていないプログラムはコンパイルできました。) 何が原因なんでしょうか・・・? 色々試してるんですけど、分からなくて;; 的外れな質問だったらごめんなさい;
>>464 ヘッダはinculudeしたか?
というかスレ違いな気がするが・・・
466 :
デフォルトの名無しさん :04/07/28 15:02
ある関数が void func() throw(runtime_error); みたいに定義されている時に、呼び出し側でキャッチしなくても特にエラーにならないのですが、そういうものですか? JAVAみたいに呼び出し側にキャッチを要求することはできませんか? よろしくお願いします。
× : inculude ○ : include
unn
469 :
デフォルトの名無しさん :04/07/28 18:26
ListView のソートとか背景の色をつけることが できる拡張したListViewってない? オーナードローがよくわからん
470 :
VisualC++初心者です :04/07/28 18:28
えっと、デスクトップパソコンの方ではコンパイルできたんです。(同じソースファイルです。) 今同じプログラムをノートパソコンに移動させようとしてるんですけど、 そっちで上に書いたエラーが出ちゃって・・・><; スレ違いでした?; ごめんなさい;;
>>470 ノートの方にSDKはあるのか?
もしくは、パスが通ってないとか
>469 そういう疑問はcodeguruかcodeprojectに行くとだいたい解決する。
470は女
474 :
デフォルトの名無しさん :04/07/28 18:59
>>472 ついでに英語もわからん
日本語であるとこしりませんか?
しりません
>>459 ,461
そうでしたか。ありがとうございます。じゃ、同じってことで。
479 :
デフォルトの名無しさん :04/07/28 20:10
宣言した定数に色つけるってできないんですか?
>>479 [定数]++;
若干色を付けてみました
とか?
1行エディットコントロールを作成したのですが、 入力してRETURNキーを押すたびに警告音がします。 うるさいので、無くす方法はないでしょうか?
マルチキター!
error LNK2019: 未解決の外部シンボル __imp__mciGetErrorStringA@12 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 error LNK2019: 未解決の外部シンボル __imp__mciSendCommandA@16 が関数 "long __stdcall WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 fatal error LNK1120: 外部参照 2 が未解決です。 すいません、MCI APIを使って音楽を流そうとしているのですが、 何度やってもこの3つのエラーがでます。どういった原因が考えられるのでしょうか? そもそも「外部参照2が未解決」「未解決の外部シンボル」といった エラーはよくみるのですがどういうことなのでしょうか?
>>486 自分もよくわからないけど、クラスのメンバ関数なんかを、
宣言だけして関数本体を書かなかったりすると出る。
どっかでプロトタイプ宣言だけして、処理を記述し忘れてない?
デバックについてサンプルプログラムなどで詳しく解説してある本、サイト等 を教えてください。
>>486 >>488 ああ、あとリンクエラーの場合もあり得るか。。。
LNK2019、LNK1120に関してGoogleで検索してみては?
winmm.lib
>>490 インポートライブラリをプロジェクトに参加させる方法すらわかりません・・。
どうやるんでしょうか?
最近圧縮アルゴリズムとやらに興味が出てきたので圧縮ソフトを作ってみようと思っているのですが、 圧縮プログラムの書き方もどこから着手するべきなのかもさっぱりです。 初心者でもその手のことがわかりやすく説明してある本やHP等がありましたら教えてください。
493 :
デフォルトの名無しさん :04/07/29 00:43
ツールバーのアイコンの横に文字列を添えたいのですが、 全てのボタンがTB_ADDSTRINGで一番最初に割り当てた 文字列(インデックス0)のみで表示されてしまいます。 例えば、 char szBuf[10]; strncpy(szBuf, "ボタン1", sizeof(szBuf) - 1); tbb[0].iString = (int)SendMessage(hToolBar, TB_ADDSTRING, NULL, (LPARAM)(LPSTR)szBuf); strncpy(szBuf, "ボタン2", sizeof(szBuf) - 1); tbb[1].iString = (int)SendMessage(hToolBar, TB_ADDSTRING, NULL, (LPARAM)(LPSTR)szBuf); strncpy(szBuf, "ボタン3", sizeof(szBuf) - 1); tbb[2].iString = (int)SendMessage(hToolBar, TB_ADDSTRING, NULL, (LPARAM)(LPSTR)szBuf); とした時、全てのボタンの文字列部分が「ボタン1」となってしまいます。 SendMessage関数は、何れも正しい値を返しています。 各々のボタンの文字列を正しく表示させるには、どうすれば良いでしょうか?
>>469 まさしくそういうクラスを昨日書いたよ。
カラムヘッダクリックでソート、一行ごとに背景色をつけるって仕様。
497 :
デフォルトの名無しさん :04/07/29 06:06
499 :
デフォルトの名無しさん :04/07/29 10:34
>>469 昔 mzListViewつーのがあったよ
>>490 #pragma comment(lib,"winmm.lib")
501 :
デフォルトの名無しさん :04/07/29 14:09
VisualStudio.NETに変わってからあまりに環境が変わりすぎてさっぱりわかりません。 クラスウイザードはどこへ行ったのでしょうか?代わりになるものはなんですか?
JPEGファイルを扱いたいのですが、CImageクラスでは保存時に圧縮率を設定できません。 圧縮率を設定するにはどうしたらいいのでしょうか?
>>501 右の方にニュッと出てくるプロパティとかあるじゃん
そこらへんにだいたい同等の機能が組み込まれてる
>>502 ,504
なんとなく解決。もういちどScribbleから始めます。
Scribbleってみんなやってるの? ちなみにやってない派。
MFCだけじゃなくVC++の使い方まである程度わかるようになるのでいい。 前の環境では書籍がついてたのだが、.NETではどこにあるのか教えてください。
>>495 ZeoSync で検索すればどんなHPだったのか分かる。
結局こいつら夜逃げしたのか。
>>508 詐欺事件があった、てことなのでしょうか。
で、どなたか492の質問に回答お願いします_| ̄|○
511 :
VisualC++初心者です :04/07/30 00:53
ノートパソコンの方にSDK入ってませんでした><; 初歩的な事聞いてごめんなさい;; 急いでSDKをダウンロードしたんですけど、 インストール途中に変なエラーが出て失敗・・・ なんだかインストールするまでも凄く動作が重くなったりするんです。 こんな事ってあります??
あります
513 :
デフォルトの名無しさん :04/07/30 14:43
VC++で使用出来るグレープシティのスプレッドシートのような ものはないのでしょうか?
Excel.Application
if(wParam == 'o')の処理をWM_CHARに書けというのは無しで、WM_KEYDOWNで行うにはどうすればよいかをお願いします。
jに応答するコードを書いてないから。 case WM_CHAR: if(wParam == 'h') { wsprintf(s,"hを入力しました"); MessageBox(hWnd,s,"MsgBox",MB_OK); } return 0; case WM_KEYDOWN: if(wParam == 'o') { wsprintf(s,"oを入力しました"); MessageBox(hWnd,s,"MsgBox",MB_OK); } if(wParam == 'X') { if((GetKeyState(VK_CONTROL)<0)&&(GetKeyState(VK_SHIFT)<0)) { PostQuitMessage(0); } } return 0;
jとo間違えました。 oを押しても反応がないのでどうすればよいかお願いします。
仮想キーコードと キャラクターコードの違いじゃねーの?
>>515 A〜Zの仮想キーコードは、'A'〜'Z'の「大文字」のASCIIコードと同じ。
522 :
デフォルトの名無しさん :04/08/02 14:39
Unixサーバにtelnetでログインしていろいろなコマンドを入力するかわりに GUI操作により自動でコマンド入力するようなソフトウェアをつくりたいと考えています。 たとえば、接続ボタンを押すとあらかじめ登録されたホストにtelnetログインし、GUIにホームディレクトリの ファイル一覧を表示し、GUIに設けた検索ボタンを押すと裏でtelnet経由でgrepコマンドを起動して その結果をまたビジュアルに表示するといったようなものです。 そのためにはまずtelnetを制御する仕組みが必要になりますが、MFC等で簡単にtelnetを扱うための クラスはありますか?FTP用のクラスはあるみたいですが。 ないとしたらVCではどのような手法でtelnetを実現するのが一般的なのでしょうか?
>>522 「Socket クラス」で検索すれば良いよ。
>>523 MFCのCSocketクラスというのが見つかりました。
これつかってみようかと思います。ありがとう。
VC++6.0 なのですが、WizardでMFCのexe(MDI)を作成したところWinMainがありませんでした。 今までWinMain(DllMain)ありきという考えでソフトを組んでいたんですが・・・。 アプリケーションを実行した場合、CWinAppクラスがWinMainを含んでいて(?)、 コンストラクタが最初に動作するという考えで良いのでしょうか?
527 :
デフォルトの名無しさん :04/08/02 19:51
たった
>>523 程度の助言でtelnetクライアントを書き上げるだけの
力があるなら
>>522 のような質問はしないと思うが・・・
telnetなんか使わずにssh使えよってツッコミはだれもしないのか? その方が楽に実装できるし、しかも安全だぞ。
どっからつっこでいいものやら...
>>526 WinMainはMFCに内包されとる。
WinMain(_tWinMain)→MFC自体の初期化→アプリケーションクラスのInitInstance()
ソース見てみ。
コンストラクタはWinMainの前。
ウィザードで作られたソースに
CHogeApp theApp;
ってグローバル変数があるだろ?
>>528 は、単に「ssh」と言ってみたかっただけ
533 :
デフォルトの名無しさん :04/08/03 07:59
>>532 リモートでコマンド実行したいんだから、
rsh とか ssh の Xsh 系でいいんじゃないの?
telnet 使おうとする方がどうかしてる。
あー確かに。 >532を改めて読むと、単にrshでlsとかgrepとかすればいいだけな気がする。
今回は、sshやrコマンド、X-window等は使えないローカルな環境をターゲットしています。 rコマンドは使えるようにしてもいいかとは考えていますが、対話型コマンド等考えると telnetのほうが無難かなとも思っています。 また、コマンドラインベースの操作にGUIをかぶせることが目的で、webにしようかとも 考えたのですが、ホスト側でhttpdを動かすことに抵抗があり止めました。 もちろん自分が使うのであればteratermでログインして作業したほうが楽です。 例としてはls等をあげていましたが本当は特殊なシステムを保守するためのコマンド郡になります。 Unixでのプログラム経験はありますがGUIやWindowのプログラム経験がゼロでしたので 取っ掛かりとして先の質問させていただきました。いろいろアドバイスいただきありがとうございます。
536 :
デフォルトの名無しさん :04/08/03 11:41
Visual C++ .NETで、.Net Framework コンポーネントのDatagridを ツールボックスから使用しようとしても、項目はあるのですが、 灰色で使用不可能になっています。 どうしたら使用できるのかどなたか教えていただけませんか?
VisualC++.NETで、ボタンをクリックするとラベル内の数字が1ずつ増加するプログラムを作りたいんですけど、 どう書けば良いんでしょうか…
538 :
デフォルトの名無しさん :04/08/03 12:13
>>537 ボタンをクリックするとラベル内の数字が1ずつ増加するプログラムを作る。
>>537 CString ss;
int i;
CWnd *wLabel = GetDlgItem(IDC_Label);
wLabel->GetWindowText(ss);
i = atoi((const char*)ss);
ss.Format("%d",++i);
wLabel->SetWindowText(ss);
_beginthreadを使ってプログラムを作ろうと思ったのですが、 process.hをインクルードしたのに error C2065: '_beginthread' : 定義されていない識別子です。 と出てしまいます。 ネットで調べてみると、どうやらマルチスレッド用のライブラリをリンクする必要があるそうなので、 そのようにしたいのですが、そのやり方がわかりません。 ネットで検索すると、VC6での変更のしかたは [プロジェクトの設定]-[C/C++]-[コード生成]-[使用するライブラリ]-[マルチスレッドライブラリ] を変更するらしいことは分かったのですが、 残念ながら手元にあるのが Microsoft Visual C++ .NET なので、(VC7にあたるんでしょうか?)どこを変更したらいいのかわかりません。 分かる方がいらっしゃったら教えていただけませんでしょうか。
プロジェクトのプロパティを開いて C/C++ -> コード生成 -> ランタイムライブラリ
>>542 レスありがとうございました。
解決しました。助かりました。
本当にありがとうございました。
>>537 ラベルに適当なIDを振ってそれにコントロール変数をCString型で割り当て。
ボタンのメッセージハンドラ内で、
{
Label.Format("%d", atoi(Label) + 1);
UpdateData(TRUE);
}
VC++6.0でwin32applicationで標準的なhelloworldアプリケーションを選択するとはじめからいくつかのファイルが用意されていますが、 プロジェクト名.cppファイルを参考書でそのままコンパイルしろとあったのですが、fatal error C1083: プリコンパイル済ヘッダー ファイルがオープンできません。'Debug/hhh.pch': No such file or directoryとでてコンパイルができません。 何もいじったわけでもないのになぜなんでしょう。。?
>>546 書き込みできないディレクトリ上で開発しようとしてないか?
そうでないならプロジェクトの設定がおかしくないか?
548 :
デフォルトの名無しさん :04/08/04 09:32
Visual Studio 2003 .NET つこうとるんだけど, そのエディタで,「閲覧モード」みたいなのはないの? 適当なキィを割りあてて切り換えながら使えると便利なんだけど…
SetThreadLocaleなどを使って CreateDialog等で既に表示されているリソースを 破棄しないで表示言語の切り替えをするには どうすれば良いでしょうか?
>>548 便利だと自分で思ったなら作れば良いのに・・・。
552 :
デフォルトの名無しさん :04/08/04 17:34
おまい、ばかだろ? そんなに簡単に作れるなら、書き込みするかよ
閲覧モードが具体的にどういうものか 詳しく書いていなくてあまりにも アバウト過ぎる。 質問者が馬鹿なだけ
そもそも「閲覧モード」ってなんだよ?オレ用語使った上に本人まで「みたいなの」を 付けてるんじゃ通じないよ・・・。
VCでActiveXコントロールを作りたいのですが イマイチよくわかりません。 ウィンザードを使ってOCXを作成し、Web上から実行して 自分で定義した関数やプロパティ値を操作したいのですが 関数やプロパティ値の定義方法がわかりません・・・。 CABファイルを作成してインストールさせるまではできたのですが・・・。
このスレで質問する事じゃないかもしれないけど、 a = ( USHRT )65535*( USHRT )65535; これって、左辺はその型の限界値を超えたら型に合わせて 値が変わるけど、右辺の評価ってどうなるんでしょうか 試してみたんですけど a=(unsigned short)65535*4%60; a=0となり、自分が意図した通り(1)の結果が得られました。 1:(型関係無しー>262140%60=0)(USHRT_MAX=65535) 2:(型関係有りー>65532%60=12) 。。。あれ?キャストしたのに、何故? あと、(UINT)a <= (USHRT)65535*7 の場合 65535*7をUSHRT型に変換して(=65529)から、値の比較なのか 65535*7のまま(=458745)、値の比較なのか どちらなんでしょう お願いします。
追記スマソ (UINT) a <= (USHRT)65535*7って書いたんですけど (UINT) a <= 65535*7(キャスト無し)の場合はどこまでが限界なんでしょうか。 質問多くて、すみません。
馬鹿でした。数字にキャストしてどうするって感じですね。。。 今までの質問撤回します。駄文の山が。ゴメンなさい。 もう一回考え直してみます。。。
>>555 ウィザードで作成したら、クラスウィザードを開きます。
オートメーションタブでプロパティとメゾット、ActiveXタブでイベントの追加が行えます。(クラス名は 〜Ctrlを選択)
visualC++をつかっていたら それまでコンパイルできていたのに、 「vcecho!エラー」とでてコンパイルができません。 調べてもこのエラーが何なのかわかりません。 どうすればよいかわかる方教えてください。
>>561 可能な限り最小限に隠蔽されたあなたの拙い情報を以ってエラーを特定してくれというのですか?
このスレの残りすべてを使って、考えられる限りの解決パターンをリストアップしろというのですか?
あなたは何様ですか?
まずは質問の仕方を、人に自分の状況を正しく伝える術を学ぶべきだと思います。
>560 ありがとうございました。
>>561 そのエラーメッセージでググってもなんもでてこねぇぇええーー!!ww
はっきり言って俺はそんなエラーが出たこと無いのでわからんけど、
vcechoエラー以外になんの情報もないメッセージボックスが出てたりするという状況なら、
vcechoエラー を、 vc echo エラー とわけて解釈して、VCのエラー…ということになるのかな?
VC自体の必要なファイルが壊れたとかそういうことの可能性もあるとか…。
VCを再インスコしたら直るとか…。知らんけど。適当言ってるだけだけど。
566 :
デフォルトの名無しさん :04/08/06 16:32
外部信号をA/D変換ボードを介して、取り込んだデータをもとに 波形をプロットするものを作っています。 波形をプロットするところまでは出来ました。 メニューから「サンプリング」をクリックすると、波形がプロットされるように しているのですが、2度、3度とサンプリングをすると、前の波形が残ったまま 波形が書き込まれていきます。 WM_CREATE内で初期状態をどこかに保存し、「サンプリング」をクリックすると 波形をプロットする前に、その保存したものを呼び出せば良いのではと考えたの ですが、その方法が分かりません…。 実現方法をご教授おながいします。
>>566 バックグラウンドカラーで四角を書き込むとかではダメなん?破線が引いてあるとか?
メモリ上にデバイスコンテキスト(DC)を作成し、(関数名忘れた・・・。) CreateBitmapでビットマップを作成しメモリ上のDCに関連付けし、 BitBltで初期状態のビットマップ情報をメモリ上のDCにコピーしておけば良い。 初期状態に戻すにはメモリ上のDCから対象DCにコピーし直せばOK。
570 :
デフォルトの名無しさん :04/08/06 17:38
Visual C++ 6.0 と Visual C++ .NET ではどちらが最新版なのでしょうか? それともまったく別物なので比較できないのでしょうか? 違いがいまいちわからないので教えてください
>>570 6.0はXP発売以前のver
こう言えばわかるだろ?
572 :
デフォルトの名無しさん :04/08/06 18:00
では最新版は .NET なのでしょうか? 今、6.0をもっているので買い換えようか迷ってました。
>>573 もうちょっと待つと .NET 2005 が出る
>>575 じゃあ、もう少し待ってみます。
今日、電気屋に行ったら .NET 2003 アカデミパック が5000円くらいで売っていたので買おうかどうか迷ってました。
買わなくて正解でしたね。
>>575 何ヶ月待たせるつもりだw
5000円パッケージがすぐに出るとも限らんし。
>>576 それ、アカデミックじゃなくてtheSpokeのやつ。
それに.NET 2005が出ても、theSpokeがすぐ出るとは限らんから、
そんなに安く買えないと思うぞ。
.NET 2005 じゃなくて .NET は製品名から取れたんじゃなかったっけ
>>579 ヘッダとライブラリの設定してるだけじゃん
>>579 そうか?そこの設定ファイルの書き換えってのが何なのか知らんけど、
PSDKにPath通すのは今まで通りじゃ?
>>576 学生だったら卒業する前にとっとと買うのが正解
>>583 Academicならok
theSpokeはNG
>>584 theSpokeも卒業後OKだが?
Academicを売りつけようとする奴に騙されてないかあんた?
.NET対応にするならC♯使った方が楽そうなんだけど、 敢えてC++にする意味ってあるんですか?
そんなもん自分の好きにしろ
なんか、すぐに安くなるわけじゃなさそうですね。 皆さんが言うように theSpoke ってやつでした。 正規のものと何が違うのですか?
君のは初めから全然技術的な質問じゃないんだけど、自分で調べる気は無いんかい。
>>589 一応、調べてから発言しているつもりですが
Spokeとか聞いたことがなかったものですので、なにか購入に当たってのデメリットとか教えてほしいです。
デメリットについてはSpokeのページを見ても普通書いてませんし
>>590 Pro版を10マソ付近で購入した人から妬まれます
絶対調べてないって・・・ 質問内容も正規との違い→購入に当たってのデメリットに変わってるし・・・ VC++6.0とVC++.NETのどっちが新しいかなんてすぐ出てくるだろ・・・
>>592 すいません。よく調べてなかったです。
デメリットもマイクロソフトのページに出てました。
594 :
デフォルトの名無しさん :04/08/07 01:09
C++とC#の環境だけほしい場合は、Visual Studioを買うより それぞれを個別に買ったほうが値段、内容ともに得なの? vbとかvjはいらんので。
>>570 とりあえず VC++ Toolkit 2003 落としとけば?
>>597 今は VC++6.0 を使っているので、.NETに買いかえるべきか迷ってました。
Spoke版の.NETも安いし悪くなさそうなので(登録とかの手続きがいらないけど)
買ってみようと思います。
それともVC++6.0持っているなら.NETは5000円を出す価値がないとか?
今や全ての製品から.NETという名は除外されたね
600 :
デフォルトの名無しさん :04/08/07 06:57
>>598 それはお前がVC++6.0を使いこなしているかどうかによる。
>>598 Spokeはプロダクトキー発行の手続きが必要だしょ。(2週間ぐらいかかるっけ?)
俺、theSpoke買ったけど、VC++6.0使い続けてるなぁ。
PCが低スペックすぎで、.NETが重いからだけど…
俺は4日できました
>>601 プロダクトキーがくるまでのために体験版DVD(キー不要)も同梱。
>>598 VC6を既によく使って配布する程度のソフトをいくつか書いてるなら
.net買っても移行しづらいと思う。使い勝手もかなり変わるし、それで
使いやすくなったって言う人は少ないし。現状の開発環境に特に
具体的な不満点があって、.net版の導入で解決されることが見えてる
なら買えば良いけど、そうでないなら買ってもVC6を使い続けることに
なると思う。
>>604 このレビューは参考になりましたか?
◎はい ○いいえ
>>604 参考になりました。
VC++6.0を使いこなしているとは思っていませんが、
マシンスペックに自信あるわけじゃないので買い替えは見送ります。(動きが遅くなるのは問題ですね)
今もっているVC++6.0は学校で配っていたやつでMSDNがないのでMSDNあるやつを買おうと思ってましたが、(タブ表示も魅力できでしたが)
重くなるのであれば、買わないほうがよさそうです。
>>606 VC6から.NET2003にしたけど、正直泣きながら使っている。
暗黙の仕様変更が多いため、使い勝手はかなり悪い。
コンパイラこそVC7だが、
UIは事実上VC V6.0→.NET V1.0でバージョンダウン。
個人的にはビルドミニバーが無くなったのが 悲しい
>>606 タブはWndTabsと言うアドインを入れれば使えるようになるよ。
でも漏れはなるべく.net使うけどな。
色々向上してるところも有るからねぇ。
仕事でVisualStudio6も.netも使っているのでいくつか列挙。 デバッグ環境はサブウィンドウの管理が変わったお蔭で随分良くなったと思う。 クラスウィザードほど手軽ではないし、その辺りの使い勝手は大きく変わった。 ソースへの埋め込み方が小汚くなった。 resource.hをテキストエディタで編集しても問題が出にくいようだ。 ダイアログエディタが落ちにくくなったかも。 言語的にはテンプレートでの警告がなくなったりansi準拠度が増している。 MFCが吐くソースに関しては一長一短。 ヘルプに関してはVC6のそれがバージョンダウンだと思っているのでましに戻った。
ドトネットのヘルプは重過ぎる。
612 :
デフォルトの名無しさん :04/08/07 18:56
昔のVC++って、パッケージが5kgくらいだった。まじで物理的に重かったが、ありがたみがあった。
C/C++言語・関数リファレンスやら Win32APIリファレンスまで入ってたからね。 印刷物で。 買った〜!って言う感じは持てたよね。
今はポースターが沢山入っているよね ヤラレターっていう感じ
昔の MSC ってフロッピー1枚で動いてた。 まじで速度的に重かったが、よく我慢して使ってたと思う。
大容量だ
>>614 あのポスターって使ってる人いるの?
価値あるものなの?
さあ。。 pdfでダウンできるからな。
619 :
C初心者です :04/08/08 13:06
visualC++でウィンドウを作成をするにはどうすれば良いのでしょうか?
CerateWindow
621 :
デフォルトの名無しさん :04/08/08 13:12
>>620 C++Builder見たいにいろんなコンポーネントをポトペタと貼り付けたいのですが
CerateWindow で作成したWindowにどうやればOK?
>>621 VC++でポトペタがやりたかったら .NETでWindows フォーム アプリケーションをつくれ。
625 :
デフォルトの名無しさん :04/08/08 19:53
VC++はそういうものだ
しょうもない質問なんだけどさ、msvcr71.dllはアプリケーションと一緒に 再配布してexeと同じ場所におけって書いてあるけど、その配布する元の ファイルはどのディレクトリからもってくればいいの? パッチとか当ててファイルが更新された場合なんかに、常に最新のバージョン であることが保証されている場所とかある? システムディレクトリにあるやつでいいのかな?
VC.NET 2003 って、 struct Impl; Impl* pimpl; を struct Impl* pimpl; って書けますか?
分からなければCDに入っているのをコピーすれば良い。 dllの最新バージョンはVSのサービスパックで提供されるからそれを使えば良い。
631 :
デフォルトの名無しさん :04/08/10 07:38
>>629 試せねーから、聞いてんじゃんよ
馬鹿かおめー
無償でできるんだから試せや。
VC++.NETってなんでこんなにビルドが遅いんですか? もしかしてIDE自体が.NETフレームワークで動いてんですか?
これここで聞けばいいですか? VC++netで checklistboxを使いたいんですけどツールボックスの中にはありませんよね これをデザインで視覚的に操作しながら編集するには?
コンソールアプリで純粋にCをやりたいんだけど、 どうもC++でコンパイルしてやがるんです。 助けて下さい。
拡張子を.cに
インラインアセンブラ内でカスタムリソースを読みたいんですが、 どうもうまくいきません。 if(h_res1 = LoadResource(NULL,FindResource(NULL,TEXT("#100"),TEXT("BINARY")))) table1 = (LPSTR)LockResource(h_res1); で、バイナリを読み込んで MOV EBX,dword ptr[table1+EDI+1000h] で、バイナリデータの一部を読みたいんですが、例外が出て止まってしまいます。 ちなみにEDI+1000hはオフセット値なんですが、何がいけないんでしょうか? というかこういう質問はアセンブラスレ行きですかね・・・
640 :
デフォルトの名無しさん :04/08/11 20:29
サービスを登録するプログラムを作ってるんですが、いきなりつまづきました。 VS6.0で、ダイアログベースで作ってるのですが、 SC_HANDLE scm; とすると、SC_HANDLEが定義されていない、と言われます。 以下、OpenSCManager、CreateService等の関数も定義されていないと言われます。 windows.hはインクルードしているのですが、???です。 誰かわかる方、教えてくださいm(__)m
>>641 あはは
ヘルプに書いてありました。
ごめんなさい。ありがとう。
643 :
デフォルトの名無しさん :04/08/11 21:55
Visual C++ Toolkit 2003は、 exeをつくるとき、ファイル名の前に何て入れるんですか??
645 :
デフォルトの名無しさん :04/08/11 22:04
Alt + F8の自動インデントが効かなくなったのですが、 どこに設定があるのでしょうか?
Visual C++のテキスタエディタの編集「元に戻す」が 急に効かなくなった。 パラメータヒントもたまに使えなくなるし、 なんかバグ(?)多い。 難しいよ、ややこしいよ、VisualC++... パラメータヒントの方はヘルプに載ってたから、.ncbファイル削除 ですぐ直るけど、「元に戻す」の方は不明です。 どなたかお願いします。
>>646 ツール->オプション内、テキストエディタ->すべての言語->タブ
で設定。
(インデントって書いてあるけど自動インデントの事だと思う)
初心者なので、間違ってたらゴメソ。
>>647 バグへの対処方法がヘルプに載ってるっていうのもすごいな
650 :
デフォルトの名無しさん :04/08/13 09:04
Windows2000(SP4)にVisualC++(6.0,SP5)を入れてみたのですが インテリセンスが有効になっていると C++ソースを打ち込むとき 10〜15秒ぐらい VisualStudio の応答が無くなります。 (.ncbファイルを消してみるというのは試してみました) ステートメント入力候補のオプションのチェックを全部外せば 避けられるのですが、こんなものでしょうか。 またはVisualStudio.Net 200xに乗り換えろというMicrosoftの 主張でしょうか。
うちにも同じ環境があるけど、べつに遅くないでつ。
問題にしている人が皆無なので日ごろの行いのせいである 可能性も否定できませんが、なんとなく分かってきました。 #include で '<'を打ち込んだ時になにやらネットワーク上に ブロードキャストを送って応答を待っている感じです。 ちなみにEnterprise版です。
すみませんです、参照していた別プロジェクトの.ncbファイルに今は無い 別のマシンのファイルが記述されており それを見に行っていた模様です。
654 :
デフォルトの名無しさん :04/08/13 20:39
メッセージマップを使うとエラーがでるのですが、原因がわかりません…。 具体的には、 #include<afxwin.h> //----------ウィンドウクラス----------------------- class CAddressWnd : public CFrameWnd { public : CAddressWnd(); void OnPaint(); DECLARE_MASSAGE_MAP() }; BEGIN_MESSAGE_MAP(CAddressWnd,CFrameWnd) //この行 ON_WM_PAINT() END_MESSAGE_MAP() のところで'GetMessageMap' : このメンバ関数は、'CAddressWnd' クラス内で宣言されていません。 となります。本の付録のサンプルプログラムをコンパイルした際にも同じエラーがでてしまいます。 ヘッダーファイルが壊れているのでしょうか?
>>654 ×DECLARE_MASSAGE_MAP()
○DECLARE_MESSAGE_MAP()
マッサージマップワロタ
せめてコンパイルが通るようマッサージマップの後ろにセミコロンぐらい付けといてくれないと。 ネタとしてはまだまだだな。
マクロでイベント処理をする方法がわからないのですが
以下にやり方が書いてあるのですが、自分でやってみても上手く動きません。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vsintro7/html/vxtskmacrosenvironmenteventsprojectitem.asp わかる方やり方を教えて下さい。
今の自分のソースです(全然わかってないと思うので見当違いの事をやってると思います)
Public Module EnvironmentEvents
+Automatically generated code, do not modify
,↑デフォルトで生成される隠れてる部分です
<System.ContextStaticAttribute()> Public WithEvents CommandEvents As EnvDTE.CommandEvents
' This procedure handles DTEEvents.OnMacrosRuntimeReset.
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles DTEEvents.OnMacrosRuntimeReset
CommandEvents = DTE.Events.CommandEvents
End Sub
Public Sub CommandEvents_AfterExecute(ByVal Guid As String, ByVal ID As Integer, ByVal CustomIn As Object, ByVal CustomOut As Object) Handles CommandEvents.AfterExecute
MsgBox(DTE.Commands.Item(Guid, ID).Name)
End Sub
End Module
描画の質問です。 InvalidateRect(&rect, TRUE)で 無効矩形だけじゃなくて、クライアント領域の背景も消されてしまう わけですが、 矩形内のみ消去する方法って何か有ります?
InvalidateRect(&rect, FALSE)
>>662 よく考えてみたら矩形内に上書きすればいいだけで
消去する必要なんてなかった。FALSEでよかったんですね。
新しいワークスペース プロジェクトwin32appをつくって、 たとえばCDにあるサンプル.cpp リソース.rc リソースヘッダ.h をvc++6にadd files to the projectで入れる。 それらはprojectに追加されるけど、PATHがCDで、ファイルが読取専用になるでしょ? そうでなくて そのワークスペースにPATHも変えて読取専用をはずして取り込む方法はありますか? (先にそれらのファイルを移動させて、読み取り専用をはずすのはめんどくさい)
ない
え 、まじで?
マジで。
かなしけど信じる。ずっと面倒だと思ってたが、やり方知らんだけだとおもってた。 ありがと
>>668 必要ならマクロなりバッチファイルなり好きな手段で自動化すればよかろう。
そんなに面倒か?コピーして、属性を変えるだけだが… まさか、ファイル1つずつ属性変更、なんてやってるわけでもあるまい。
VC++6.0でwin32アプリケーションで標準的なhellowordを選択するといくつかコードが用意されますが、 ソースファイルのプロジェクト名.cpp(おそらくメインのソースファイル)のコードをビルドメニューの中のコンパイルを選択しコンパイルを実行すると fatal error C1083: プリコンパイル済ヘッダー ファイルがオープンできません。'Debug/tamesi.pch': No such file or directory となり、コンパイルすることができません。 ビルドメニューのビルドを選択するとビルドはできるのですがなぜかコンパイルのみ上のエラーが出てしまいます。 もしかしてあらかじめ用意されているファイルはコンパイルする必要がないのでしょうか? なぜこのような問題がおきるのか教えていただけると助かります。
先に日本語の勉強をした方が良いと思います。
>>671 StdAfx.hをプリコンパイルしたファイルが作られてないだけ。
674 :
デフォルトの名無しさん :04/08/15 21:58
VC2003のISO C99の対応状況はどうなんでしょう?
677 :
デフォルトの名無しさん :04/08/16 02:36
先日 Visual Studio.net を買ったんですけど、 #include <iostream.h> とやったら、そんなヘッダないって言われました。 いろいろやったところ、 #include <iostream> をインクルードして std::cout<<"Hello World"<<std::endl; ならうまくいくことがわかりました。 iostream.hはなくなったのでしょうか? また、std::coutではなく、coutだけで記述できないのでしょうか? どうしてこのようなことになるのでしょうか? C++は初めてやったのでよくわかりません。 私の持っている入門書にはこのようには書いていませんでした。 教えてください。
持ってる入門書を投げ捨ててちゃんとした本買え。
using namespace std;
>678 禿げ上がってしまったほど同意。 >679のような文の説明もないような入門書とやらには 金を出す価値はない。
>>677 何年前の入門書だよ。
21世紀以降の本でそれだったら泣くぞ。
683 :
デフォルトの名無しさん :04/08/16 17:17
SDKで、エクスプローラ風フォルダリストを作りたいんですが、どうしたらいいんでしょうか? 環境 Win2K VC++ 7.1
環境を記号のように書いて質問する人の神経 書けば文句ないんだろ的思考
>>683 DrawText や LoadImage や BltBit等を組み合わせればできると思います。
最新のWTLにそのものずばりなサンプルが入ってるんだけどな。 WTLをSDKで読み替えられるならそれで十分だと思うけどな。
689 :
デフォルトの名無しさん :04/08/17 00:16
long型整数は0Lですよね double,float,char型の整数はどうかくのですか?
0.0 //double 0.0F //float charは計算式中ではintに格上げされるので、指定は無い
691 :
デフォルトの名無しさん :04/08/17 00:26
doubleやfloatは整数じゃねえだろとチンコ突っ込んどく。
694 :
デフォルトの名無しさん :04/08/17 00:42
メインのウィンドウハンドルってグローバルにすると 何かまずいんでしたっけ? いちいち関数に引数つけるの面倒くさいので グローバルにしちゃいたいんですが、それって間違ってますか?
間違ってる
レスありがとうございます。 IShellBrowser を調べてやってます。 日本語サイトはあんまりないみたいですけど。 WTLはやったことないですけど、 インストールはしてるので、ちょっと見てみます。 >685 これはちょっときついです。
>>696 そこの「ポインタと配列を混同している」の説明って
まるごと間違ってない?
リテラルの書き換えは未定義とかそういう話か?
素直にconst付けりゃいいじゃん
何を的外れな
705 :
デフォルトの名無しさん :04/08/17 11:28
現在、WIN上でリニアPCMの音ファイルをμ-lawの音ファイルに
変換するプログラムを作成しています。
色々ネットを調べたのですが、音ファイルに関する知識があまりなく
よく分からない状態です。
自分なりにソースを作ってみたのですが、うまく動きません。
分かる方がいらっしゃいましたら、コメントいただけませんでしょうか。
お願いします。
仕様としては、変換元ファイル名と変換後ファイル名を入れれば
勝手にコンバートされるという形を取っています。
ソースとサンプル音ファイル(16kHz-16bit PCM)は
http://aix.exrise.jp/cnv/wave_cnv.zip こちらにあります。
よろしくお願いします
うまく動かないとは、どういう状態だ? エラーが出るのか?プログラム自体が起動しないのか? 音が出ないのか?表示がずれるのか?ハングアップするのか? 変換が出来ないのか?オランダ人が出てくるのか?
オランダ人です
708 :
>>705です。 :04/08/17 13:42
>>706 さん レスありがとうございます。。。
オランダ人は出てきませんです。
音声ファイルは吐き出されますが、音がまともに出てきません。
CoolEditという音声をいじくるソフトで聞くとかろうじて聞ける
音声ファイルができます。
ちなみにCoolEditでも変換できるのですが
私が作ったプログラムからできる音とは
音質に大きな隔たりがあります。。。
>>708 よく分からんままレスしますが,
ALSAのaplayで再生させると,
変換前のファイル(sample.wav)は
Signed 16 bit Little Endian, Rate 16000 Hz, Mono
と表示されるのに,変換後のファイル(imo.wav)は
Unsigned 8 bit, Rate 8000 Hz, Mono
と出ます.これはこれでいいんの?
wavのヘッダを間違ってるとかないですか?
711 :
>>708 :04/08/17 16:23
>>709 さん レスどうもです
実際の変換前の音声ファイルはヘッダ無しのものに対して行おうと
思っていますので、ヘッダに関しては何も考えていませんでした。
(データ部分だけに対して変換を行おうとしていました)
>Unsigned 8 bit, Rate 8000 Hz, Mono
となっているとは思いませんでした。
元ファイルは必ずPCM16kHz-16bitととし
変換後はulaw16kHz-8bitとしたいのですが・・・
私の作成したソースではどこをどういじればいいのか
わからないのですが・・・
分かる方がいらっしゃいましたら
ご教授お願いします
713 :
>>708 :04/08/17 17:41
>>713 ヘッダの読み込みで既に失敗しているのでは?
sampling frequencyは65408でいいんですか?
715 :
デフォルトの名無しさん :04/08/17 18:15
Jpegを読み込んで、表示させるにはどうしたらいいの? MFCとかはなしでおねがい。
>>713 とりあえずこの辺り.一応こちらではこれで動きました.
int get_word( FILE *fp ) {
signed short result (0);
char *last ((char *)(&result + 1));
for (char *p ((char *)&result); p != last; ++ p) {
int a (fgetc(fp));
if (a == EOF)
return GET_WORD_EOF;
*p = (char)a;
}
return result;
}
int get_ulong_word( FILE *fp, unsigned long *x ) {
char *last ((char *)(x + 1));
for (char *p ((char *)x); p != last; ++ p) {
int a (fgetc(fp));
if (a == EOF)
return -1;
*p = (char)a;
}
return 0;
}
GDI+って、どのOSから対応してるの?
XP
720 :
>>708 :04/08/17 20:35
>>716 さん ありがとうございます。
無事に動きました。。。
(簡単そうに見えて実はすごく難しいのですが・・・)
もう一つ質問させてもらえますでしょうか?
私が作ったプログラムは16kHz-8bitでファイルを作っていますが
これを8khz-8bitにする場合にはどうすればいいのでしょうか?
すみませんが、こちらの方もわかりましたら教えていただけます
でしょうか?
たぶんサンプルプログラムの
#define BIAS 0x84
#define CLIP 32635
を変更すると思うのですが・・・
>>718 98/NT4.0/Me/2000/XP
すいません、質問お願いします。 MSFlexGridを使ってスケジュールのプログラムを作り、 今度はそれを印刷するプログラムを作りたいのですが、 MSFlexGridの内容をそのまま印刷する方法というのはあるのでしょうか? もしくは罫線を使って、Excelのような表を作って印刷したいのですが 何か方法はありますでしょうか? 教えてください。 環境はWindows98にVisual C++6.0です。
えっと、質問なんですがAPIってCであらかじめ用意されている関数を使ってマイクロソフトがつくった関数なんですか?
ぶうぁっはっはっは・・・・
>>720 それってu-lawにエンコードする前に普通にダウンサンプリングするってのではダメなのですか?
学習が目的でないのならsoxを使ってみるといいですよ.(Winはパイプはまともなのかな?)
私はWinでは試してないですけど,ダウンサンプリングはできますし,
u-lawエンコードもあるようですよ.
726 :
>>708 :04/08/18 00:01
>>725 さん
エンコードする前にダウンサンプリングをするというアイデアも
考えましたが、やはり同時に処理をしたいというのも考えています。
(多分、ダウンサンプリングしてからエンコードするという
2段処理をしなければいけないのだとは思うのですが・・・・)
やはり最初、SOXやSCMPX、wingogoなどを使用しようとしましたが、
それでは自分の役に立たないと思ったので自分でやろうと調べていました。
winでsoxを使用するのは可能です。しかし使用するのに
ちょっと制約が付きましたが・・・
SOXのソースを見てみましたが、レベルが高すぎて・・・(笑)
>>726 708さんの言う「同時」の意味は同じプロセス内でということのようなので,
それだったら,
sox -t wav sample.wav -t raw -U -r 8000 -c 1 imo.raw
でできます.(imoはwavではないのでsuffixはrawとしました.)
この場合はsample.wavを入力にして,
8000Hzモノラルでu-lawエンコードしたデータがimo.rawとして保存されます.
ファイルのコンバートが目的じゃないのなら,soxは標準入出力を使えますので,
標準入出力使ってプロセス間通信すればいいのではないでしょうか?
例えば,上の例を改編して標準入力からデータを受け取って変換したものを標準出力に出力させるには
sox -t wav - -t raw -U -r 8000 -c 1 -
とすれば良いです.
(ただし,私はwinでのプロセス間通信には暗いので,これ以上は説明できません.誰かフォローを.)
wave_cnvにダウンサンプリング機能を入れるのであれば,
読み込んでから,linear2ulaw(a)でエンコードする間にバッファがいるでしょうね.
ダウンサンプリングの解説はググれば結構ヒットしますよ.
728 :
>>708 :04/08/18 00:41
>>727 さん アドバイスありがとうございます。
wave_cnvにダウンサンプリング機能を入れてみたいので
明日、ダウンサンプリングに関して調べてみます。
どうも遅くまでありがとうございました。
>>723 OSがアプリケーションのために用意している関数郡とでも解釈しとけ。
関数といってもCに限らずVBとかDelphiとかからでも呼べる。
Cの標準ライブラリなんかも最終的にAPIを呼んでいる。
730 :
デフォルトの名無しさん :04/08/18 02:45
OSが用意してるの? へぇ〜、知らなかったow
>>729 APIをどうやって使うかっていう質問じゃなくて、
中身がどう作られているかっていう話じゃないの?
>>723 標準関数 : Cコンパイラに最初から定義されている関数
→ 作成者 : Cコンパイラ開発者
→ 有効 : C専用
Win32API : Windowsがプログラムを動かすために作られた関数
→ 作成者 : Microsoft
→ 有効 : Windows専用
てことで両者は無関係で別物
733 :
デフォルトの名無しさん :04/08/18 05:01
>>732 それはもしかしてギャグで言っているのか?(AA省略)
>>733 あれ?
オレも同じような解釈してたんだけど違うの?
>>732 Win32API は「Windowsがプログラムを動かすために作られた関数」ではなく
「Windows上でタスク(アプリケーション)を動作させるのに便利な関数」で、ユーザでも作成できるでしょ?
>>735 Win32APIはWindowsにはじめから用意された関数群だけのことを言うから自分で作ったものはWin32APIとは言えない。
逆に標準ライブラリ関数はISO/ANSIの規格を満たしていれば良いのだから自分で作った物でも標準ライブラリ関数と言えるけど。
へぇ、今まで自分が作ったAPI関数もWin32APIなのだと思ってた。
はじめから用意されたって、それはどうやって作るんですか?
>>738 そいつはMicrosoftのみぞ知るということじゃなかろうか
Kernel32.dll
User32.dll
Gdi32.dll
Advapi32.dll
Winmm.dll
etc...
全部OSの開発者が作ったものだしね
プログラマーのために提供されたものではあるけれどOSもこれを利用しているくらい低レベル
CやC++で作ってる場合もあるし、アセンブラ直書きの場合もあるだろう。
>>738 Microsoftが「これはWin32APIの一部だ」と言えばそれはWin32APIの一部。
Visual C++6でコンパイルされたEXEとDLLを分析して、 コンパイルしたパソコンを特定できるツールはありませんか? 容疑マシンが10台程度なので、C++のプロダクトIDや CPUシリアルナンバーの一部が逆算できればいいのですが。
>>742 先輩すまん。
むしゃくしゃしてたので、それ俺が作りました。
>>742 EXEやDLLにはVCのプロダクトIDやCPUシリアルナンバーなんて入っていないから無理そうな気がする。
745 :
デフォルトの名無しさん :04/08/19 05:56
しょぼい質問で恐縮なんですが、エディットボックスのプロパティで 「垂直オートスクロール」にチェックを入れているものの、 何行文字を打ってもスクロールバーが現れません。 確かこのオプションって行数がはみ出ると 勝手にスクロールバーが出てくるやつのはずだったと思うのですが・・・ 何か考えられる原因などあったら教えてください。
>>742 ファイルのオーナー見れば分かるんじゃない?
>>745 >勝手にスクロールバーが出てくるやつのはずだったと思うのですが・・・
違います。
749 :
デフォルトの名無しさん :04/08/19 17:53
DirectPlayの練習のため、ダイアログベースの簡単なチャットを作ってます。 DPを使うにはウィンドウメッセージのコールバック関数とは別に、 通信の際の色々なメッセージを受けとる専用のコールバック関数を使うのですが、 そこで受け取ったメッセージ(DPN_MSGID)に応じて、 メインダイアログウィンドウに配置したエディットコントロールなどに 文字表示をしたいと考えてます。 そのため、そのコールバックのなかで、SetWindowText関数等で メインウィンドウ(ダイアログ)のハンドルやエディットコントロールのハンドルを 使いたいのですが、コールバックの引数は自分で定義できないっぽいので ハンドルを引っ張って来れません。 そこでハンドルをグローバルにしてみたんですが、 このコールバックの中でグローバル変数を弄ると落ちるようなんです。 それがこのコールバック特有のものなのかどうかは、よく分かりません。 また、意味があるのか分かりませんが、文字表示関数を別個作り、 そちらに飛んだ先でグローバル変数を使うようにもしてみたのですが、 やはり場合によってフリーズします。 この表示の部分をどうやって実装したらいいのか分かりません。 引数としてハンドルを持たせることができない以上、 グローバルにするしかないような気がするんですが、 今の所メッセージボックスでしのいでます、、、(これならハンドルを使わないから) どんな方法があるか教えて頂けませんでしょうか。よろしくお願いします。 ちなみにクラスは使っていません。
750 :
デフォルトの名無しさん :04/08/19 18:19
すみません。教えて下さい。
http://www.sist.ac.jp/~suganuma/cpp/3-bu/10-sho/10-sho.htm#e-10-6 −−−ここのサイトで
今C++を勉強しているのですが、クラスのところで、”リスト構造”というクラスがあるんです。
そこの文字列を追加をしていくソースの部分でわからない所があります。
else より下の部分で、
lt1 = lt2;
lt2 = lt2->next;
k = strcmp(dt->st, lt2->st); // 比較
if (k < 0) { // 追加
dt->next = lt2;
lt1->next = dt;
sw = 0;
この部分の動きと言ったらいいんでしょうか?どのようにして何を渡したりしているのかがわかりません。
この部分を解りやすく解説をお願いできないでしょうか?
一応、自分なりに考えたのですが、わかりません。
よろしくお願いします。
751 :
デフォルトの名無しさん :04/08/19 18:24
すみません、馬鹿みたいな質問なのですが、どうしても分かりません。 ピクチャボックスのプロパティを見ることが出来ません。 ピクチャボックスをコントロールボックスから貼り付けたのはいいのですが、 ピクチャボックスを選択して右クリック→プロパティとすると、 フォームのプロパティが出てきてしまいます。 どうすればよろしいのでしょうか?
>>750 dt->stがlt2->st(つまりthis->next->st)よりstrcmpで比較して小さければ、dt->nextにthis->next、this->nextにdtをそれぞれ代入する。
そうでなければどこかに代入するまでwhileでループする。
そのリストはソートされていて、そのソート作業を常に要素の追加時に行っているって具合だろう。
ところで2ヶ所のsw = 0;はどっちもbreak;に書き換え、while (sw > 0)もwhile (1)かfor (;;)に書き換えてswは消滅させた方がいい。
VC++netです。 ダイアログエディタでpicture controlを貼り付け 変数の追加→ CStatic Image_Panel とやって CBitmap img; img.LoadBitmap(filename); Image_Panel.SetBitmap(img); このようにしたのですが イメージファイルを表示するには何が足りないのでしょうか? それとも全然間違ってる?
752さん、解説ありがとうございます。あの、さらに質問なんですが、たぶん自分がオブジェクトを理解してないからなのかも知れませんが、 dt->next, dtはまったく別ものなんでしょうか?
>>753 ファイルから読み込みたいならそれだとダメだね。
CBitmap.LoadBitmapに渡す引数はリソースに展開されてる
ビットマップのリソース名かIDなんで。
ファイルから読み出すならLoadImageかOleLoadPictureを
調べてみると良いよ。
>>750 悪いことは言わん、そんな旧世紀の異物のような書き方をする香具師からC++を学ぶんじゃない。
757 :
デフォルトの名無しさん :04/08/20 01:27
>>757 EffectiveC++に書かれていること位は理解できたか?
760 :
デフォルトの名無しさん :04/08/20 01:55
なにか?
どういう所が旧世紀の異物のような書き方なんですか?
762 :
デフォルトの名無しさん :04/08/20 02:45
>>熟達者の皆さん どうか教えてください。僕はjavaしかできない愚か者なんですが,(他スレではjava厨とも呼ばれます) VC++では,EclipseのようにIDEが認識しているクラスのメンバにはすべて“.”でアクセスできるんですか? つまり,IDEのエディタ上でオブジェクトの後に“.”を打つとメンバがリスト表示されますか? ↑なんか初心者じみてすいません。例えば↓の感じです。 hogeclass hoge = new hogeclass(); hoge.methodhoge(); ←hogeを打つとメンバがリスト表示 以前使ったLinux用のKdevelop(C++のIDE)ではユーザがヘッダを書いたものに関しては 認識してリストしてくれました。 でも,標準ライブラリのクラスのメンバは認識してリスト表示してくれませんでした。。。 VC++ではどうですか?
deru.
>>761 旧世紀の異物(遺物じゃないのか?w)≒Cと捉えると>756の言いたいことが見えてきそうだ。
>>762 MFC、自作ライブラリ、アプリのクラスを、1つのブラウザ情報で、メンバ表示できてるよ。
windows.h と valarray をインクルードするとエラーが30個くらいでてくるのですが、どうすればいいのでしょうか?
おまえの質問の仕方だとどうしようもない。
えっと、VC.NET 2003 で、 #include <windows.h> #include <valarray> int main() { return 0; } ってやると、 valarray(314): error C2059: 構文エラー : ')' valarray(321): error C2143: 構文エラー : ')' が '}' の前にありません。 valarray(321): error C2143: 構文エラー : ';' が '}' の前にありません。 valarray(321): error C2143: 構文エラー : '}' が ')' の前にありません。 valarray(323): error C2146: 構文エラー : ';' が、識別子 '_Ty' の前に必要です。 valarray(332): error C2146: 構文エラー : ';' が、識別子 'valarray' の前に必要です。 valarray(321): error C2238: ';' の前に無効なトークンがあります。 valarray(314): error C2334: ':' の前に予期しないトークンがありました。関数の本体は無視されます valarray(323): warning C4003: マクロ 'max' に指定された実引数の数が少なすぎます。 valarray(314): warning C4003: マクロ 'min' に指定された実引数の数が少なすぎます。 って、エラーが出てくるんです。
-DNOMINMAX
>>770 ネタじゃないです…
>>771 max, min が展開されてそれでエラーになっちゃってるってことですかね…?
windows.hでmin/maxという名前のマクロが定義されてるから、その所為。
#define NOMINMAX で解決出来ました。 マクロが展開されるせいってことはインクルードの順序かえてもどうにか出来ますね。 MS はこんなマクロなんか定義しなきゃいいのに…
リストボックスをクリックした時マウスが指す項目を取得したいのですが POINT cr; GetCursorPos(&cr); BOOL d; CPoint pt(cr.x , cr.y); //←もっと簡単な方法がある? int index=n_list.ItemFromPoint(pt, d); この処理を何度呼んでもindexには同じ数字しか入りません。 それもクリックした番号とは関係ない(と思う)数字が入っています。 どこがおかしいのでしょうか ご教授願います。
スクリーン座標からクライアント座標に変換しないとだめ CPoint pt; GetCursorPos(&pt); n_list.ScreenToClient(&pt); BOOL d; int index=n_list.ItemFromPoint(pt, d);
>>775 そんなややこしいことしないでGetCurSel()で選択アイテムindex取ったら
良いだけなんじゃないの?
778 :
デフォルトの名無しさん :04/08/20 09:45
なるほどーできましたありがとうございます。
>>777 複数選択リストボックスを使っているからです。
780 :
デフォルトの名無しさん :04/08/20 11:08
C++を学ぶにはどこのサイトがいいでしょうか?できれば、わかりやすく事細かく書いてあるサイトが良いのですが・・・。 それと、オブジェクト指向って要するに何なんでしょうか?よく本屋に行って、C++の本を見ると書いてあるんですが・・・。
781 :
デフォルトの名無しさん :04/08/20 11:37
VC++.netでActiveXのDataGridコントロールの追加って どこに行ったんだ??
複数選択リストボックスを使っているなら なおさら..
逆にVC++しかやったことないからオブジェクト指向でない言語がどんなものなのかわかりません
別にVC++はオブジェクト指向でしかソフトを組めないワケではないけどね。
C++でのプログラミング全てに言えるけどね。
787 :
デフォルトの名無しさん :04/08/20 17:45
オブジェクト指向?
オブジェクト嗜好に走りすぎると却って使えなくなるし
789 :
デフォルトの名無しさん :04/08/20 18:46
質問です。 SendMessageで文字列を送って、受け取る方法はありますか? 受け取った側でwParamをcharにキャストしても上手くいきません。
どーせプロセス境界でもまたいでるんだろ。 WM_COPYDATAでも使っとけ。
Qtのsignal最高だよな
>WM_COPYDATA こんなのあるんですね。ありがとうございました。がんばってみます。
793 :
デフォルトの名無しさん :04/08/21 01:30
SendMessageとPostMessageって どう違うの?
>>789 GlobalAddAtomと任意のメッセージとかもアリ
796 :
デフォルトの名無しさん :04/08/21 13:38
VC初心者です。 Win32 API で、ディレクトリ作成や、ディレクトリの存在チェックって どうするのですか?
CreateDirectory PathFileExists FindFirstFile & WIN32_FIND_DATA(FILE_ATTRIBUTE_DIRECTORY)
798 :
デフォルトの名無しさん :04/08/21 13:46
>>797 ありがとうございます。
早速、やってみます。
799 :
デフォルトの名無しさん :04/08/21 16:27
レジストリについて教えてください。 私はずっと、UNIX-C やってたので、レジストリに対する読み書きとかしたことないんだけど、 Windowsだと、よくレジストリの読み書きをすると思うのですが、 Windowsでアプリ固有の情報をレジに作成して、起動時に読み込むようにしたいのですが、 レジストリのどこに書き込むのが一般的なのでしょうか?
>>799 ユーザーごとに違う設定が必要 → HKCU
PCで固有 → HKLM
じゃないですかねぇ。
802 :
デフォルトの名無しさん :04/08/21 18:15
>>801 >そのなことくらい分かってんだよ、ぼけ
人を装った余計な発言はしないでください。
>>800 ちょっとわからないのが、
HKLMの下のSOFTWARE配下に作ろうと思ってたのですが、
その下のMicrosoft配下に作ってるようなサンプルPGを見かけたので、
一般的なルールがわからないだけに、SOFTWARE配下でもいいのか不安になった次第です。
>>802 他人のやってるの見て真似れば良いんだよ。レジストリ覗いてみたら実例がそのまま
あるんだし。
HKLM\Software\[vendor : author name]\[software name]\
>>802 OKです。
一般的には、
(HKCU | HKLM)\Software\会社名\ソフト名\〜
っていう感じにします。
805 :
デフォルトの名無しさん :04/08/21 18:28
>>803 どうもです。
Software配下は、ベンダ名になってました。
一般的ルールみたいですね。
VC++でプリプロセッサだけしたソースファイルを 出力したいんですが、どうしたらいいでしょうか?
>>806 プロジェクトの設定→C/C++→リスト出力辺り
808 :
デフォルトの名無しさん :04/08/22 02:43
コンソールアプリでデバッグライトをprintfしてからreturnして終了しているのですが これだと一瞬しか表示されないです。そこで最後にgetcharとかしています。 確か終了する前にいったん停止してくれるようVisualStudioに設定するやり方があったと思うのですが どうやったらよいのでしょう。
809 :
デフォルトの名無しさん :04/08/22 02:46
VC++6.0のタブコントロールは、それぞれのタブにコントロールを貼り付ける事は出来ないのですか? 自分で選択中のタブインデックスを取得して、コントロール表示を切り替えるしかないのでしょうか?
>>810 え?そうなんですか?
分かりました。とりあえずヘルプ見てみます。
>>810 いや、やっぱり普通にデザイン画面でそんな事出来そうにないのですが…
第一、どうやってデザイン時にタブを選択したり、デフォルトのタブ数を指定するのでしょう?
自分の頭では、実行時にタブインデックスを取得して、表示コントロールを切り替えるか
コントロールを配置したダイアログを用意して、モードレスダイアログとして表示するくらいしか考え付きません…
宜しければ、MSDNのどの項を参照すれば良いのかご教示下さい。
>>810 「出来ます」って言い切っているのなら「教示」してやればw
814 :
デフォルトの名無しさん :04/08/22 03:52
AppWizardを使ったダイアログベースのアプリで標準のボタンを配置し、 ClassWizardでダブルクリックイベントをマップしても、自動生成された関数が 実行されないのですが、何故なのでしょうか? 何方かわかったら教えてください。
>>797 なんか微尿に外してるね。
SHCreateDirectoryEx()とPathIsDirectory()の方が使えるかと。
>>815 焦って書いてたから思い付かなかったしw
>>814 もっと詳しく。
しかし、何故にダブルクリックに?
標準ボタンはダブルクリックに反応しないのではなかったか
>>812 >コントロールを配置したダイアログを用意して、モードレスダイアログとして表示するくらいしか考え付きません…
それでいいんじゃない?
プロパティページみたいに子ダイアログを作っといて、タブ切り替えで表示したり隠したり。
820 :
デフォルトの名無しさん :04/08/22 11:50
リストボックスの各項目の左側にアイコンをつけたいのですが、 これを実現するのって、リストビューというやつですか? 列は一つだけなんですが。
>>812 一度そういうTabCtrlを拡張したクラスを作っておけば、後はほぼポトペタでいけるね。
822 :
デフォルトの名無しさん :04/08/22 14:49
↓のようにIMEの入力モードを返す関数を作ってるんですが、 ifの中の書き方が正しくないのか、うまく帰ってきません。 あとIME_CMODEのフラグを組み合わせて指定する必要もあるみたいですが そういう場合の書き方はどうすればいいんでしょうか。 char* IME::GetInputMode() { unsigned long Conversion; unsigned long Sentence; ImmGetConversionStatus(m_hImc,&Conversion,&Sentence); if(Conversion=IME_CMODE_JAPANESE)return "あ"; if(Conversion=IME_CMODE_KATAKANA)return "カ"; }
>>822 Cの基礎が・・・
if文、ビットフラグ
ありがとうございます。 とりあえず=じゃなくて&にする事は分かったんですけど、 フラグが2個以上同時に成り立ってるときはどうやって書けばいいのか 分からないであります…
VC++.NET 2002で、デバッガでcharやBYTEなど1バイトの型をウォッチすると、 値が0か-128のどちらかにしか表示されないです。 (実際の値は0x00〜0xFFまでちゃんと保持されてる) バグ?それともちゃんと表示する方法があるんでしょうか?
>>824 if( hoge & (フラグA | フラグB))
{
// フラグAとBが同時に成り立った
}
>>824 if(hoge & flag1 && hoge & flag2 …)
すまん、忘れて。
訂正。 マルチバイト文字の1バイト目?の値を持ってる場合、0か-128と表示されてるような感触。 正しい数値を表示する方法無い?
833 :
デフォルトの名無しさん :04/08/22 18:04
VCで、Cのライブラリ関数malloc に相当するAPIってあるのでしょうか?
>>833 VCで、というのはWin32APIでってことか?
HeapAlloc
malloc使えばいいじゃん
コーディング作業を一切行わないでプログラムが作れるVC++ってないですか?
サンプルをビルド
840 :
デフォルトの名無しさん :04/08/22 19:51
プログラマなんて安いよ 所詮肉体労働者じゃん 時間7,8000円も出せば楽勝だよ
ココで、僕は何を言うべきですか。
842 :
デフォルトの名無しさん :04/08/22 20:41
プログラマが肉体労働だとしたら、 すべての職業が肉体労働になるかと。 大学で教鞭とってる教授も肉体労働になるだろうし、 研究職にしても、結局ほぼ同じ事を繰り返してるという意味では肉体労働。 銀行も証券会社も肉体労働。
843 :
デフォルトの名無しさん :04/08/22 20:49
VisualC++を勉強するつもりなんてまったくないんだけどさ、 VC6.0っていうかwin32でGUI部分を設計するときってどんな感じなの? VBみたいにボタン配置したり出来ないんでしょ? Javaみたいにawtみたいなものがあるのかな?
>>842 大学の教授とプログラマとではまるで違うよ…
845 :
デフォルトの名無しさん :04/08/22 20:53
846 :
デフォルトの名無しさん :04/08/22 20:54
>>844 >大学の教授とプログラマとではまるで違うよ…
知的レベルは全然違うが、どっちも肉体労働w
>>845 え!?うそ!?
それって.NETアプリだけじゃないの?
848 :
デフォルトの名無しさん :04/08/22 21:03
なんというか純粋な頭脳労働って、今の社会に存在しないだろ。 俺らがこうやってキーボードをカタカタいわせてコーディングしてることすら 未来人から見れば「何頑張っちゃってるの?こんなの(中略)で一発ジャン」 となる。 VC++スレなので、ここまででやめときます。 というか、どっかいいスレないかな?マ板?
>>847 確かにダイアログベースなら似たような感じで出来きない事もないけど。
でも、VBと比べるとデザイン時で出来ない事が多い。
要するに、自分でコードをゴリゴリ書いて開発して行くスタイルなので、VBと比べるとかなり面倒だと思いますよ。
まぁ、VB云々以前に、MFCを使うならWin32APIの知識とC++の知識が無いと手も足も出ないような気が…
>ダイアログベースなら同じですよ JARO逝ったほうがいい。
852 :
デフォルトの名無しさん :04/08/22 22:27
Windowsキー + Eを、押しつづけたら error出て固まった
>>851 VBと同じだという頭でやると、絶対挫折するわな。
854 :
デフォルトの名無しさん :04/08/22 22:30
デザイン"だけなら"同じか。
855 :
デフォルトの名無しさん :04/08/22 22:34
>>853 おまいだけ。
言語に不変の部分をきっちりマスターしていれば
VB,VC,BCBもどれも同じじゃん
856 :
デフォルトの名無しさん :04/08/22 22:35
>>855 自分が何言ってるか分かってるか?
通して良く読んでみろ
>>855 こういう香具師はどの開発環境もまともに使えてないんだろうな…
おまえらそんなコトで熱くなるより >825 >831 これにも回答くれ。
BCBとPCBは全然違うけどなw
>>862 unsigned char = BYTE
ダメ
(WORD)((BYTE)val)なんつー回りくどいことやってウォッチ登録するしかないのでしょうか?
864 :
デフォルトの名無しさん :04/08/23 00:03
俺はVBってモンを全く触った事が無いんだがコントロールの配置とか 制御がダイアログエディタ+クラスウィザード+MFCより楽なん?
コントロールの配置:同じ 制御:VBの方が楽
>>863 unsigned char(BYTE)で-128なんて表示される様なVC++.NET 2002なんて
窓から捨ててしまえ!
>>865 VBの方が視覚的に色々と設定出来る分、コーディング量が少なくてすむ。
VBのライブラリ?は、完全にAPIを隠蔽している感じなので、VC++(MFC)みたいにAPIの知識が乏しくても十分使える。
と、書くと なんか良い事尽くめに聞こえるけど
結局、システムの奥深い所をプログラミングするとなると
VBでもAPIを駆使する事になるので、凝った物を作るのならVC++を使った方が楽だと思う。
char a[10]; strcpy(a,"まんこ"); で配列aの内容を見る場合のようなことを言ってるの? それならウォッチタブで名前の所に a,c と入れる MSDNの「ウォッチ変数の文字書式指定」を見て下さいです。
今、ふと思ったんだけど、VBでリスト構造みたいな物を作る時ってどうやるの? もしかして、それは無理??
リスト構造みたいな物 ->リスト構造のような物
>>870 VBは良く知らんが昔のBasicは変数のアドレスを求める関数と
アドレス先の値を得る関数があった。
似たようなのがVBにも用意されてるんじゃない?
>>872 なるほど、そういう関数があるんでしょうね。>VB
というか、完全にスレ違いスマソ…
>>868 要するにこういう事だろ。
VBの場合は直にVBから入っていけるが
VCの場合は C→C++→Win32API→MFC
という段階が必要な訳で明らかにVBよりは敷居が高いわな。
どうでもいいよそんな役に立たない話。
そこでBCBですよ! と言おうと思ったけどマネージドでやるなら もう十分なほどのRAD環境だよ
>>877 でも、ネイティブが吐けるM$製BCB系ツールが欲しいのが本音。
>>878 胴衣。MSが全身全霊を傾けて、詐欺や脅迫までして.netを宣伝したのに、結局ユーザーはついてこなかった。WinFXもどうなる事やら。
それは漏れがついていくから大丈夫
.netは後から入れる必要があったが、WinFXはLonghornに付いてくるのでついていくかどうかは問題にならない。 Windows95を買えばWin32になったのと同じ。
Longhornはいつでまつか?
質問です VC++.netでスタティックライブラリを作っているんですが、 STLを使おうとするとエラーが出ます。具体的には、 #include <lisit> using namespace std; list<int> test; とすると error C2871: 'std' : この名前を持つ名前空間は存在しません。 error C2501: 'list' : 識別名を宣言するのに、型が指定されていません。 と出ます。なにかSTLを使うために特別な記述が必要なのでしょうか?
C→C++→MFC→Win32API orz
>>885 俺はこうだ
C→C++→MFC→Win32API→MFC
暇があったらソース読んでみれば?
887 :
デフォルトの名無しさん :04/08/23 14:14
ブレークポイントでブレークさせ、ステップ実行しているとVisualStudio毎応答なし になることありませんか?このときタスクマネージャすら反応しないというような。 とくにメモリダンプ窓を表示させてたりaxレジスタとかをウオッチ表示させてたりすると。 VisualC++6.0 SP6@WinXP SP2
VC7でもステップ実行してるとたまに固まるけどな
891 :
デフォルトの名無しさん :04/08/23 15:41
実行時に、あるファイルのコピー・削除・移動をするには どのようにすれば良いのですか?
892 :
デフォルトの名無しさん :04/08/23 16:08
>>891 remove()とかrename()とか
>>891 ごみ箱行きならSHFileOperation
ゴミ箱行きもありがたく使わせてもらいました!
俺は近々ごみ箱行き... orz
ブレークポイント貼っても止まらないで進んでしまうんですが、 なにかあるんでしょうか? ちがうプロジェクト(DLL作成)では止まるのですが。 VisualC++4.0 WinXP SP1 MFCAppWizardダイヤログです
単純にブレークまで行ってない ・・・んなわけないか
>>887 スレッドとかタイマーとか頻繁に動かしてたりしない?
まあでもXPはなんだか止まりやすいな。2000にしと毛。
900 :
デフォルトの名無しさん :04/08/23 21:35
>>899 うん。スレッド内部でブレークしてる。しかもそのスレッドからまたスレッドを作ったり。
901 :
デフォルトの名無しさん :04/08/23 21:40
>>897 ソースコードとバイナリイメージがずれることがある。
この場合、ブレーク張った箇所は実際には存在してなかったりしてスルーしてるように見えることも。
リビルドしてみた?
>>901 リビルドもしてみたんですけど・・・
最初からプロジェクト作り直したほうがよさそうですかね
903 :
デフォルトの名無しさん :04/08/23 22:36
当方、ただ今Susieプラグインを使ってソフトを作っております。 MFC上で作っているのですが、デバイスコンテキストを絡めて使うとどうしてもうまくいきません。 BitbltもAPI(つまりハンドルを指定して表示させる)の方を使うとうまく行くのですが、CDC::Bitbltを使うとだめです。現在のソースは… spi_getpicture(tmp,0,0,&pHBbkInfo,&h_bkbm,NULL,0); pBmpInfo = (BITMAPINFO *)LocalLock(pHBbkInfo); hBm = (LPBYTE)LocalLock(h_bkbm); CDC* dc = GetDC(); CDC MemDC; CBitmap MemBitmap; CBitmap* poldBmp; HBITMAP myDIB; MemDC.CreateCompatibleDC(dc); myDIB = ::CreateDIBitmap(MemDC.GetSafeHdc(), &pBmpInfo->bmiHeader,CBM_INIT, hBm,pBmpInfo,DIB_RGB_COLORS); MemBitmap.FromHandle(myDIB); poldBmp = MemDC.SelectObject(&MemBitmap); dc->BitBlt(0,0,pBmpInfo->bmiHeader.biWidth, pBmpInfo->bmiHeader.biHeight,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(poldBmp); こんな感じです。これでなぜうまくいかないのかがさっぱり…どなたかご指導を…
904 :
デフォルトの名無しさん :04/08/23 23:05
>>902 作ってるのはDLLとそれを使うMFCベースダイアログアプリ?
905 :
デフォルトの名無しさん :04/08/23 23:08
VBスレで、そんなのVBで作るのは、やめとけ といわれたので、ちょっとVC++スレに着てみました。 ちょっと質問なんですが 例えばチャットソフトを作ったとして、Pluginみたいな感じで お絵かき機能とか追加してみたいんだけど、やっぱ、そういうのって無謀でしょうか? よくPluginっていうと、DLLとかで、対応ファイルが増える とか、そういう感じだと思うんだけど、機能まるごとの追加ができたらいいな、と。
すいません、自己解決しました。 お騒がせしましたm(__)m
907 :
903,906 :04/08/23 23:37
すいません、やはりどうしても気になるので質問させて下さい。 先ほど自己解決したとカキコしましたが、先に示したソースの問題点は MemBitmap.FromHandle(myDIB); でした。これを MemBitmap.Attach(myDIB); とすることで解決しました。 しかしなぜFromHandleでは駄目なのかが今ひとつわかりません。 MSDNを見る限りむしろFromHandleを使う方が妥当とさえ思えます。両者の違いはどのへんにあるのでしょうか?
>>905 できないことは無いけど、最初に想定した範囲のことしか
DLLにやらせられないと思う。
たとえばDLLでお絵かき機能を付けるとすると、マウスでの入力(標準的なのだとMessageか)や
絵の表示先(オーナーウィンドウのハンドル)などをDLL側に通知、またはDLL側でそれらを
取得できないといけないでしょ。
絵だけじゃなく本当にいろんなことをプラグインでできるようにするには、
DLLとのインターフェースを相当考えないといけないでしょう。
909 :
デフォルトの名無しさん :04/08/23 23:51
VC6のウィンドウの並びで、 ○□□□ ○□□□ △△△△ を ○□□□ ○□□□ ○△△△ にしたいのですが、できるならやり方を教えてください。 マークは、○がワークスペース、□がコード書き場、△がエラー表示域です。
>>907 FromHandleはstaticなメンバ関数なので
MemBitmap.FromHandle(myDIB);
はMemBitmapに対する操作ではない。
FromHandleは新しい一時オブジェクトを作り、ハンドルを結び付けて返す。
一時オブジェクトに結び付けられたハンドルは自動的に解放されないので
自分で後始末する必要がある。
>>907 あと、今度解決方法を書かずに去ろうとしたら後ろの穴を犯す。
912 :
デフォルトの名無しさん :04/08/24 00:21
>>908 なるほど、やっぱり厳しいんですね〜
どもども、ありがとうございました
>>909 それが可能かどうかは知らんが
みんなワークスペースウィンドウとかドッキングさせていつも使ってんの?
自分は、ワークスペースは非ドッキングで、右下の方に置いてる。
で、普段は常に非表示で必要な時だけ表示させて使ってるんだが。
個人的にコードが画面いっぱいに表示されてないと気に食わないんだよねぇ。
Alt + Shift + Enter でいいじゃん
>>913 ありがとうございます。
そういう事ができるのは知りませんでした。やってみます。
今までは、VCをフルスクリーンにしないで左側を縮めて、
空いた位置に、フォルダウィンドウの細くしたのを置いて代用していました。
>個人的にコードが画面いっぱいに表示されてないと気に食わないんだよねぇ。
自分もそうでしたが、あると、ダブルクリック一つでファイルを開けて便利で。
自分は最近はこんな感じに落ち着いている ディスプレーがせまいからこれが現在ではベスト △△△△ □□□○ □□□○ □□□○
orつ
(:D)~~~~~~|)__
922 :
デフォルトの名無しさん :04/08/24 20:30
お邪魔します。 WAVEファイルを使って音を鳴らしたいのですが、 c:\sdk\include\dsound.h(305) : error C2146: 構文エラー : ';' が、識別子 'dwReserved1' の前に必要です。 c:\sdk\include\dsound.h(305) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。 c:\sdk\include\dsound.h(305) : error C2501: 'dwReserved1' : 識別名を宣言するのに、型が指定されていません。 c:\sdk\include\dsound.h(306) : error C2146: 構文エラー : ';' が、識別子 'dwReserved2' の前に必要です。 c:\sdk\include\dsound.h(306) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。 c:\sdk\include\dsound.h(306) : error C2501: 'dwReserved2' : 識別名を宣言するのに、型が指定されていません。 というエラーが出てしまってコンパイルできません。 dsound.h に問題があるようなんですけど、どうすればいいのか全然分かりません・・・ どなたか解決法を教えていただけませんでしょうか? どうかよろしくお願いします。
DWORD_PTRって型が何処にも宣言されてないんじゃない?
924 :
デフォルトの名無しさん :04/08/24 20:43
どのように宣言すればよいのでしょうか? すいません、初心者なので全然分からないんです・・・(汗
typedef DWORD* DWORD_PTR;
>>922 DSOUND.Hの前にMMREG.Hをincludeする必要があるが、読ませてる?
930 :
デフォルトの名無しさん :04/08/24 20:56
返信ありがとうございます。 エラーが出た dsound.h 内に入れたのですが、なぜか反映されずに同じエラーが出てしまいます。 どの位置で宣言するのが正しいのでしょうか? お手数かけて申し訳ないです(汗
931 :
デフォルトの名無しさん :04/08/24 20:58
932 :
デフォルトの名無しさん :04/08/24 21:01
サーバーが混雑していて今見れないようです(汗
もう少ししてから見てみますね。
>>926 ちょっと調べます。
>>928
ちょっと重いだけだろ すぐ見れる
934 :
デフォルトの名無しさん :04/08/24 21:05
VBで作成したTest.dllというActiveXDllの、strResult=TestM(strA,strB)という関数 をVCから呼出すプログラムを作ったのですが、うまくいきません。 まだ勉強をはじめたばかりで全然ダメだと思いますが、どこが悪いのかご教授願えな いでしょうか? どうかお願い致します。 #include <stdio.h> #import "test.dll" // タイプライブラリ using namespace TestM; int main(void) { _TestM_Cls *pClass1; if(SUCCEEDED(::CoInitialize(NULL))) { { _Class1Ptr pClass1(__uuidof(TestM_Cls));
935 :
デフォルトの名無しさん :04/08/24 21:08
あああ! 正しくこれです(汗 書いてある通りにやってみます。 皆さんありがとうございました(多謝
↸
⋮
938 :
デフォルトの名無しさん :04/08/24 21:20
すみません。VC++2003の、パスの設定がうまくいきません。 ここで質問してもいいですか?
ツール→オプション→プロジェクト→VC++ ディレクトリ
ありがとうございました
941 :
デフォルトの名無しさん :04/08/24 22:02
すいません、先ほどお世話になった者なのですが、 「DirectX9.0cをVisualC++6.0使用してコンパイルする場合、PlatformSDKが必須」 という事なのでPlatformSDKを検索したのですが・・・ いまいちPlatformSDKとは何か、が分かりません(汗 SDKの集合体の事を指しているのでしょうか・・・? どなたか詳しい方いらっしゃったら教えてください。お願いします。
943 :
デフォルトの名無しさん :04/08/24 22:21
検索はGoogleで一通りしたのですが、分からなかったので・・・(汗 PlatformSDKの内のどれかが必要、ということなのでしょうか・・・ もうちょっと調べてみます・・・
PlatformSDKはWindowsのAPIのライブラリ集です。時々アップデート
されているので、Visual C++には収録されてないAPIもあります。
ヘッダとかdllとかたくさん付いてます。
DirectXとかMedia Playerみたいなものは独立したSDKとして公開されてます。
つまり、「DirectX9.0cをVisualC++6.0使用してコンパイルする場合、PlatformSDKが必須」
ということは、PlatformSDKに含まれているライブラリを使うからDirectXのSDKの他に
Platform SDKもインストールせよ、ということでしょう。
Platform SDKそのものは
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ から入手できます。Core SDKというのが基本的なものなので
まずはこれをインストールしましょう。
尚、インストールはIE以外のブラウザから行なうのは大変なので
IEを使って下さい。
以上の説明で間違っていたら責任は950が取ります。
つーかWAV再生したいだけならDX使わなくてもMCIデバイス関係のAPIを 使えば楽なんじゃないかね?
ネットインストールよりFull Downloadしてからの方がいいと思うよ。
948 :
デフォルトの名無しさん :04/08/24 23:16
試しに、winプログラムをコンパイルしてみたんですが、includeファイルが 開けないんです
949 :
デフォルトの名無しさん :04/08/24 23:21
ちなみに「システム変数」は、今こんな感じなんです。 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32 \Wbem;C:\Program Files\pcdNavi\bin;C:\Program Files\Fujitsu \sa\dll;;C:\Program Files\Sonic\MyDVD;;C:\Program Files\WideStudio \ws\bin;C:\Program Files\WideStudio\ruby\bin;C:\Program Files\WideStudio \Perl\bin;;C:\Program Files\WideStudio\Python;C:\Program Files\WideStudio\gcc\bin; c:\Borland\Bcc55\bin;c:\Borland\Bcc55\bin;c:\Borland\Bcc55\bin;D:\Program Files\Microsoft SDK \Bin\.;D:\Program Files\Microsoft SDK\Bin\WinNT\.SET PATH=D:\Program Files\Microsoft Visual C++ Toolkit 2003 \bin;D:\Program Files\Microsoft SDK\Bin;D:\Program Files\Microsoft SDK\Bin\Win64;%PATH%
950 :
デフォルトの名無しさん :04/08/24 23:26
設定をやりだして、まだ、完全にできないでいます
>>949 やたらと処理系を入れる前に「環境変数の設定方法」から再勉強しましょう。