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


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

【初心者歓迎】C/C++室 Ver.40【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 09:10:30 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.39【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1182740506/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

52 名前:デフォルトの名無しさん:7 [2007/07/19(木) 00:06:36 ]
>>7です。
質問があります。以下のような関数を作ってファイル出力させてみたところ、
Windowsにあるノートパッドで、文字列を表示できません。。。
int output_dfg_to_file(){
FILE *fp;
char filename[64];
int state = 1,
index0,
index1;
int char_lib;
printf("OUTPUT >> DFG File Name: \n");
gets_s(filename);
if ((fp = fopen(filename, "w")) == NULL){
printf("ERROR: could not open file. \n");
state = 1;
goto exit;
}
for (index0=0; index0 < LIB_TABLE_SIZE; index0++){
for (index1=0; index1 < LATTER_SIZE; index1++){
char_lib = table[index0][index1];
printf("%c", char_lib);
fputc(char_lib, fp);
}
fputc('\n', fp);
}
fclose(fp);
exit:
return state;
}
いったん送信〜

53 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 00:11:47 ]
文字を出力していないのではないか?
table[index0][index1]
ってなにさ?

54 名前:デフォルトの名無しさん:7 [2007/07/19(木) 00:15:45 ]
>>52
char table[TABLE_SIZE][LATTER_SIZE] = {0};
で出力もとデータを扱っています。
fputcは、他の関数も使った事がないので上記で出力させてできたら
移行しようと思っています。fputcは出力文字対象の整数を引数に
していますが、ファイル書き込み時にも整数(int)のまま書きこん
でいるのでしょうか?
普段使っているtex¬epadで出力したファイルを編集したいので、
上記関数をどう変更すればいいかわからないでいます。

よろしくお願いいたします。

55 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 00:25:23 ]
>>54
printf()での出力はどうなってる?

56 名前:デフォルトの名無しさん:7 [2007/07/19(木) 00:42:59 ]
>>55
int ctoi(char *char_var, char addr){
int i;
i = char_var[addr];
return i;
}
でもって、先のボディを
char_lib = ctoi(&table_logical_object[index0][0], index1);
printf("%d", char_lib);
fputc(char_lib, fp);
としてみますと、
1.改行がされない。
2.0で初期化しているので、0が混ざって出力される。
3.フラグは適切にアサートされている
といったところです。


57 名前:デフォルトの名無しさん [2007/07/19(木) 00:51:04 ]
>>56
printf("%d", char_lib)
となってるけど >>52 みたいに%cでやってみて
ちゃんとコンソールに出力されてなければテーブルの中身がおかしいのかな?

58 名前:44 mailto:sage [2007/07/19(木) 00:52:53 ]
わざわざ答えてくださってありがとうございました。

59 名前:デフォルトの名無しさん:7 [2007/07/19(木) 01:24:49 ]
>>57:%c表示
コンソールには適切に表示される文字とされない文字がありました。
特定列だけ正常に表示されています。
出力用配列への代入時のキャスティングに問題ありかなと思えました。
そこで、出力用配列を整数型に代えて、%dで表示してみると、
整数値としてきちんと10進数表示はできました。
問題は文字列表示です。。。

60 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 05:01:33 ]
教科書のソースなら読めるのですが、
コメントの少ない1000行くらいの物がなかなか読めません。
どうすればソースコードを読むのがうまくなるのでしょうか?




61 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 05:19:48 ]
>>60
まず大局から把握していく
書かれてる処理が何のアルゴリズムの実装かとか、
(クラス名→)関数名・グローバル変数名→ローカル変数名と見て行って
それぞれの役割とかに見当をつけて読む
理解した部分にコメントを付けながら読むといい
あと色んなコーディングスタイルのプログラムを読んで経験しておくのもいい

62 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 06:21:55 ]
ちなみに何行くらいの物が読めると
中級者になるのでしょうか?

63 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 06:48:24 ]
行ではないと思う。

64 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 10:07:49 ]
てか関数にコメント付いてないソースは窓から投げ捨ててよし

65 名前:デフォルトの名無しさん [2007/07/19(木) 11:51:38 ]
質問があります。
MS VS2003 C++のGDI+なのですが、
Imageクラスのオブジェクトに画像が入っているとして、
1ドット目、座標 (0, 0) の色を取得するにはどうしたらよいでしょうか?

Image* img = new Image("pic.bmp");
Color aColor = image.getPixelColor(0, 0);

みたいにしたいのです。
よろしくおながいします。

66 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 13:57:13 ]
>>65
エラーメッセージやライブラリドキュメントをよく読めばよいです。

67 名前:65 mailto:sage [2007/07/19(木) 14:25:24 ]
はぁ…。
誰も回答してくれなかったけど自己解決したので一応載せておきます。
ストリーム経由しているので最適な方法とは思えませんが。

  Image* orgImg;
   :
   :

  // ストリーム用意
  CLSID clsid;
  GetEncoderClsid(L"image/bmp", &clsid);
  IStream *stream;
  ::CreateStreamOnHGlobal(NULL, true, static_cast<IStream **>(&stream));

  // ストリームに保存
  orgImg->Save(stream, &clsid);

  // ビットマップ読み込み
  Bitmap bmp(stream);

// 始点の色取得
  Color color(0, 0, 0);
  bmp.GetPixel(0, 0, &color);

>>66
わっかんねーならすっこんでろやカス野郎w
死ね!!www

68 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 14:42:06 ]
>>67
エスパー以外お断りなら先にそう言え。

69 名前:デフォルトの名無しさん [2007/07/19(木) 14:43:15 ]
すみません。C++初心者です。

C#でWindowフォームプログラムを作成したのですが、
インストールが出来ないPCで稼動させねばならなくなりました。
(そのマシンには.NetFrameWorkが入っていない)

短いプログラムなので作成しなおしてもよいのですが、
C#から、インストーラを稼動させたりランタイムをインストールさせたりせずに
インストーラ不要のEXEプログラムを作成するのに一番良い方法はなんでしょうか?

環境が似ているVC++2005 ExpressEditionをDLしてみたのですが、
インストーラ不要のEXEプログラムの作成の方法がわかりません。
(作成できるかどうかもわかりません)

すみませんが、どうかご教示願います。

開発環境:WinXP
実行環境:Win2000、WinXP

70 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 14:50:54 ]
>>68
ほら、「エラーメッセージやライブラリドキュメントをよく読めばよいです。」
ってまたレスしなよ。



71 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 14:51:57 ]
>>67
エラーメッセージやライブラリドキュメントをよく読んで自己解決したならそれは
>>66のおかげw

72 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 14:54:55 ]
>>69
結局、最終的に動かしたいのはC#で作ったやつなのかC++なのか?
C++ならランタイム無しでシステム標準のDLLだけで動作するものは
作れるが、それとC#のプログラムとは何の関係もないぞ?

73 名前:72 mailto:sage [2007/07/19(木) 14:57:30 ]
C++でもフォームで作れるけど、それじゃ.NET環境必須だから意味ないよな
ということで、C++で作ることになるけど、かなり初歩からやらないとならんかもな。
MFCのスタティックリンク、が一番近いかなあ、、、


74 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 14:58:45 ]
>>67
そんなら、GraphicsからBitmap作成して、
Graphics::DrawImage()して、
そのBitmapからピクセル取得したほうがいいんじゃないかな。

75 名前:69 [2007/07/19(木) 14:58:47 ]
早速の回答ありがとうございます。
ランタイムなしで作成できるならC++で作成したいです。
C#のコードを捨てるのは全く問題ないのですが、
ある程度慣れたVC++2005ExpressEditionで作成出来ればと思っています。


76 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:02:05 ]
>>75
CだろうがC++だろうが、ランタイムは(普通は)使うことになるが、
静的にリンクすることで、外部のDLLに依存するのではなくプログラムに
埋め込むことが出来る。

まあ、良し悪しなんだがな。

77 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:03:46 ]
>>75
EEだと、MFCも無いのでマウスで貼り付けるようなのは無いぞ。
まあテキストで全部できるし、リソースエディタを外部ツール使えばいいか。

78 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:06:02 ]
>>73
開発環境が 2005EE だと リソースエディタ と MFC は無いんじゃなかったっけ?
フォーム風のをフルスクラッチで書くのは泣ける希ガス

79 名前:69 [2007/07/19(木) 15:06:29 ]
>>76,77
ありがとうございます!
>>76
 EEだと、MFCも無いのでマウスで貼り付けるようなのは無いぞ。
 まあテキストで全部できるし、リソースエディタを外部ツール使えばいいか。

その方法が知りたいのですが良く分かりません。
ご教示頂ければ幸いです。


80 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:09:23 ]
wxWidgetとかQTとか使うといいんじゃね



81 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:10:33 ]
>>79
freepg.fc2web.com/cpp/topic_vce_001.html
www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
この辺読んでみて
自分はPro版持ってるからやったことないけど

82 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:13:52 ]
>>80
スタティックリンクできるっけ。
インストール不要なら検討の余地はあるね。

83 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:15:14 ]
>>82
ライセンスまで含めてマジメに考えるとどうなるか分からん

84 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:15:25 ]
てかC++Builder Explorerつかえばいいんじゃないか?

85 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:16:41 ]
>>82
インストールは不要だね
どうしても実行ファイルは大きめになるけど

86 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 15:37:07 ]
>>79
freepg.fc2web.com/cpp/topic_wx_vc.html
0xcc.net/pub/uu-2004-08/
www.geocities.co.jp/SiliconValley-Cupertino/8526/wxWindows/license.html
これもどうぞ

87 名前:デフォルトの名無しさん [2007/07/19(木) 16:11:41 ]
次のようにintとfloatが混在しているとファイルに正しく書き込めないんでしょうか?
読み出すとき値が壊れています・・・

for(k=0; k<100; k++) {
fp.write(( char * ) &k,sizeof(unsigned int ) );
fp.write(( char * ) &x[k],sizeof( float ) );
}



88 名前:デフォルトの名無しさん [2007/07/19(木) 16:14:03 ]
87です
すみません
バイナリモードで開いていませんでした

89 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 16:22:32 ]
>>88
というか…2行目の
fp.write((char *)&k, sizeof(unsigned int));
もうこの時点で何をしたいのかよく分からない。
変数kのアドレスを出力してるの?
何のために?
…俺が勘違いしてるのかな。

90 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 16:27:53 ]
>>89
> …俺が勘違いしてるのかな。
うん。



91 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 16:40:25 ]
普通に見られる書きかただと思うけど、何と勘違いしたのだろう。

92 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 18:26:31 ]
確かによく使われる書き方だけどキャストしまくりでソースが汚れるからこういうのを考えました

template <typename Rng, class OutStream>
OutStream& binWrite(Rng& rng, OutStream& os) {
  using namespace boost::lambda;
  using boost::addressof;
  using boost::range_value;

  boost::for_each(rng,
    bind( &OutStream::write, &os,
        ll_reinterpret_cast<char*>( bind( addressof<typename range_value<Rng>::type >, _1 ) ),
        ll_static_cast<std::streamsize>( ll_sizeof( _1 ) )
      )
  );
  return os;
}

使い方は
std::ofstream ofs("test.dat");
std::string a("abcdefg");
として
binWrite(a,ofs);だけでおk

どうよ?


93 名前:92 mailto:sage [2007/07/19(木) 18:40:35 ]
すいません
横からserialization使えとか言われて気づいたので>>92は見なかったことにしてくだしあ><

94 名前:デフォルトの名無しさん [2007/07/19(木) 22:56:36 ]
VC++ 2005 Express で
std::ofstream file("c:\\日本語ファイル名",  std::ios::out | std::ios::binary | std::ios::trunc);
とするとファイル名が文字化けしていまいます、ofstreamでは日本語ファイル名が使えないのでしょうか?

プロジェクト設定をUnicode、マルチバイトどちらにしても結果は一緒でした


95 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 22:58:55 ]
>ttp://miyano.s53.xrea.com/cgi-bin/sb/log/eid89.html
だってさ

96 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:04:57 ]
>>95
ありがとうございます
setlocale(LC_ALL, "Japanese");
を呼ぶことで無事できました。

VCのバグっぽいですね

97 名前:94 mailto:sage [2007/07/19(木) 23:07:46 ]
プロジェクト設定Unicodeでやってもだめだったのは L"ファイル名" としていなかったからでした

98 名前:デフォルトの名無しさん [2007/07/19(木) 23:43:15 ]
VC++ 2005 Expressを使用しています。
画像表示に関する質問です。

PictureBoxに複雑な画像を描写しました(Setピクセル)。
その画像に、Drawlineで線を描きました(マウスmove等を使用)。
この線を書き直したいのですが、線を消すために
DrawlineのWhitePenを使用すると、せっかく読み込んだ複雑な画像まで、
白抜きになってしまいます。
後から書き加えた線だけを消去したい場合は、
どのような方法で消去すればいいでしょうか?
ご指導お願いします。
複雑な画像を一旦保存しておけばいいのかなぁ
と思っているのですが・・・
よろしくお願いします。

99 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:45:05 ]
>>94
次からは、文字列には頑張って
TEXT("とりあえずTEXTつけときます")
ってしとこうな。
それがいやならリソースにしとくれ

それにしても、MBCSでも日本語きちんとコンパイルできるサービスパックを早くツクレカス>マイクロソフト


100 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:50:04 ]
おまいらよ、まだ、VS2005の文字セットMBCSしているのか?
いいかげん、海栗コードにしろよな。



101 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 23:51:13 ]
>>98

>複雑な画像を一旦保存しておけばいいのかなぁ
>と思っているのですが・・・
>よろしくお願いします。

うん。
原則として、OnDrawが呼ばれる度に操作と順番通りに書き込むのがウィンドウズの基本。
一回書く毎にピクセルを保存すると、UNDO限界回数と画像の大きさによっては
莫大なメモリが必要になるから。


102 名前:98 mailto:sage [2007/07/20(金) 00:01:58 ]
>>101
ありがとうございます。
もしよろしければ、一旦保存する方法を教えて頂けますか?
キャプチャというのを使うのかと思ったのですが、
なかなかうまくいきません。


103 名前:94 mailto:sage [2007/07/20(金) 00:07:46 ]
>>99
テストコードだから抜けてた・・・
と、言い訳

104 名前:デフォルトの名無しさん [2007/07/20(金) 00:15:27 ]
string::find_first_of()で大文字小文字を区別して検索する方法ってある?

105 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 00:19:40 ]
何も考えずにやったら区別されるはず

106 名前:101 mailto:sage [2007/07/20(金) 00:20:46 ]
>>98
一旦保存というのをちょっと勘違いしているかもしれない。

画像をピクセルで保存するのではなく、
白紙の状態からラインを引く関数の始点・終点・色を全て覚えさせておくのですよ。
だから、それを覚えさせるための仕組み(普通は構造体の配列とかリストなど)を作っておいて、
UNDOしたかったら、現在までの手順から1個引いたまでの手順をウインドウに書き込むということ。

例えば、ピクチャーのまま保存して、応用で10回までUNDOできるという作り方もできるが
それは↑の課題をクリアしてからじゃないかな。

今のマシンだったら、1000個程度のラインは一瞬で引けるよ。

話は変わるが、単に今の画像をキャプチャしたいのなら、Alt+PrintScreenキーでコピーして
ペイントか何かに貼り付ければいい。
残念だがPictureコントロールは使った事が無いのでプログラムでの操作は知らない。

107 名前:98 mailto:sage [2007/07/20(金) 00:30:49 ]
>>101
ありがとうございます。
一旦保存を勘違いしていたようです。
これから、再チャレンジしてみます。
ありがとうございました。

108 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 02:05:22 ]
>>100
VCLが海栗コード対応しないんだもの(´・ω・`)

109 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:12:27 ]
すいません、質問です。
enum Type{
UNDEF,
SYS
};

#define TYPE(t, nargs) ((t)*1000+(nargs))

enum keywords{
READ,
WRITE
};

struct s_keywords{
char *key
int type;
int i;
};

static struct s_keywords func[] = {
{"read" , TYPE(SYS, 0), READ}
省略

というマクロが有るんですが、
TYPE(SYS, 0)の部分はどのように置換されるのでしょうか?


110 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:20:58 ]
(UNDEF+1) * 1000 + 0
だから恐らく1000



111 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 07:52:49 ]
有り難うございます。
マクロってこんな事も出来たんですねぇ。

112 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 09:21:26 ]
eclipse,CDTで開発しています。
普通はprintf("1"); scanf("%d",&num);とやれば1が表示された後入力を求められるのですが、
何故か私の環境では1が表示されずいきなり入力を求められ、
printf("1"); fflush(stdout); scanf("%d",&num); とやらないと正常に表示されません
何か出力ストリームの挙動がおかしいです。
ググってみたところfflush(stdout);をするとそれなりに処理時間がかかってしまうそうですし・・・
これってスピードを求められるcでは致命的ですよね?
ググると同じような現象が起こった方が数人居るようですが、解決方がfflush(stdout);
しか載っていません。fflush(stdout);以外の解決法教えてください。
コンパイラはMinGW5.0 + msys1.0 CDTはeclipse3.3の更新サイトでついてくる奴
使ってます。


113 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 09:34:40 ]
ユーザー入出力にスピード求めるのか?
対象ユーザーどんだけニュータイプなんだよw

114 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 09:38:27 ]
対象ユーザーじゃなく112がニュータイプ

115 名前:112 mailto:sage [2007/07/20(金) 09:54:59 ]
そうですか。では普通にfflush(stdout);で解決しても無問題ということですね。
ご回答thx

116 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 11:01:57 ]
>>112
その辺は微妙な話だと思う。
stdoutは端末に結び付けられている場合は行バッファリングされ、
そうでない場合はフルバッファリングされるのが伝統的実装のようだが、
規格でそうしろと決まっているわけでもないようだ。
stderrがバッファリングなしというのは決まっていたはずだが。

さらに、入力を行う際は、行バッファリングされている出力を
前もってフラッシュすることになっていたと思うが、よく分からん。
stdoutが行バッファリングされている場合に、>>112のような
コードで、改行なしのプロンプトを表示後に入力できるためには、
そうなっていなければならないのだが。
もしかしたら、>>112の環境ではstdoutがフルバッファリングされているのかもな。

確実に即座に出力を表示したい場合は、stderrを使うというのが一つの手だが、
いちいち fprintf(stderr, ...) と書きたくないのなら、
setvbuf()を使ってstdoutをバッファリングなしに設定するという方法もある。

stdoutはリダイレクトされることもあるのだから、できれば
isatty()などを用いて標準出力が端末かどうかを見たほうが良いのだが、
残念ながらこの方法は移植性があるとは言えないのが難点だ。

117 名前:デフォルトの名無しさん [2007/07/20(金) 14:49:27 ]
C++の認定試験てあるの?

118 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 14:51:36 ]
ある。俺が創った。

119 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 14:57:04 ]
そしてオレが認定。

120 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:27:53 ]
そして俺が脱落



121 名前:電通女 ◆v1Uy5WkQ7k mailto:sage [2007/07/20(金) 20:38:06 ]
#include<stdio.h>
struct complex{
double re,im;
};

この意味を教えてください。 



122 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:43:17 ]
ストラクトは構造体、コンプレックスはそれにつけた名前(intとか、charとかに匹敵)
その次のダブルはその構造体の構成要素、だと思います
私はc言語暦1週間くらいなので当てにならないかもしてませんが

123 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:43:42 ]
電通女 ◆v1Uy5WkQ7k に一致するページは見つかりませんでしたからダメです。

124 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:45:06 ]
>>121
構造体って習った?


125 名前:電通女 ◆v1Uy5WkQ7k mailto:sage [2007/07/20(金) 20:47:29 ]
構造体で、"re"と"im"という変数を定義してるって事ですか?

126 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:49:57 ]
それって複素数でそ?
私にもわかるよww

127 名前:電通女 ◆v1Uy5WkQ7k mailto:sage [2007/07/20(金) 20:53:36 ]
それは分かってるんですが、プログラムの意味がわからなくて。

128 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:57:50 ]
>>121
struct kozotai{
 double a;
 double b;
};

これが何か分かるならそれもわかるはず

129 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:58:40 ]
double型の変数reとimを含む構造体complexを宣言した。

それだけ

130 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 21:04:39 ]
>>127
子宮で考えるんじゃない、脳で考えるんだ!!



131 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:26:39 ]
あまりにも初心者すぎる質問ですが、お願いします。

VC++2005EEで新規作成->Win32コンソールアプリケーションを作成(オプションで
"空のプロジェクト"を選択)した後、

#include<iostream>
int main(){
  std::cout << "hello";
  return 0;
}

だけのmain.cppをソースファイルフォルダに作成し、これをビルドしようとすると
以下3つのエラー:

main.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall
 std::ios_base::Init::Init(void)" (??0Init@ios_base@std@@QAE@XZ) が関数
 "void __cdecl std::`dynamic initializer for '_Ios_init''(void)"
 (??__E_Ios_init@std@@YAXXZ) で参照されました。
main.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall
 std::ios_base::Init::~Init(void)" (??1Init@ios_base@std@@QAE@XZ) が関数
 "void __cdecl std::`dynamic atexit destructor for '_Ios_init''(void)"
 (??__F_Ios_init@std@@YAXXZ) で参照されました。
fatal error LNK1120: 外部参照 2 が未解決です。

が発生します。
思い当たるところがあればお教えください。よろしくお願いします。

132 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:29:55 ]
"空のプロジェクト"がダメなんじゃ?
"こんにちは、世界"でどうぞ

133 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:37:00 ]
>>131
別にその通りにやって普通にコンパイルできるけどな。

MSSDKをインストールしていて、そのlibディレクトリにlibcp.libとかいう
怪しいライブラリが入っていたりしない?

134 名前:131 mailto:sage [2007/07/20(金) 23:41:11 ]
libcp.libより怪しい133が入ってますた!!

135 名前:131 mailto:sage [2007/07/20(金) 23:55:59 ]
>>134
誰てめえw

>>132
すいません、もう少し分かり易く・・・
"空のプロジェクト"のチェックをはずしても同様のエラーが出ました。
(そういう意味じゃなかったですか?)

>>133
確かにありました。しかしそのlibファイルをリネームしてみたり、
プロジェクトのプロパティからライブラリの無視リストに入れてみたり
しましたが変化なしでした。
133さんで問題なくビルドできるということは、自分の特有の環境が
原因ということなのでしょうか(MSSDKあたり?)。調べてみます。

136 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:01:04 ]
>>135
ふうん、変化なしか。
libcp.libはC++のランタイムで、本来はVC++に付属のものが使われるべきで
SDKになぜか入っていたりする怪しいのが優先参照されちゃうとマズかったりする。
てっきりそのせいかと思ったんだがな。

コマンドプロンプトからvcvars32.batを実行後に普通にcl.exeでコンパイル
するとどうなる?

137 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:35:42 ]
>>136
動きました!なぜ。

cl.exeでmain.cppを直接コンパイルすると、下のような警告が大量に出ましたが
問題なく動きました。

C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\ostream(751) :
warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティ
クスは有効にはなりません。/EHsc を指定してください。
main.cpp(6) : コンパイルされたクラスの テンプレート のインスタンス化 'st
d::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::b
asic_ostream<_Elem,_Traits> &,const char *)' の参照を確認してください
with
[
_Elem=char,
_Traits=std::char_traits<char>
]

これで動くということは、VC++の設定の方でどこか変えてはいけない部分を
触っちゃって(かつ忘れて)いるといったところでしょうか。

138 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:41:58 ]
>>137
その警告はまぁオプション指定しないと普通に出るね。言われたとおりに
/EHscを指定すればよい。

後はまぁ、clで無オプションでコンパイルしたんならデバッグ版のライブラリ
じゃないから、IDEからリリースビルドでやってみるとか、
ツール→オプションでVC++ディレクトリの優先順位をチェックするとか、
プロジェクトファイルの中を見てみて、どうなってるかチェックするとか、
色々やってみるんだね。

139 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:52:24 ]
まあ、vcvars32.bat内に
set CL=/EHsc /Ox /W4
程度を適当に入れとくべきだろ。

140 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:56:24 ]
親切にありがとうございました。

一応動くようにはなったので、いろいろ試しつつ
何が原因だったのか調べてみようと思います。



141 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:34:54 ]
今思ったんだが、「空のプロジェクト」ってなんかカッコよくね?
“Project S・K・Y” とか表記するともっとカコ(・∀・)イイ

142 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:35:50 ]
から

143 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:36:00 ]
「からのぷろじぇくと」としか読んだこと無い

144 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:37:05 ]
empty project

145 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 17:22:05 ]
ポインタって何ですか?


146 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 17:26:58 ]
>>145
ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29

147 名前:145 mailto:sage [2007/07/21(土) 17:29:11 ]
>>146
ありがとうございました。

148 名前:デフォルトの名無しさん [2007/07/21(土) 19:51:49 ]
HARC HWNDっておなじですか??HARCがエラーになります


149 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:20:19 ]
HARC?

150 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:26:06 ]
A SHARK?
No,a dolphin! Watch out!!



151 名前:デフォルトの名無しさん [2007/07/21(土) 20:30:47 ]
書庫のファイル名を取得したいんですけど・・・どうすればいいかわかりますか??

#include <windows.h>
#include <iostream>
using namespace std;

typedef HWND (__stdcall *FND)(const HWND ,LPCSTR , const DWORD );
typedef int (__stdcall *FNE)(const HWND , LPCSTR ,int );

main(){
char buf[128];
HINSTANCE hd = LoadLibrary("UNZIP32.DLL");
FND pd = (FND)GetProcAddress(hd,"UnZipOpenArchive");
FNE pe = (FNE)GetProcAddress(hd,"UnZipGetFileName");

HWND q=(*pd)((HWND)hd, "file.zip",0);

(*pe)(q , buf, 128);
cout<<buf<<endl;
FreeLibrary(hd);}


152 名前:関数はこうなっています・・・ [2007/07/21(土) 20:34:20 ]
HARC WINAPI UnZipOpenArchive(const HWND hWnd,LPCSTR szFileName, const DWORD dwMode);
機能   指定ファイルが UNZIP32.DLL に有効な書庫ファイルかどうか調べ、
有効であればオープンし、一意の数値(ハンドル)を返します。
以後の書庫ファイルへのアクセスはこのハンドルでおこないます。
アクセスを終了する時は UnZipCloseArchive 関数を呼ばなければなりません。

引数   hWnd UNZIP32.DLL を呼び出すアプリのウィンドウ・ハンドル。
szFileName 書庫ファイル名。
dwMode 処理モードを指定するフラグ。次の値を|(オア)で
組み合わせる。

戻り値 指定の書庫ファイルに対応したハンドル。エラー時は NULL を返します。


int WINAPI UnZipGetArcFileName(HARC hArc,LPCSTR lpBuffer,int nSize);
機能   書庫ファイル名を得ます。

引数   hArc UnZipOpenArchive() で返されたハンドル。
lpBuffer ファイル名を格納するバッファ。
nSize バッファのサイズ。

戻り値  正常終了時に0、異常時にはエラーコード(0以外)が返ります。






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

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

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