- 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
- 321 名前:デフォルトの名無しさん mailto:age [2007/07/25(水) 00:35:32 ]
- ニコフォトオールスター
www.freewebs.com/nicophoto/?/@
- 322 名前:デフォルトの名無しさん [2007/07/25(水) 00:40:44 ]
- >>320
なるほど。hDlgってのはHWND型なんでそうかもしれません。 しかし、こんな記述法あるんですか?
- 323 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 00:42:49 ]
- >>322
あるよ。コンストラクタで入門サイトめぐってみては? ところで、この書き方って一般的なの?俺は{}内に書くことが多いんだが。
- 324 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 00:44:06 BE:268527762-2BP(30)]
- effective c++まじオススメ
- 325 名前:デフォルトの名無しさん [2007/07/25(水) 00:48:47 ]
- >>323
なるほど、コンストラクタ初期化子っていうんですね。初めて知りました。僕の見た限りでは初期化数はみんな( )内に書いてるようです。
- 326 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 00:49:04 ]
- >>323
極めて一般的に使われる。 HWND(基を辿ればポインタ型)のような組込型ではどうでもいいが、 クラスオブジェクトの場合、こうでしか 非静的メンバのコンストラクタを呼び出せないので大変重要。
- 327 名前:デフォルトの名無しさん [2007/07/25(水) 00:52:43 ]
- すみません
全く出来ません tring型をwchar_t に変換する方法教えてください
- 328 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 01:04:47 ]
- 標準C++ライブラリだけでやるならこのページの一番下の
hw001.gate01.com/eggplant/tcf/cpp/wchar_t_trap.html おまけが参考になる。 hw001.gate01.com/eggplant/tcf/cpp/strcnv.hpp
- 329 名前:デフォルトの名無しさん [2007/07/25(水) 01:14:51 ]
- あのexeファイルを実行するにはどうしたらいいんでしょうか
- 330 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 01:16:40 ]
- どのexeファイル?
- 331 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 01:25:05 ]
- CreateProcess() @Win32
fork(),exec() @Unix
- 332 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 01:43:15 ]
- >>326
スマン、いろいろ回ってみたがわからん部分が多々でてきたOTL コンストラクタ初期化子を使う1つの理由としてデフォルトコンストラクタ以外を 使用してメンバ変数を初期化したい場合に必要ということでいいのかな? あと、参照メンバ変数がコンストラクタ初期化子でしか初期化できないという 理由もよくわからんかった・・・まだまだ修行が足らんようです。
- 333 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 02:08:21 ]
- 初期化後の参照変数へのoperator = は、
全部参照先へのオブジェクトコピーになるから、 初期化後に参照先を変えることはできないってこと
- 334 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 02:22:35 ]
- >>333
なるほど。 参照をポインタの延長として理解しようとするからダメなんだよな。 int *p = NULL;として初期化時は何も指していないポインタに後でアドレスを代入する というのは参照では出来ない。 参照変数は宣言と同時に初期化する必要がある。 宣言時に初期化しなければいけない理由等が>333のとおり。 メンバ変数の場合は、その初期化にコンストラクタ初期化子を使用する。 というよりそこで初期化しなければならないし、そこでしか出来ない。 語弊があるかもしれんがこんな感じかな。
- 335 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 02:33:22 ]
- 配列の初期化もやらせてくれるといいんだがなぁ…。
- 336 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:10:33 ]
- 変数宣言時に
array[8] = {0} は 初期化ができるのに array[2][4] = {0} とすると、怒られる 2次元以上の時に初期化しようとすると 怒られるのはどうしてですか?
- 337 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:16:59 ]
- >>336
エラーメッセージは何て言ってる?
- 338 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:23:30 ]
- >>334
参照に限らず、メンバ変数の初期化はコンストラクタ初期化子でしかできない。 これを理解するためにも、まともに C++ を使い続けるためにも初期化と代入の区別を しっかり理解する必要がある。
- 339 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:24:55 ]
- 代入エラー 的な文か 無効な演算子hoge だったかと思います gccで
- 340 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:28:16 ]
- >>339
それ、初期化じゃなくて代入してるんじゃね?
- 341 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:36:30 ]
- いやでも変数宣言時にそうしたら怒られてた気が・・・
- 342 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 03:46:25 ]
- >>341
こんどはちゃんとエラーメッセージもいっしょに持ってこようね。
- 343 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 06:04:20 ]
- >>336
array[2][4] = {{0}, {0}};
- 344 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 06:20:34 ]
- 参照をいろんな感じで使ってみたんですが、よく分からないことがありました。
この場合 int i = 123; int &r = i; int &rr = r; rr = 456; std::cout << i; 自分が考えていた通りに「456」が表示されますが、以下のようにconstを付けると int i = 123; const int &r = i; int &rr = r; rr = 456; std::cout << i; 「123」が表示されます。 自分は int &rr = r; の行でエラーにでもなるのかなと思ってたんですが。 なぜ const を付けるか/付けないかだけで、このように変化するのか分かりません…
- 345 名前:デフォルトの名無しさん [2007/07/25(水) 06:29:40 ]
- >>344
constは変更できないって意味だからでは むしろrr=456でエラーがでそうだけど、 そんな後付け参照までフォローはしないのかな
- 346 名前:344 mailto:sage [2007/07/25(水) 06:33:35 ]
- >>344の結果はBCBです。
VC++とg++で試してみると、両者ともエラーになりました… エラー内容は「int &rr = r; のところで const int & から int & にできない」という感じでした。 BCBだと [C++ 警告] Unit1.cpp(12): W8028 'rr' を初期化するために一時変数を使用する っていう警告が出ました。 BCBが特殊なのかな…
- 347 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 08:18:53 ]
- >>346
Borland のが腐ってる。
- 348 名前:317 mailto:sage [2007/07/25(水) 08:59:52 ]
- あれから色々調べてみたんですが、特定のエスケープシーケンスの文字化けは
CDTに限ったことでは無いようです(OSの問題かな?)まあ色々分かったので もうちょっと調べていこうと思います。cの問題では無かったですね;すみません。
- 349 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 09:00:19 ]
- だから BCB は腐ってるから使うなとあれほど・・・
- 350 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 09:06:13 ]
- const 参照を使うと
const int& r = 1; といったことができるが、 この時はテンポラリオブジェクトが作られて、それへの参照が作られる。 昔は const なしでもこういうことができることがあった。 規格がまだ整理されてなかった時代だったからなのか、独自の拡張だったのかは知らんが。 ここではそれが起こってるんだろう。
- 351 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 12:16:56 ]
- 質問です。
fopen_sってGCCみたいなVC以外の環境でも普及していて普通に使えるのでしょうか?
- 352 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:08:38 ]
- >>351
ぜんぜん普及してないです。VC++だけ。
- 353 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:16:59 ]
- だから GCC は終ってるから使うなとあれほど・・・
- 354 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:24:54 ]
- 普及していないが、Open Watcomでも使える。
また、標準規格に盛り込まれれば、glibc辺りにも実装されるだろう。
- 355 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 13:56:24 ]
- 今C言語勉強中なんですけど
本とかサイトとかで一人で勉強してもある程度身につくものでしょうか?
- 356 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:18:27 ]
- 大多数の人は一人で勉強してます
- 357 名前:デフォルトの名無しさん [2007/07/25(水) 14:24:38 ]
- double型をstirng型に変換する方法ありませんか?
- 358 名前:デフォルトの名無しさん [2007/07/25(水) 14:29:55 ]
- double d;
char c[100]; string s; sprintf(c,"%f",d); s=(string)c;
- 359 名前:デフォルトの名無しさん [2007/07/25(水) 14:32:30 ]
- >>358
ありがとうございます。 やはりこの方法しか無いんですね。 itoa()みたいな便利なのあればいいなぁと思ってググったんですが 見つけられませんでした。
- 360 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:36:54 ]
- sprintfの方が数倍便利だと思うが
- 361 名前:デフォルトの名無しさん [2007/07/25(水) 14:38:39 ]
- string dtos(double d){ char c[200];sprintf(c,"%f",d);return (string)c;}
これを先頭へコピペして仕え
- 362 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:40:55 ]
- >>359
itoa()と違って小数点以下何桁、とか指定することが多いと予想されるからな
- 363 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:46:36 ]
- >>356
そうなんですか ありがとうございます
- 364 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:51:02 ]
- とりあえずお約束で
つ std::stringstream つ boost::lexical_cast つ boost::format
- 365 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:58:19 ]
- error C2027: 認識できない型 'name::B' が使われています。
とのエラーで苦しんでいます。よろしければ助言お願いいたします。 ==B.h file========================================= #include A.h namespace name { class B { public: A_Base* const getA_Base() const { return m_a; } private: A_Base* m_a; }; } // name ================================================= ↓続く
- 366 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 14:58:55 ]
- ==A.h file=========================================
namespace name { class B; class A_Base { protected: B* const getB() const { return m_b; } private: B* m_b; }; class A_Deriv { public: void func() { getB()->getA_Base(); } }; } // name =================================================
- 367 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 15:00:44 ]
- A_Deriv::func()を実行すると
error C2027: 認識できない型 'name::B' が使われています。 とのエラーが出てきてコンパイルできません。 どうか助言の方、よろしくお願いいたします。
- 368 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 15:02:58 ]
- A_Derivは
class A_Deriv : public A_Base です、記述ミスですすみません。
- 369 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 15:09:31 ]
- >>364-368
A.h を頭から順に読んでいったコンパイラさんは、 メソッド B::getA_Base() の存在を知ることができない。
- 370 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 15:16:33 ]
- クラス定義の中で関数を定義すると、
クラス定義の直後にinline付きで定義されたものとして扱われる。 つまりA_Derivはこう書いたのと同じに扱われる。 class A_Deriv : public A_Base { public: void func(); }; inline void A_Deriv::func() { getB()->getA_Base(); } ところが、この時点ではclass B;という前方宣言しかないため、 Bに関する具体的な情報がわからない。それで367のエラーになってしまう。 解決するには、A_Deriv::funcの定義をBの定義より後に回せばいい。 例えば、A.hとB.hをインクルードするcppファイルでA_Deriv::funcを定義したり、 A_BaseとBを同じヘッダで定義して、そのヘッダの一番下に インラインでA_Deriv::funcを定義するなどの方法がある。
- 371 名前:365 mailto:sage [2007/07/25(水) 16:17:52 ]
- >>369
>>370 早速の返答ありがとうございます。 かき方がとても悪かったです、A_Deriv::func()は実際はcppの方に実装してあります。 そして、A_Deriv::func()の実装したcppでのincludeをA.h B.hともにして通りました(A.hのみincludeしていた状態でした) とてもバカなミスでした。お手数おかけしました。どうもありがとうございました!
- 372 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 18:01:38 ]
- >>353
どこのGCCの話をしてるんだ? Win以外じゃ主流なんだが・・・
- 373 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 18:05:11 ]
- >>372
かわいそうな子に触らないで
- 374 名前:353=372 mailto:sage [2007/07/25(水) 18:22:02 ]
- つまらん。もっと面白い突っ込みしろよ
- 375 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 19:01:38 ]
- 質問なんですが、配列には最後の要素に必ずナル文字(\0)が
入らないといけないんですか?
- 376 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 19:05:27 ]
- 文字列なら
- 377 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 19:08:49 ]
- >>375
ぬるぽ 文字じゃなければ別に\0入ってなくていい。 文字列だと文字の終わりがわからんから。 文字表示するとき、1個ずつ文字を調べて'\0'まで描画するみらいなルールがあるの
- 378 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 19:19:54 ]
- みらいなみらいなけーの
- 379 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 10:13:10 ]
- らめぇー
- 380 名前:デフォルトの名無しさん [2007/07/26(木) 11:42:25 ]
- VC.NET2003で
mkstemp() が使いたいのですが、どうしたらいいでしょうか?
- 381 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 11:59:03 ]
- >>380
それは諦めて、標準ライブラリ関数のtmpnamやtmpfileを使う。
- 382 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 12:02:02 ]
- 探せばwin32版の実装も転がってるんじゃないのか
- 383 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 12:12:44 ]
- >>382
つCygwin VC++で使えないだろうけどね。
- 384 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:14:57 ]
- エラーチェックが甘いけど、自作するならこんな感じかなぁ。
#include <windows.h> #include <sys/stat.h> #include <io.h> int mkstemp(const char *templ) { char *buffer; DWORD length; char filename[MAX_PATH]; length = ::GetTempPathA(0, NULL); buffer = (char *)malloc(length); GetTempPathA(length, buffer); if (GetTempFileNameA(buffer, templ, 0, filename) == 0) { free(buffer); return -1; } free(buffer); return open(filename, _S_IEXEC); }
- 385 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:19:57 ]
- すいません、生徒5人で3科目(国語・数学・英語)の点数を2次元配列に読み込んで、
その最高点と平均点を求めるプログラムを書いたのですが、なぜか平均点がうまく出ません・・・。 どこが悪いのでしょうか。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4757.txt
- 386 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:30:16 ]
- printf("[国語]平均点 : %d\n", ave[i]); ここの%d
- 387 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:35:23 ]
- >>386
・・・・・orz すいませんホントありがとうございます・・・。自分ではなかなか気づかないものですね・・・。
- 388 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:39:47 ]
- >>387
普通のコンパイラなら警告を出してくれると思うのだが。
- 389 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:40:14 ]
- え?printfだぜ?
- 390 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:42:47 ]
- --
for (i=0; i<3; i++) { switch (i) { case 0 : printf("[国語]最高点 : %d\n", max[i]); -- 激しく間が抜けたコードだな。そこまでループに拘るなら文字列も動的に作ればいいものを。
- 391 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:43:53 ]
- >>389
え? 今時出せないコンパイラなんてあったの? すまん、私が物を知らないらしい。
- 392 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:44:51 ]
- >>391
じゃあ、その出すコンパイラと出る例をあげてくれないか。
- 393 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:46:18 ]
- gcc -Wallで警告でるよ
- 394 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:48:18 ]
- gccはputsに置き換える件といい、余計なお世話が多いな。
この文字列が変数だったら検出できんのかね?
- 395 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:49:35 ]
- static char const * const subjs[] = {"国語", "数学", "英語",};
for (ic = 0; ic < sizeof(subjs) / sizeof(* subjs); ++i) { printf("[%s]最高点:%d\n", subjs[ic], ave[ic]); } とか? そこまで凝らなくても良さそうだが。 #でもそれならループにしなくてもって話になるか。
- 396 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:50:33 ]
- gccはprintf()を知っているから、警告を出すし、場合によっては
puts()などに置換さえするが、gcc以外でそういうことをやる コンパイラを俺は知らないな。 昔はそういうのはlintのやる仕事ということになっていた。
- 397 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:51:09 ]
- >>394
iccも同じようなことしてきたよ。勿論変数なら検出できないだろうけど、フォーマット文字列を 動的生成する香具師もそうそういないから(いてもその場合どうせトリッキーだし)実質問題なかろう。
- 398 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:51:53 ]
- >>395
文字列のリストなら、最後に番兵のNULLをつけるほうが俺は好き。 そのほうがコードが綺麗になるしリンケージを超えてもおk。
- 399 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:52:26 ]
- なるほど、gccは出るんだね。
stringオブジェクトに%sも出るのかなー、試してみるか。
- 400 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:53:27 ]
- >>397
scanf()系だと、*の働きがprintf()と違うから、動的にフォーマット文字列を 生成したくなることは案外多い罠。
- 401 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:53:52 ]
- >>398
僕も君が好きだよ
- 402 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 15:54:30 ]
- >>398
その場合、配列要素数に使えない。 >395の方法なら、double ave[sizeof(subjs) / sizeof(* subjs)]という使い方もできる。 つまり、教科数に依存するマジックナンバーを全廃できるわけで。 #そこまで凝らなくても云々
- 403 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 18:00:41 ]
- >>402
この例のような線形探索をするだけなら番兵で十分で、配列要素数は不要だし、 マジックナンバーも要らないって話でしょ
- 404 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 18:14:33 ]
- >>384
open()の第二引数が抜けてるし、テンポラリファイルをclos()しても削除されない んじゃないか
- 405 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:33:50 ]
- >>402
sizeof subjs / sizeof *subjs - 1
- 406 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:35:16 ]
- って、リンケージの問題もあったのか。
- 407 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 19:56:22 ]
- グローバル変数のフラグが沢山あるんですが、
どうにか纏めたいんですがどう修正したらよいか迷ってます。 Singletonで状態を返すクラス作ろうかなとか思ったり 単に構造体に纏めようかなと思ったり。 みなさんはどうしてますか。
- 408 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 20:09:05 ]
- unsigned int とかの変数一つに詰め込んで、ビットシフトのマクロで取り出す
- 409 名前:155 mailto:sage [2007/07/26(木) 22:38:49 ]
- C++でExcelが使えるかどうか質問していた者です。
なんとか辿り着いたのが ttp://www.ujasiri.com/prglib/vc/excel/vc_excel.html このサイトなのですが、時間が無く、サンプルのエラー外しで一杯一杯orz 私はDirectXのゲームに対しての作成サポートツールや、ゲーム自体のデータをExcel(のデータ形式)からやり取りしようと考えております。 他の手段で解説しているサイトが見つからないのですが、ここのサイトに書かれていることで宜しいのでしょうか。 Excelを持っていない人がゲームをしても問題ないかとか、読み込みが非常に重いとか心配しています。
- 410 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 22:46:09 ]
- ExcelがインストールされていないPCだとCreateInstanceが失敗する。
少なくともそこのエラーチェックだけはきちんとしておけ。
- 411 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 22:53:35 ]
- >>408
ビットフィールド使えよ
- 412 名前:155 mailto:sage [2007/07/26(木) 22:58:41 ]
- >>410
おろ、ということはユーザにExcelデータを読み込ますようなゲームは作るべきではないということでしょうか。 検索しても解説しているサイトが中々見当たらないのはそのためか・・orz
- 413 名前:デフォルトの名無しさん [2007/07/26(木) 23:18:28 ]
- 412
CSVやテキストや独自バイナリでまず作っておけよ
- 414 名前:デフォルトの名無しさん [2007/07/26(木) 23:19:08 ]
- なぜエクセルにこだわるのかがわからない
動作が鈍くなるだろ
- 415 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 23:22:40 ]
- おかげで騒ぎまくったお
⊂⌒ヽ (⌒⊃ \ \ /⌒ヽ / / ⊂二二二( ^ω^)ニニ二⊃ \ \_∩_/ / ( (::)(::) ) ヽ_,*、_ノ ブーン /// ///
- 416 名前:155 mailto:sage [2007/07/26(木) 23:34:05 ]
- >>413-414
パーツのステータス管理(耐久度とか説明文)をExcelを使えば編集がしやすいかと思って実装しようとしています。 なるほど、エクセルから独自形式へのコンバートをこちらでしてしまえば、 ユーザは独自形式を読み込むだけなのでExcelが無いと動かないような症状にはなりませんね。
- 417 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 23:37:11 ]
- >>416
その「編集」をするのはユーザなのか、お前さんなのか、プログラムなのか、どれだ ユーザに編集させるんなら、Excelがインストールされているのが当然前提になる 自分なら、CSVなりTSVなりプログラムで扱いやすい形式でセーブしてやれば いいだろ 読み込む仕事はずっと楽で高速だ プログラムが内部的に扱うだけなら、バイナリでもいい
- 418 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 01:16:53 ]
- >>416
Excelからの読み込みようデータでテキスト(もしくはバイナリ)出力を VBAで書いてもいいんじゃない? セルの値をファイルに出力するくらいならVB未経験でも ちょっと勉強すればできるようになると思うよ。
- 419 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 01:44:55 ]
- Excelのバージョンで動き違うし改ページ周り操作したら落ちるしデータ転送遅いし
xlsを書き出す必要がある時以外は使いたくないな
- 420 名前:デフォルトの名無しさん [2007/07/27(金) 09:08:25 ]
- VC2005 Expressを使っています。
一つのプロジェクトxでa.c, a.hを作成してそれらは同一フォルダのstdafx.hを読み込んでいます。 このa.cとa.hをそのままに、プロジェクトyでつかいたかったのでプロジェクトyにドラッグアンドドロップしてプロジェクトに追加して、 プロジェクトy特有のstdafx.hを作成してビルドすれば、 プロジェクトxではプロジェクトx内のstdafx.hを利用して、プロジェクトyではプロジェクトy内のstdafx.hを利用すると夢を見たのですが、 どちらのプロジェクトのa.cもプロジェクトxのstdafx.hを読んでいるようです。 include文に相対パスを書いておけば上のような利用法ができるとおもっていたのですが何とかする方法を教えてもらえないでしょうか。 a.cとa.hに手を加えずに双方のプロジェクトで使えるようにしたいのです。 具体的にはプロジェクトxはダイナミックリンクライブラリのプロジェクトなので#define DLLEXPORT __declspec(dllexport)をつけたくて、 プロジェクトyはスタティックリンクライブラリのプロジェクトなので、#define DLLEXPORT __noopをつけたいのです。
- 421 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 09:26:18 ]
- stdafx.hはプリコンパイルヘッダーのためにあるんだから
共通のものを読まないと意味が無いんだよ。 stdafx.hの中で差があるものを別のヘッダかソースに入れてしまえば。 もしくはプリコンパイルヘッダーの使用をやめてstdafx.hのインクルード自体やめるとか
|

|