[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 16:03 / Filesize : 231 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 12



1 名前:デフォルトの名無しさん [2009/07/19(日) 22:32:32 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/

166 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 19:54:48 ]
Yahoo!辞書 - flame
ttp://dic.yahoo.co.jp/dsearch?enc=UTF-8&p=Flame&dtype=1&dname=1na&stype=0&pagenum=1&index=02737600


167 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:03:24 ]
殻っていみのフレームのつもりがフレイムになってたなんて・・・
もしかしてこの質問ってスレチってやつでしょうか?

168 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:26:56 ]
ゲームプログラムなら俺に聞け ってスレがあるよ

169 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:28:48 ]
ゲ製の方を紹介してやれよ

170 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 20:46:04 ]
ここより雰囲気のいいスレッドが見つけられないオ↓レ↑は、
専ブラで2chを覗く程度の初心者です。

171 名前:163 mailto:sage [2009/07/28(火) 21:31:24 ]
とりあえず
ttp://pc11.2ch.net/test/read.cgi/gamedev/1238429676/
こっち行ってみます。ふんいきこわいけど・・・

スレチすマソでしたー。



172 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:21:22 ]
classの全部のメソッドで通常の例外チェック再スローと
STLなどの外部ライブラリが出すかもしれない把握できない例外用のcatch(...){throw UnknownException();}
をやってるんですが、やりすぎでしょうか?
例外ってドキュメントが少なくてどうやればいいのかなかなか方針が定まりません

173 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:51:33 ]
>>172
どう考えるかによるんじゃね?
例えばSTLの投げる例外ならそのままthrow;で外に再送してあげた方が
むしろ親切では?


174 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:33:01 ]
カプセル化の事を考えて例外も隠蔽して
指定したもの以外出さないほうがいいかなぁと思ったんですが・・・



175 名前:173 mailto:sage [2009/07/29(水) 07:23:08 ]
>>174
例外クラスは知ってるよね?
例えば
C++編(標準ライブラリ) 第27章 例外クラス
ttp://www.geocities.jp/ky_webid/cpp/library/027.html
std::exceptionクラスを継承したものについては
そのまま投げてあげた方が。。
まあ再送しなくても内部で処理できる問題だったらいいけど、
そうでなくて全部例外を飲み込んでUnknownException();にしちゃうのは
どうだろう?

だれか他の方も意見くださいな。

176 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 19:50:12 ]
shared_ptr<> でnew deleteがほんとに1対1になってるか確かめたいんですけど
グローバル変数を用意してコンストラクタで++、デストラクタで--とすればいいのかなと思うんですが
これだと組み込み型のカウントをするのに困ります。どうすれば良いでしょうか?

177 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 21:00:36 ]
>>176
グローバルなoperator newとoperator deleteを定義すればいいと思う。

178 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 21:08:40 ]
>>176何故?何のため?


179 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:07:31 ]
コードを重複して書くのがいやなのでtemplateで書いた
けど公開するのは、例えば<int>と<double>だけに限定したい
こんなときはどうすればいい?

class Hoge {
private:
template <typename T> class Fuga {};

public:
typedef Fuga<int> _IntFuga;
typedef Fuga<double> _DoubleFuga;
};

typedef Hoge::_IntFuga IntFuga;
typedef Hoge::_DoubleFuga DoubleFuga;

これよりいい方法あったら頼む!

180 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:13:07 ]
明示的な実体化をした実装を別ファイルに移して、
クライアントコードから見えなくする

181 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:54:19 ]
>>180
いまいちわからないんだけど、

hoge.h
template < typename Type > class Hoge ;
template <> class Hoge< int > ;
template <> class Hoge< double > ;

hoge.cpp
#include "hoge.h"
template <> class Hoge< int > {} ;
template <> class Hoge< double > {} ;

main.cpp
#include "hoge.h"
int main( void ) { Hoge< int > ihoge ; Hoge< double > dhoge ; /* 〜 */ ; return 0 ; }

みたいな感じ・・・?
これだと結局重複したコードを書いてるから意味無いような
やりかたが間違ってるのかな?

182 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:58:33 ]
ていうか↑コンパイルできないですね
もうちょっと勉強してきます

183 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 23:01:13 ]
template関連はごちゃごちゃしてるので記憶が曖昧だが許してくれ。

hoge.h
template < typename Type > class Hoge;

hoge.cpp
template < typename Type > class Hoge { } ;
template class Hoge < int > ;
template class Hoge < double > ;

main.cpp
(同じにつき略)

184 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:13:34 ]
class hoge{
private:
class hoge_sub{
};
std::vector<hoge_sub> a(20);
public:
};

class内で固定長のclass型の配列を作りたいのですが
VC++で
error C2059: 構文エラー : '定数'
というエラーを吐かれてしまいます
このような場合どうすれば良いのでしょうか



185 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:22:50 ]
>>184
コンストラクタ初期化子
class hoge{
private:
class hoge_sub{
};
std::vector<hoge_sub> a;
public:
hoge() : a(20) {}
};

186 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:23:01 ]
vectorはそもそも配列じゃないですし
可変長なので固定長にもなりません。^^
vectorではなく、配列を使ってください。
hoge_sub a[20]; のようにするのです。

187 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 02:52:31 ]
>>185,186
ありがとうございます
class型の配列を扱いたいなと思った時に調べましたところ
vectorを使う方法が紹介されてましたので、誤って認識していました


188 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:17:30 ]
>>187
せめて入門書一冊分くらいは基礎を学んでおいた方がいいとおもうぞ。

189 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:45:01 ]
>>188
入門書として適切なものを教えてください。
いや、手元には独習がありますが、ぜんぜん足りないような気がしているのです。

190 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 00:53:20 ]
ハーバートシルト先生に教えてもらっておいてまだ足りないとな?

191 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 08:06:09 ]
独習C++なんて捨ててaccelerated C++とexceptional C++を読むんだ

192 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:16:59 ]
独習C++半分ぐらい読んで、EffectiveC++、More〜を全部読んで、独習デザインパターンも半分ぐらい読んで、ゲーム作る程度にはそれで十分だった

193 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 10:36:12 ]
あまりの糞さに独習(ryは半分で飽きたということですね…わかります

194 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 11:42:47 ]
マナたん(藁)→ロベールの次に読めるまともな本を教えて下さい



195 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:27:53 ]
#include <iostream>

class hoge {
private:
int x;

private:
class in_hoge {
public:
in_hoge() {std::cout << x << std::endl;}
};

in_hoge ihoge;

public:
hoge() : x(100), ihoge() {}
};

int main(void) {
hoge h; // output: 100

return 0;
}

コンパイルできないんだけど、どうやれば実装できるかな?

196 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:36:36 ]
>>195
in_hogeのコンストラクタにxを渡せばいいんじゃね?

197 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:51:33 ]
in_hogeの配列を確保する予定なので、コンストラクタに引数を渡せないのです・・・

198 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:57:14 ]
配列使うかわりにvector使えばいいんじゃね?

199 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:48:17 ]
stringのreserve()ってメモリをここでいっぺんに確保して後の操作で動的確保をなるべくしないようにってことでいいの?
resize()との違いがようわからん

200 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:48:44 ]
d.hatena.ne.jp/Isoparametric/20080117/1200575103

忍法ししちょびれ。

201 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 21:50:28 ]
>>199
Yes, 高洲クリニック。
reserveは指定したサイズになるように「空き容量」を増やす。
resizeは指定したサイズになるように要素の数を増やすか減らす。
増えた要素は例えば0で埋められるし、減らされた要素は削除される。

202 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:41:23 ]
VS C++ 2008 EE で コマンドラインから cl をつかってコンパイルする方法はないものですか?
パスをとおし、バッチファイルvcvers32.bat を実行しただけはうまくいかないようです。

203 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:45:50 ]
>>202
それだけでできると思うけど、スタートメニューの中に
Visual Studio 2008 コマンドプロンプトとかいうのがあるはず。そっちが確実。

204 名前:202 mailto:sage [2009/08/02(日) 18:49:23 ]
自己解決です。
msdn.microsoft.com/ja-jp/library/ms235639.aspx
に詳細がありました。でも専用のcmd を使わないとダメなようです。cygwin プロンプトから実行というわけにはいかないようです。




205 名前:202 mailto:sage [2009/08/02(日) 18:50:11 ]
>> 203
ありがとうございます。

206 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:01:09 ]
Javaスレ、 C++スレ迷いましたが、上のほうの板は荒れ気味なのでここで質問させてください。宜しくお願いします。
g++ (GCC) 4.2.4 です
java からC++ で作ったプログラムを使いたいのですが、どのような手順で作成すれば良いのでしょうか、
参考になるHP とかがあれば教えてもらえませんか。

207 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:01:53 ]
>>204
Cygwin上で使いたいのなら、自分で環境変数INCLUDEとLIBとPATHを設定すればいい。
C++/CLIを使うならLIBPATHも。
内容はVisual Studioコマンドプロンプトの丸写しでいい。

あるいは、Visual Studioコマンドプロンプト上でCygwin.batを呼んで起動するという手もある。

208 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:02:37 ]
>>206
まずはJNIでググるんだ。
よく分からなかったら、どこがどう分からないかを書き添えてもう1度聞きに来るといい。

209 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:16:43 ]
>>208 さん、早速の回答ありがとうございます
やはりやり方といいますかjava で呼び出すことができるんですね、よく分かりました
Windows でもLinux でもdll を作成してJava Native Interface 機能を用いて呼び出すことができるんですね、どうもありがとうございました。

210 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:29:35 ]
質問です。
C++でソケット使ったメール送信プログラム組んでます。

ループ内でコネクト・ライト・シャットダウン、クローズを
繰り返して複数メールの送信をしているのですが、
データ量が有る場合に送信されずにクローズしてしまいます。
送信バッファの指定・リンガ設定もしたのですが、変わりませんでした。
ソケット内での解決法やロジックでの解決法があれば
教えて下さい。。

211 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 23:32:05 ]
ソースを晒さないとなんとも

212 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 00:54:59 ]
>>210
パケットダンプ追えば、何がおきてるかわかるんじゃね?

213 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 01:47:48 ]
関数の終了コード(errnoとか)は見てる?

214 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:07:40 ]
msdnのドキュメントなんだが、関数別に投げる可能性のある例外とか書いてあるページって無いものかな?
知りたかったらいちいちソース読まないといけないんだろうか・・・



215 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:18:48 ]
ないよー

ちなみに何の関数について知りたい?

216 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 16:36:11 ]
>>215
今回知りたいのはtr1のmt19937とuniform_intですけど、ほかのも結構頻繁に気になります

217 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:19:23 ]
最近の SDK には boost が含まれてるのか?

218 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:18:14 ]
0xだろ

219 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:48:05 ]
>>217
0xの先取りTR1
randomのほかshared_ptr, regex, unordered_map/setなんかのライブラリが入っている。

VC++では2008に拡張パックまたはSP1で導入できる。
msdn.microsoft.com/ja-jp/library/bb982198.aspx

220 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:52:33 ]
VC++のSTLのソースってすごい見づらい

221 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 17:33:29 ]
関数オブジェクトとかよくいうけど関数ポインタでいいじゃんっておもう
なにがすごいのこれ?

222 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 17:44:50 ]
インライン展開できる

223 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:34:41 ]
インスタンスが持てる

224 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:34:17 ]
operator =ってコピコンみたいに継承元のコピー勝手に呼んでくれる、みたいな思いやりの精神は無いの?



225 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:47:11 ]
コピコンにそんな機能あったのか

226 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:51:21 ]
ないはず
勝手に呼ばれるのは継承元のデフォコンでは?

227 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:12:57 ]
おまえら普通にコピコンとかデフォコンとかやめてください

228 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:13:45 ]
Base::operator=を最初に呼ばないといかんのかめんどくさいな

229 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:15:28 ]
じゃあシスコンで

230 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:18:21 ]
デスコンとか超強そう

231 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:22:29 ]
デスコン使うとか必死ですねwww

232 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 13:07:10 ]
例外って難しいです・・・

233 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:30:13 ]
さじを投げてるだけじゃん。
誰かが拾って続きやるかもしれないけど、そいつもさじ投げるかもね。

234 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:01:09 ]
Enterを押したら処理が進むようにするにはどのようにすれば良いのでしょうか?
char dammy;
cin >> dammy;
cout >> "Hit";

のようにしてもEnterだけだと入力を受け付けられず、
なにか文字をいれてEnterをおさないと進みません。
よろしくおねがいします。



235 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 22:47:39 ]
int dummy;
dummy = cin.get();
cout << "Hit";

236 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 23:00:53 ]
>>235
ありがとうございます。
ぶじかいけつできました。!!

237 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:24:15 ]
20個ものclassのインスタンスがあるのですが、
rand()%20 +1でせいせいした1~20までの数に合わせて
それぞれのインスタンスにメソッドを適用したいです。
classのインスタンスを引数にわたしてメソッドを実行する関数を書いたので
classの配列をつかってその関数にclassを渡したいです。Web検索で
vectorを使うとかの説明は1つだけ出てきたのですが詳しくわからないのでよろしくおねがいします。

具体的にいうと
class Hoge
{
public:
Hoge() {}
void fuga() {}
};

void foo(Hoge h)
{
h.fuga();
}
int main(void)
{
Hoge a;
Hoge b;
Hoge c;
hit = rand()%3 + 1;
class_array = なんらかのほうほうでa,b,cの配列
foo(class_array[hit]);
return 0;
}
と言う風にかけないかと思っています。
よろしくおねがいします。

238 名前:デフォルトの名無しさん [2009/08/06(木) 01:29:08 ]
Hoge a;
Hoge b;
Hoge c;
hit = rand()%3 + 1;

じゃなくて

Hoge class_array[3];
hit = rand()%3;

じゃだめ?

まあfooは参照かアドレスで渡すべきというのは置いておいて。


239 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:31:37 ]
>>238
すみません、大事な部分を忘れていました。
a,b,cのコンストラクタにはいくつかそれぞれ別の引数を渡したいのですが、
それもふまえた上でよろしくおねがいします。(上のコードのclass Hogeのコンストラクタは引数をとる物に変更してください)

240 名前:デフォルトの名無しさん [2009/08/06(木) 01:36:19 ]
こら。

Hoge *class_array[3];
にして、それぞれ new すれば良いでしょ。

>それもふまえた上でよろしくおねがいします。
>(上のコードのclass Hogeのコンストラクタは引数をとる物に変更してください)

どんだけ上目線なの。



241 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:38:35 ]
>>240
なるほど、なんとなくわかってきました。
ありがとう御座います。
>どんだけ上目線なの。
すいませんでした、いま自分の望んでいる動作を日本語にするのが難しくて
変な日本語になっていました。すいません。

242 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:40:17 ]
実際はインスタンスが100個以上あるので、できればもう書いて生成してしまったインスタンスを
けしてそれぞれnewし直す事なく修正したかったのですが、無理なようですね。
とりあえずがんばろうと思います。

243 名前:デフォルトの名無しさん [2009/08/06(木) 01:43:27 ]
ポインタ知ってる?

244 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:49:11 ]
どうやったらコンテナじゃないインスタンス100個とか糞みたいなコード書けるんだ



245 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:57:56 ]
>>244
すいません、まだC++についてよくわかっていないのです..
おなじ種族に属する物で名前やジャンルが違うものを
100個の内50個はデフォルトでひつようで残りの50個は条件の違いによって
生成時に与えられるパラメータが違うという妙な仕様になっていて
しかも100個どれが使用されるかはわからないという変なプログラムなんですよ。
まあ簡単にいうと動物園みたいなものです。

246 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:03:37 ]
配列にするのが嫌ならswitchでも使えばいいでしょ。
Hoge& selectHitTarget(Hoge& a, Hoge& b, Hoge& c)
{
switch(rand() % 3)
{
case 0: return a;
case 1: return b;
case 2: return c;
}
}
int main(void)
{
Hoge a;
Hoge b;
Hoge c;
Hoge& hit = selectHitTarget(a, b, c);
foo(hit);
return 0;
}

247 名前:デフォルトの名無しさん [2009/08/06(木) 02:08:50 ]
246は何の解決にもなってないので却下として、

生成時に与えられるパラメータでインスタンスの生成方法が変わるものを
100個分書いた時点でなんかもう…。ま、書き直しを勧めます。
普通はパラメータは外部配列にしておくか、アルゴリズムで与えて、
オブジェクトが100個だろうが100000個だろうがループで回して配列に
入れながら new するでしょうね。
#スケーラビリティと言います。

この後はアドレス渡しではまって、継承ではまって仮想関数ではまって…
となるのね。出題者は「わん」とか「にゃー」とか呼び分けたいだけなのに、
その手前で悩んでるパターンですかね。。。



248 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:25:46 ]
static変数にパラメーターリストを入れて
デフォルトコンストラクタでそれを参照しながら初期化するとか
でもなんか気持ち悪いな・・・

249 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:30:53 ]
オレだったらコンストラクタをテンプレート関数にして個々のメソッドの中にconstメンバを基にSTATIC_ASSERT吐く様にする

250 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:32:32 ]
モンスターのパラメータ
ランダムエンカウント時のモンスター決定
かと思った

251 名前:デフォルトの名無しさん [2009/08/06(木) 11:49:18 ]
ttp://racanhack.sourceforge.jp/rhdoc/codepre.html

このページのコードを実行したいのですがGlibはどうやって導入すればいいんでしょうか
WindowsXPでVisual Studio 2008 Expressを使ってます

252 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 13:37:37 ]
>>251
GTK+の本家サイトでWin32版がダウンロードできるみたいだよ
www.gtk.org/download.html

253 名前:253 mailto:sage [2009/08/06(木) 21:02:01 ]
CもしくはC++でウェブ上の画像をURLを指定してhttpでダウンロードしたいのですが
できなくて困っています。

環境は下の通りです。
OS:windows XP
開発環境:Visual C++ 2008 ExpressEdition(win32プロジェクト)

htmlファイルならwininetを使ってダウンロードできたのですが、
画像だとできません。htmlファイルと同様に画像もできないのでしょうか?
また、wininet以外でいい方法があるなら教えてください。

サンプルプログラムは次に書きます。


254 名前:253 mailto:sage [2009/08/06(木) 21:06:00 ]
HINTERNET hInet, hUrl;
char szBuf[128], *lpszSrc;
DWORD dwRead;
int nTotal = 0;
HGLOBAL hMem;
//目的のURLの入力
char szUrl[] = "hogehogehgoe.co.jp/hoge.jpg";
hInet = InternetOpen("hoge",INTERNET_OPEN_TYPE_PRECONFIG,NULL, NULL, 0);
if (hInet == NULL) return -1;
hUrl = InternetOpenUrl(hInet, szUrl, NULL, 0, 0, 0);
if (hUrl == NULL) return -1;
//lpszSrcに1バイトのみ確保
hMem = GlobalAlloc(GHND, 1);
lpszSrc = (char *)GlobalLock(hMem);
while (1) {
InternetReadFile(hUrl, szBuf, (DWORD)sizeof(szBuf) - 1, &dwRead);
szBuf[dwRead] = '\0';
//読み出す物がなくなったのでループ脱出
if (dwRead == 0)break;
//必要バイト数の計算
nTotal += dwRead;
//確保領域の大きさ変更
hMem = GlobalReAlloc(hMem, nTotal, GMEM_MOVEABLE);
if (hMem == NULL) break;
lpszSrc = (char *)GlobalLock(hMem);
if (lpszSrc == NULL) break;
strcat_s(lpszSrc, nTotal+1, szBuf);
}

続く



255 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:07:14 ]
strcat?
画像の途中に 0x00 があったら、そこで切れない?

256 名前:253 mailto:sage [2009/08/06(木) 21:07:18 ]
//ファイル出力処理
std::ofstream fileout;
fileout.open("D:/hoge.jpg"); // 出力ファイルをオープン
if (!fileout){
MessageBox(NULL , TEXT("エラー!出力ファイルをオープンできません") ,TEXT("") , MB_OK);
return -1;
}
fileout << lpszSrc <<'\n';
fileout.close();

//メモリの解放
GlobalUnlock(hMem);
GlobalFree(hMem);
//インターネットハンドルの解放
InternetCloseHandle(hUrl);
InternetCloseHandle(hInet);

以上です。
すいませんがアドバイスください、お願いします


257 名前:253 mailto:sage [2009/08/06(木) 21:21:11 ]
>>255
そうなんですか?
じゃあ画像ファイルの場合どうしたらいいのでしょうか?

258 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:30:44 ]
どこまで格納したか覚えておいて、memcpyで

memcpy(&lpszSrc[現在の位置], szBuf, dwRead);
現在の位置 += dwRead;

みたいな感じで

259 名前:253 mailto:sage [2009/08/06(木) 21:51:36 ]
>.258さん、ありがとうございます。

>>254のサンプルプログラムのwhileループの前で
int nowI = 0;
と宣言して
whileループの最後のstrcat_sをコメントアウトして下の二行を追加しました。
memcpy(&lpszSrc[nowI], szBuf, dwRead);
nowI += dwRead;

でもできませんでした。なにか間違ってますでしょうか?
ファイルは作成されてるんですけどデータがほとんど入っていないようで
画像ファイルとして開けません。


うう・・・
別にwininetにこだっているわけではありません。
C/C++(VC+ EE)でweb上の画像をダウンロードする方法が他にあるのなら
wininetじゃなくてもいいです。

260 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:20:19 ]
おまえは、まず、バイナリデータをファイルに書き込んで、それを読み込むことが出来るのか?
話はそれからだ。

261 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:37:57 ]
fprintfで書いてるんじゃなかろうな

262 名前:253 mailto:sage [2009/08/06(木) 22:51:10 ]
>>おまえは、まず、バイナリデータをファイルに書き込んで、それを読み込むことが出来るのか?
うぅ、できません・・・
どうやら全然基礎が足りないみたいです。
もう一度勉強しなおします。
スレ汚してすいませんでした。

263 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:21:20 ]
今時ポインタがあるプログラミング言語なんてゴミ
らしいのですが
いまどき一番需要のあるプログラミング言語は何でしょうか?

264 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:30:01 ]
>>263
スレタイ読め

・・・っとただの釣りだったか。



265 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 02:05:25 ]
char (*a)[10];
a = malloc(10 * n * sizeof(char*));

とすれば、n行10列のメモリ領域を確保できると思います。
しかし、実際にこの領域に格納したいデータは、
hoge0、hoge1、…、hoge100、… のように、添え字がついており、長さがどんどん長くなります。
極端な話、char (*a)[100]; のように、十分に大きい値に設定しておけば問題ないのですが、
何かメモリ領域をうまくとる方法はありませんか。

266 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:06:38 ]
char (*a)[10];
a = malloc(n*sizeof(char [10]));

sizeof(char *)で何をしようと思ったのか理解できないのだが
もう少し詳しく書いてくれると良い情報が聞き出せるかもね






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef