【初心者歓迎】C/C++室 Ver.37【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.37【環境依存OK】 - 暇つぶし2ch446:デフォルトの名無しさん
07/05/21 21:50:24
>>442
Win32ならFindFirstFile/FindNextFile

447:デフォルトの名無しさん
07/05/21 21:51:59
>>442
Win32APIを使うならFindFirstFile、FindNextFile、FindClose。

448:デフォルトの名無しさん
07/05/21 21:52:44
>>445-446
式は来月あたりですか?

449:デフォルトの名無しさん
07/05/21 21:53:19
<boost/filesystem/operations.hpp>あたり

450:デフォルトの名無しさん
07/05/21 21:53:51
421です。
いただいたヒントとatoiで修正することができました。
どうもありがとうございました。


451:デフォルトの名無しさん
07/05/21 21:57:59
442です

ありがとうございます。
環境はWindowsなので、FindFirstFileでいいようです。
例になるコードもぐぐれたので、なんとかがんばってみます!

452:デフォルトの名無しさん
07/05/21 22:01:04
>>439-441
boost::bind なら↓でおk

boost::bind(&Foo::func, _1)

453:デフォルトの名無しさん
07/05/21 23:47:50
>448
全然一致してないじゃん

454:デフォルトの名無しさん
07/05/21 23:57:08
tr1::bindでもいいよ

455:デフォルトの名無しさん
07/05/22 02:41:30
二次関数(y = a x^2+ bx +c)でxがx1 <= x <= x2のときの最大値と最小値(そのときのxの値も含めて)を求めるプログラムを作成せよ。
ここでa,b,cは整数、x1,x2は浮動小数とする。

数学の発展課題として出されたのですがさっぱり分かりません。
どなたか手を差し伸べてください・・・orz

456:デフォルトの名無しさん
07/05/22 02:43:42
>>455 丸投げは宿題スレ逝け。

457:デフォルトの名無しさん
07/05/22 03:05:43
C++の質問なのですが、
配列:123224があるとして、2の要素数だけを取り払い、前詰めをして
配列:134にするには、どのような方法がありますか?
お願いします。

458:457
07/05/22 03:13:32
Deleteを使わない方法がありましたら、それをお願いします

459:デフォルトの名無しさん
07/05/22 03:21:13
Deleteというのが何なのか知らんが、
std::vectorと共通アルゴリズム使えば一発じゃないか?

460:デフォルトの名無しさん
07/05/22 03:21:35
>>457-458
配列って std::vector のことか?
結果の要素数が変わってるんで、組み込み配列じゃないんだろう。
だったら remove + erase でいい。

"Delete" って delete 演算子のことか?
new を使ってないなら使うもクソもねーよ。

461:デフォルトの名無しさん
07/05/22 03:31:02
>457

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int main(){
int array[] = {1,2,3,2,2,4};
vector<int> vi(array, array+6);

vi.erase(remove(vi.begin(), vi.end(), 2), vi.end());

for(int i=0; i<vi.size(); i++)
cout << vi[i] << ' ';
cout << endl;

return 0;
}

462:デフォルトの名無しさん
07/05/22 05:55:58
>>368です

>>389 >>420 >>425 >>427 さん、レスありがとうございます。
素因数分解を使うと手っ取り早く約数が計算できるのですね。
後でwikipediaを見て知りました(汗
あと、本探索部分もいらないループしてましたし。
プログラムを書いていただいたお二方もありがとうございました。
>>427さんのプログラムだと2秒で終わりました!
素因数分解の方法とか、ためになります。(まだ、ちゃんと読めてないですけど)
ありがとうございました。

463:デフォルトの名無しさん
07/05/22 06:22:51
うーむ・・こんなにも差が出るもんなんやね・・
アルゴリズムの大切さをあらためて実感した。

464:デフォルトの名無しさん
07/05/22 07:48:37
>>462
中学で習うよ・・・

465:デフォルトの名無しさん
07/05/22 08:07:40
>>462
約数の和

60 の場合
60= 2^2 * 3^1 * 5^1
(60の約数の和)=(2^0 + 2^1 + 2^2)*(3^0 + 3^1)*(5^0 + 5^1)
=(1+2+4)*(1+3)*(1+5)=168

>>427 のアルゴリズム
60=2^2*15
(60の約数の和)=(15の約数の和)*(2^0 + 2^1 + 2^2)
=(15の約数の和)*(2^3-1)/(2-1)

>>428 のアルゴリズム
60=2^2*15
(60の約数の和)=(15の約数の和)*(2^0 + 2^1 + 2^2)
=(15の約数の和)*(2^0 + 2^1) + (15の約数の和)*2^2
=(30の約数の和) + (15の約数の和)*2^2

466:デフォルトの名無しさん
07/05/22 12:56:16
C++で値クラスを作る際に、Cスタイルの構造体を選択した場合、
コンストラクタのオーバーロード
(引数なしでメンバは全てゼロ、または指定引数で初期化といった動作をさせるため)
すること、さらに考えを進めて振る舞い、つまりメンバ関数を持たせることって良くないんでしょうか?

467:デフォルトの名無しさん
07/05/22 13:02:16
凸包を調べるためにQhullを使ってるんだけど、頂点配列points[i]から
凸包の外周要素に使われた点の添字を抜き出す方法って無い?

色々やってみたけど、外周要素の点の座標しかもってこれないです。

468:デフォルトの名無しさん
07/05/22 13:03:45
構造体にメンバ関数を持たせることに対する文法的な質問?
それとも比較的どうでもいいコーディングスタイル的な質問?

前者なら、文法上可能。
classとstructはデフォルトのアクセス修飾が異なるだけでなんら問題なし。

後者なら、好きにすれば?としか言いようがない。

469:デフォルトの名無しさん
07/05/22 13:15:52
|は演算子ですか?こういう使い方みるんですが

a(x|y,z)

470:デフォルトの名無しさん
07/05/22 13:16:26
入門書に書いてあるような事を聞かない。

471:デフォルトの名無しさん
07/05/22 13:18:57
じゃあスレタイに初心者歓迎なんてつけないでください

472:デフォルトの名無しさん
07/05/22 13:26:26
読んでも分からない事ならいいが、
読めば誰でも必ず分かる事を聞かれても困る。

473:デフォルトの名無しさん
07/05/22 13:28:11
1か0かって書いてたんで変数1か0しか無意味ということですか?

474:デフォルトの名無しさん
07/05/22 13:28:27
演算子ですよ

475:デフォルトの名無しさん
07/05/22 13:29:34
x|y ビットOR
x||y 論理演算OR

476:デフォルトの名無しさん
07/05/22 13:30:59
ビットOR の使いかたがわかりません

477:デフォルトの名無しさん
07/05/22 13:33:47
各ビットでORが必要になったら使う
必要でなかったら使わない

478:デフォルトの名無しさん
07/05/22 13:34:01
y==11001010
x==00110101

z=x|y

z==11111111

479:デフォルトの名無しさん
07/05/22 13:34:09
たとえば
a = 99|137;//aには235が代入される
01100011 (99)
10001001 (137)
---------ビットOR
11101011 (235)


480:デフォルトの名無しさん
07/05/22 13:41:08
こんなのにわざわざ…
おまいら親切だな

>>471
モノには順序(ry

481:デフォルトの名無しさん
07/05/22 13:59:50
うん、俺今ちょっと気分いいんだ。

482:デフォルトの名無しさん
07/05/22 14:06:12
惚れました(*´ェ`*)

483:デフォルトの名無しさん
07/05/22 14:15:46
誰かcygwinでwhileを使った九九のプログラムの作り方を教えてくれませんか(´д`)

484:デフォルトの名無しさん
07/05/22 14:17:27
宿題は自分で。

485:デフォルトの名無しさん
07/05/22 16:34:09
URLリンク(www.uploda.org)

リスト云々覚えようかとこんなの書いてみたんですが、下から10行目辺りのreallocの所で、強制終了してしまいます。
どこが悪いんでしょうか・・・・誰か教えて下さい

486:デフォルトの名無しさん
07/05/22 16:41:48
ポインタを初期化もして無いくせにrealloc使うな。
どうしても使いたきゃNULLで初期化してから使え。

487:デフォルトの名無しさん
07/05/22 16:44:04
つーか、
struct late data[20];//とりあえず、20個分
struct late *memp=data;//↑のデータの最初のアドレスをmempに
配列のアドレスで初期化しとる。

初期化しなければ、グローバル変数だからNULLが入るんでうまくうごいたのにね。

488:デフォルトの名無しさん
07/05/22 16:47:11
reallocの動作を勘違いしてる

489:485
07/05/22 16:52:22
む・・・良く分かんない・・・・・・orz
reallocの一つ目の引数には、中身が入ったポインタを指定してはいけないって事ですか?

490:デフォルトの名無しさん
07/05/22 16:54:10
>>489
一つ目の引数は必ずmallocやreallocで取得したポインタ(か、NULL)
同じ位置で指定したサイズが取得できないと、別の場所でallocしなおして
最初のやつはfreeされる。

491:485
07/05/22 16:57:11
>>490
あ、分かりました。
struct late data[20];//とりあえず、30個分
struct late *memp=data;//↑のデータの最初のアドレスをmempに
↑の部分を

struct late *memp;
memp = (struct late*)malloc((sizeof(struct late)) * 20);
こうすればいいんですよね?

492:デフォルトの名無しさん
07/05/22 16:59:54
>>491
まあそういうこと。
そして、reallocするということは、それが常に同じアドレスとは限らない。

493:485
07/05/22 17:01:35
>>492
ありがとうございました。物凄く勘違いしてたっぽいですねorz
勉強になりました。

494:デフォルトの名無しさん
07/05/22 17:09:37
>>466
C++/CLIでのことだったらそっちのスレで聞いたほうが的確な助言がくると思うぞ。

495:デフォルトの名無しさん
07/05/22 21:28:41
URLリンク(www.heat-devil.com)
非常に初心者な質問なのですが、
ファイル分割の勉強中で↑な感じで3つに分けて
borland C/C++コンパイラでbcc32 a.cpp hoge.cpp hoge.hとやったら
『 hoge.h 1: 宣言の構文エラー』と出るのですが、
hoge.hのどこが間違っているのか分からないのでどなたか教えてくださいorz

496:デフォルトの名無しさん
07/05/22 21:50:28
>>495
なんで hoge.h がエラー扱いされてしまうのかは俺も少々不可解だけど、

  bcc32 a.cpp hoge.cpp

でおk。hoge.h は a.cpp と hoge.cpp から include される対象に
過ぎないからコンパイルする必要は無し。

497:デフォルトの名無しさん
07/05/22 21:57:29
.hをコンパイルすると、C++じゃなくて、Cとして
コンパイルされるんじゃないの。

498:デフォルトの名無しさん
07/05/22 21:59:58
ああ、なるほど。

499:デフォルトの名無しさん
07/05/22 22:16:23
>>496-497
うわぁああ出来ました!!
そうか、iostreamとかもコンパイルの時書かないですしね><
分割するの初めてだったからファイルの書き方間違っているのかと
今日一日中ネットや本で調べたけど分からなかったのでホントに嬉しいです・・・(;△;)
まさかそっちのやり方が間違っていたとは。
ありがとう、本当にありがとうございます><


500:デフォルトの名無しさん
07/05/22 22:18:59
(;△;)

501:デフォルトの名無しさん
07/05/22 22:49:01
オーム社「C言語によるプログラミング[応用編]」(第一版)
サンプルプログラム sample2 myform.c

をそのまま写して、コンパイルしたところエラーがでました。
環境は、
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) です。

エラー出力は、
myform.c:57: error: two or more data types in declaration specifiers
myform.c:104: error: conflicting types for �。GetArg�「
myform.c:57: error: previous declaration of �。GetArg�「 was here
myform.c:256: error: conflicting types for �。LineAdd�「
myform.c:58: error: previous declaration of �。LineAdd�「 was here

int GetArg( int, char *[], int *, int *, int *, int *, char [] );
int GetArg(
int argc,
char *argv[],
int *column, /* カラム数 */
int *line, /* 行数 */
int *upper, /* 上余白行数 */
int *left, /* 左余白行数 */
char file[] /* 入力ファイル */
)

int *LineAdd( char *, char *, int );
char *LineAdd( char *to_buff, char *from_buff, int num )


502:501
07/05/22 22:51:35
このエラーの原因を知りたいのですが、
ヒントやポインタをおねがいします。

一番下のこの部分は無視してください。
int *LineAdd( char *, char *, int );
char *LineAdd( char *to_buff, char *from_buff, int num )
_

503:デフォルトの名無しさん
07/05/22 22:52:40
どこが57行目?

504:デフォルトの名無しさん
07/05/22 22:56:31
>>501
セミコロン

505:デフォルトの名無しさん
07/05/22 23:02:57
int GetArg( int, char *[], int *, int *, int *, int *, char [] );
int GetArg(
int argc,
char *argv[],
int *column, /* カラム数 */
int *line, /* 行数 */
int *upper, /* 上余白行数 */
int *left, /* 左余白行数 */
char file[] /* 入力ファイル */
){
return 0;
}
とりあえず、gcc 3.4.6にかけてみたけど、エラーなんて
でなかったぜよ。

506:501
07/05/22 23:03:33
57行目
int GetArg( int, char *[], int *, int *, int *, int *, char [] );

104行目
int GetArg(
int argc,
char *argv[],
int *column, /* カラム数 */
int *line, /* 行数 */
int *upper, /* 上余白行数 */
int *left, /* 左余白行数 */
char file[] /* 入力ファイル */
)

です。
myform.c:256: error: conflicting types for �。LineAdd�「
myform.c:58: error: previous declaration of �。LineAdd�「 was here
は無視してください。

507:501
07/05/22 23:06:50
>>504
int GetArg( int, char *[], int *, int *, int *, int *, char [] );
^^^

このセミコロンのことでしょうか?

>>505
わざわざコンパイルしてくださって、ありがとうございます。
お手数かけてすいません。
これから、自分の環境でその部分だけコンパイルしてみます。

508:501
07/05/22 23:11:45
>>505をコンパイルしたところ、自分の環境でもエラーはでませんでした。

ほかに GetArg関数に関係があるところは、メイン関数でよびだしたこの場所だと思います。
なにかまちがえたことをしているでしょうか。

int main ( int argc , char *argv[] )
{
int column, line, upper, left;
char file[SMALL_BUFF_SIZE];
int result;

/* main引数取得 */
result = GetArg( argc, argv, &column, &line, &upper, &left, file );


509:デフォルトの名無しさん
07/05/22 23:46:33
「基本クラスにあるprotectedなメンバ関数を、
 派生クラスで名前も処理も変えず、publicに昇格する」 というのは、

class base {
protected:
  int hoge() { ... }
};

class derived : public base {
public:
  int hoge() { return this->base::hoge(); }
};

こんな感じになりますか?
それとも、もっと簡単にできますか?

510:デフォルトの名無しさん
07/05/23 00:04:48
名前も処理も変えないんだったらオーバーライドする意味無いやん
さらに言えばprotectedにする意味無いやんhoge()はpublicにすりゃいいやん
って思ったんですがどうでしょう?

511:501
07/05/23 00:09:27
エラーの原因がわかりました。
57行目の int GetArg( int, char *[], int *, int *, int *, int *, char [] );
の前にある、

enum
{
NORMAL_END, /* 0 */
USAGE_ERROR, /* 1 */
FILE_ERROR /* 2 */
};
^^^^
このセミコロンが欠けていました。
>>504さんのいうとおりでした。

おさわがせいたしまして、どうもすいませんでした。
レスくださった方たち、ありがとうございました。


512:デフォルトの名無しさん
07/05/23 00:10:16
>>510
尤もだ。

513:デフォルトの名無しさん
07/05/23 00:11:15
using base::hoge;
でよくね?

514:デフォルトの名無しさん
07/05/23 12:47:58
C++初心者で申し訳ないのですが、質問させてください。
↓のページのSFMTを、C++プログラムから利用したいのですがうまくいきません。
URLリンク(www.math.sci.hiroshima-u.ac.jp)

URLリンク(www.math.sci.hiroshima-u.ac.jp)
Linux上でg++(ver4.20)でコンパイルしてみると、sample2-1や2-2が詰まります。
ヘッダでinline宣言してある関数が"xxx is used but never defined"と警告され、
リンク時にエラーになります。
sample2-3のようにcファイルをincludeする、またはgccならばコンパイルできますが
c++のソースから呼び出さねばならない場合、どうすればよいのでしょうか?
c++用ライブラリ等も紹介されてますが、呼び出し側プログラムの書き換えを最小限に
したいので、inline関連のオプション追加で解決してくれるなら、と思っています。
よろしくお願いします。

515:デフォルトの名無しさん
07/05/23 13:03:31
>>514
よく見てないけどこんなのは?
extern "C" {
#include "SFMT.h"
}


516:デフォルトの名無しさん
07/05/23 13:33:50
#include<iostream>
#inlucde<iostream.h>

C++でのこの2つって何か違いがあるんですか?

517:デフォルトの名無しさん
07/05/23 13:41:38
はい。

518:デフォルトの名無しさん
07/05/23 13:41:54
後者は過去の遺産。

519:デフォルトの名無しさん
07/05/23 13:49:38
積極的に.h無しが推奨される理由があるなら教えて頂きたいです><
Cの勉強始めた時から.h有りで書いていて慣れていたので。

520:デフォルトの名無しさん
07/05/23 13:53:59
規格に書いてあるから。

521:デフォルトの名無しさん
07/05/23 13:55:57
違いがあるから

522:デフォルトの名無しさん
07/05/23 13:56:20
iostream.h の方は std 名前空間に入ってないから。

523:デフォルトの名無しさん
07/05/23 14:21:06
>>516
iostream.hの方が入出力が速い処理系があります(VC6とかVC6とかVC6とか)。
でも既に古いC++です。

524:デフォルトの名無しさん
07/05/23 14:36:13
>>522
し、正直よく分からないけどあなた様のレスのコピペを保存して
賢くなったら読み返して理解してみます><
>>523
ありがとうございます。
新しい処理系だと.h無しの方が処理が速いんですね。
参考になりました><

525:デフォルトの名無しさん
07/05/23 15:04:09
>>524
>518とか>520も無視すんなや。ちゃんとメモしとき。
それからついでに。
>新しい処理系だと.h無しの方が処理が速いんですね。
誰もそんなこと書いていない。

526:デフォルトの名無しさん
07/05/23 15:18:03
>>525
いや、2chでよくあるYES/NOレスみたいな感じで
スルーか微妙だったから具体的に教えてくれた人にレスしたんだ。
もし気を悪くしたらごめんです。
それと昔は.h有りの方が速かったけど今は>>522さんが言った理由な感じで
.h無しの方が良いから処理速度は.h無しでも変わらなくなったってことかな?
なんだか分かったような分かってないようなだけど突っ込んでくれてありがとう><

527:デフォルトの名無しさん
07/05/23 15:40:43
処理速度なんて関係ない。
要は.h有りは古い規格で、今は.h無しが標準ということ。
実際VC++では2003あたりから標準に則ってiostream.hは提供されなくなった。

528:デフォルトの名無しさん
07/05/23 15:49:52
礼儀のなってない自称初心者ほど嫌われるものはない。

529:デフォルトの名無しさん
07/05/23 16:10:08
>>527
つまりその名前空間云々で.h無しの方が良くて、
その規格に合わせて処理系も変わってきたから.h無しが推奨されると。
という把握をしてみました。
とりあえず名前空間云々を可及的速やかに勉強してみます><

>>528
うん、なんだかごめんです。
「規格だから」「過去の遺産」「違いがあるから」的なのじゃなくて
「どうしてそういう規格でどう違いがあって」的な理由を聞きたくて
「うん」とか表面的な答えの人は2chではあまりちゃんと答えてくれない
経験則から他の人にだけレスしてしまった。
気を悪くしていたら反省している。


530:デフォルトの名無しさん
07/05/23 16:19:34
他の板には余りないこの板の特徴かも知れんが、
「答えだけ書くから後は自分で調べろ」的なパターンかもね。

兎にも角にも>529は「書いてあるものを読み」、「書かれてないことを読まない」ようにしないとな。

531:デフォルトの名無しさん
07/05/23 16:33:20
自分で答えを決め付けてから読むから
回答者の意図なんて全然読み取れてない

532:デフォルトの名無しさん
07/05/23 16:45:07
>>531
こんだけ反省してるって言ってるんだから、
流石にいい加減しつこいというか。
質問者だけにやたら厳しいが仮にも初心者歓迎謳ってるんだから
回答者にもある程度誘導的な姿勢は必要だとも思うし。

533:デフォルトの名無しさん
07/05/23 16:46:04
いつまで苛めてんだ。カルシウム摂れ。

534:デフォルトの名無しさん
07/05/23 16:47:36
いつまでもいいんだ。カルシウムくれ。

535:デフォルトの名無しさん
07/05/23 16:49:06
煮干が美味いんだ。昆布でダシは邪道

536:デフォルトの名無しさん
07/05/23 17:07:43
質問です

最近C++(つかプログラミング)を始めた者です
入門書「やさしいC++」を読んで、一通り簡単な文法とかは理解したんですけど、
この板に出てくるソースによくある、関数の種類とかについては全く分かりません。
そろそろコンソールアプリケーションじゃなくて、ウインドウのソフトも作ってみたいと思うんですが、
どうやら、関数をいっぱい知ってなきゃ作れないらしいですね。

これから自分はどんな本,どんなサイトを見て勉強していくべきなのでしょうか?

537:デフォルトの名無しさん
07/05/23 17:46:03
やれやれ。そろそろネタばらしでもしてやるか。

昔はインクルードするものと言ったらヘッダーファイルで当然だったのだが
果たしてヘッダーファイルが実在する必要があるのか、
それを規格で要求するべきなのかと言う議論があった。
そのためにいかにもファイルの拡張子っぽい.hをなくし、
コンパイラは標準ライブラリのヘッダーをインクルードしている部分を
通常のインクルード処理ではなく、対応する標準関数その他を有効にする
単なるスイッチとして使うことを許すようにした。

538:デフォルトの名無しさん
07/05/23 17:55:49
>>536
MSDN

539:デフォルトの名無しさん
07/05/23 18:01:54
質問です。
typedef float Vector3[3];
なんてtypedefをしたんだけど。
vector<Vector3> vec;
vec.resize(10);
が通らない。
vector<float> vec;
vec.resize(10);
なら通るんだけど。
どうして?

540:デフォルトの名無しさん
07/05/23 18:03:51
>>539
配列にはそのまま代入ができないので、無理。

541:デフォルトの名無しさん
07/05/23 19:27:17
vectorが内部で何やってるか考えてみようぜ

542:デフォルトの名無しさん
07/05/23 20:54:27
ここで聞いて良いのか分からないのですが、間違っていたらすみませんが誘導お願いします
VC++の初心者質問なんですがCOMインターフェイス使って#import する場合
例えば、エクセルなんかの場合
##import "C:\Program Files\Microsoft Office\Office\excel9.olb"
rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces


とかやるんですが、これはビルドしたときにexeに組み込まれちゃうんでしょうか?
もしくはexeが実行したときにオブジェクトライブラリが読み込まれるのでしょうか?


543:デフォルトの名無しさん
07/05/23 21:08:11
>>542
excel9.olbの内容はコンパイル時にのみ参照される。
実行時にexcel9.olbは不要。

544:デフォルトの名無しさん
07/05/23 21:25:18
>>539
vector<vector<float> > vec; でいいじゃん
resize()は要素分行う必要があるので面倒だけど

545:デフォルトの名無しさん
07/05/23 21:29:35
>>543
ありがとうございます


546:デフォルトの名無しさん
07/05/23 21:39:56
>>544
struct Vector3 { float vec[3]; };
vector<Vector3> vec;
の方がいいんじゃないか

547:デフォルトの名無しさん
07/05/23 21:54:57
>>539

struct Vector3 {
  float a;
  float b;
  float c;
};

vector<Vector3> vec;

548:デフォルトの名無しさん
07/05/23 22:01:34
abcよりもxyzのほうが的確だと思う

549:デフォルトの名無しさん
07/05/23 22:03:38
そんなことはどうでもいいと思う

550:デフォルトの名無しさん
07/05/23 22:18:21
M$のABC構造体とかふざけた名前のやつを思い出した

551:デフォルトの名無しさん
07/05/23 22:21:55
フォントの幅だっけ?

552:デフォルトの名無しさん
07/05/24 09:39:23
ABCD包囲網だな。CとDがうぜえ

553:デフォルトの名無しさん
07/05/24 19:01:31
VC++2003でexeのプロジェクトを別のexeで参照設定する事はできますか??

554:デフォルトの名無しさん
07/05/24 19:30:29
---------------------------
Microsoft Development Environment
---------------------------
'○×△□.exe' への参照を追加できませんでした。 これは有効なアセンブリまたは
COM コンポーネントではありません。拡張子 'dll' を持つアセンブリまたは COM
コンポーネントのみを参照することができます。ファイルがアクセス可能で、有効な
アセンブリまたは COM コンポーネントであることを確認してください。
---------------------------
OK   
---------------------------


555:デフォルトの名無しさん
07/05/24 19:52:25
COMコンポーネントじゃないので、できませんという事ですね。
ありがとうございます><

556:デフォルトの名無しさん
07/05/24 19:55:02
( ゚д゚)ポカーン

557:デフォルトの名無しさん
07/05/24 19:58:21
>>556
>>555とは別人だけど、違うの?
COMコンポーネントかDLLしか参照できないってことじゃないの……?

558:デフォルトの名無しさん
07/05/24 20:46:00
VC++2003で exeのプロジェクト を 別のexeで 参照設定する事
謎が多いな。 make の依存関係だけなのか、
別のexe が、元 exe をリンケージするのか

559:557
07/05/24 21:02:04
>>558
それは自分も思った。
ShellExecuteとかそのたぐいでいいじゃんてね。

でも、exeの参照の可否と、その有用性はとりあえず関係なくね?

560:デフォルトの名無しさん
07/05/24 21:19:31
>>557
exeでも参照できるよ







.NET Frameworkならね

561:560
07/05/24 21:22:02
ていうかVC初心者スレ池

562:デフォルトの名無しさん
07/05/24 23:26:48
「構造体とクラスは無関係」という人をよく見かけるけど、
構造体からヒントを得て、クラスという概念を作ったわけではないの?
構造体使ってて、あー、こういう風にしてーなー、と思ったところを、
クラスという形で実現したのであれば、
無関係ってちと言い過ぎじゃないかなー、とか思うんだけど。

563:デフォルトの名無しさん
07/05/24 23:29:18
switch(event)
{
case1:
foo;
case2:
bar;
default: ←100行目
}

if( !p1)
{
・・・
GOTO Test;

Test: ←100行目
}
gcc version 4.1.2 で、
上のように、default: や Test: の後が空行のまま } がくると、次のようなエラーがでます。

handle.c:100: error: label at end of compound statement

これは仕様なのでしょうか?
default: は消し、 Test: は {}の外にうつして回避したのですが、それで正しいでしょうか。
アドバイス、よろしくお願いします。

564:デフォルトの名無しさん
07/05/24 23:31:09
>>563
ラベルの後には文が必要です。
;(セミコロン)だけでも付けましょう。

565:563
07/05/24 23:39:39
>>564
セミコロンをつけたところ、コンパイルがとおりました。
どうもありがとうございました。

566:デフォルトの名無しさん
07/05/25 00:35:43
URLリンク(www.uploda.org)
この選択ソートのプログラムをswap関数を用いて作り変えたいと思い、
下記のようにしてみたんですが、うまくいきません。
URLリンク(www.uploda.org)

何が悪いのか教えてください。お願いします。

567:デフォルトの名無しさん
07/05/25 00:37:39
swapに渡されるのは引数のコピーだ

swap(int* a,int* b);

568:デフォルトの名無しさん
07/05/25 00:56:53
色々やってみましたが、分かりませんでした。
よろしければ正解例を示していただけないでしょうか。
お願いします。

569:デフォルトの名無しさん
07/05/25 01:02:35
よくみたら内部で配列を交換してんのか

つうかコレコンパイルできなくね?

面倒だからとりあえず
int i,j,k,work,num,a[100];
をmainの外に出せば動くんじゃね

570:デフォルトの名無しさん
07/05/25 01:06:42
>>569
はい、566の下のソースはコンパイルできていません。
mainの外に出してもできないようです。

571:デフォルトの名無しさん
07/05/25 01:19:43
mainの外に出したら動いたわけだが、、、

572:デフォルトの名無しさん
07/05/25 01:45:14
>>570URLリンク(www.uploda.org)

573:デフォルトの名無しさん
07/05/25 05:35:49
mciSendStringでnotify(+MCI_NOTIFY_SUCCESSFUL)で
ループ再生を行っている時、
まれにループに入るタイミングでループされず、
永遠とnotifyが投げられビジー状態になってしまいます。

100回に1回も起こらないので、原因は良く分かりませんが、
もしかしたら、曲を変えようと前の曲をstop、closeし、
新しい曲をopen、playするのと同じぐらいのタイミングで
notifyが来た時に起きているのかもしれません。

対策方法などがありましたら、教えてください。

574:デフォルトの名無しさん
07/05/25 06:26:54
再生するファイルの種類は何かね?あとOS

575:デフォルトの名無しさん
07/05/25 08:12:19
×永遠と
○延々と

576:デフォルトの名無しさん
07/05/25 09:01:26
>>562
C++のクラスはSimulaからのインスパイヤ

577:573
07/05/25 09:22:55
>>574
ファイルはmidi、OSは9xです。

>>575
素でやってしまいました・・

578:573
07/05/25 09:34:53
後、もちろんmciSendStringの戻り値は0(成功)です。
音楽を変えるためstop、closeした後、
前の曲のnotifyが来てしまいおかしくなるのかもしれません。

notifyが連続で来る事は普通は無いので、
その時は、playをsendしないようにする方法とかもあると思うんですけど。

579:デフォルトの名無しさん
07/05/25 10:20:06
stringはあまりよくないと聞いたことがあるのですが
charの配列を使うよりstringを使ったほうがいいですよね?

580:566
07/05/25 10:50:50
>>572
ありがとうございました。
保存したので、もう消していただいてもかまいません。

581:デフォルトの名無しさん
07/05/25 11:06:24
>>579
好きにすればいいと思うよ。
配列とnew/delete演算子と
テンプレートクラスの勉強が済んでいる前提で。

582:デフォルトの名無しさん
07/05/25 11:54:11
>>579
よくない理由を問い詰めておけ。

583:デフォルトの名無しさん
07/05/25 12:21:45
1方向Listを作っています。参考書等で調べたのですが
削除関数の部分をどう記述すれば良いのか分からないので教えてください。
URLリンク(uproda11.2ch-library.com)

584:デフォルトの名無しさん
07/05/25 12:30:56
>>583
まずは自分で書けよ。今のソースじゃどういう動作にしたいのかもわからん。

585:デフォルトの名無しさん
07/05/25 14:03:27
もうソース見えん。

削除ってのはさ、
A→B→C のBを消すときにAの指してる先をCにしてBを消せばいいわけだ。
でも片方向でBの前を探すのは面倒だから、Bが指してるCの内容を
そっくりBにコピーしてCを消す、というトリックが使える場合があるぞ。

586:デフォルトの名無しさん
07/05/25 15:20:22
mfcについて教えてください。

通信受信プログラムで受信データをエディットコントロール(複数行表示)に表示しているのですが、
以下のコードでは、エディットコントロールに文字列を追加する際に必ずスクロールされてしまいます。
スクロールされない方法を教えてください。

int iLen = edit->GetWindowTextLength();
edit->SetSel(iLen, iLen);
edit->ReplaceSel("Hello\n");

WinXP & Visual Studio 2003 & mfc7です。

587:気まぐれアナスイ
07/05/25 15:31:32
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

588:気まぐれアナスイ
07/05/25 15:37:31
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

589:デフォルトの名無しさん
07/05/25 15:38:59
>>586
MFCスレへどうぞ。
つーか、LineScrollで元のとこに戻せばいいんでないの?

590:デフォルトの名無しさん
07/05/25 16:24:49
>>589
レスありがとうございます。

LineScrollで戻すと、1行書くごとに「下へスクロール→上へスクロール」となり、上下にスクロールが発生してしまい
とても見づらくなってしまうのです。

「スクロールなし」でエディットコントロールに文字列を追加できないものでしょうか?

591:気まぐれアナスイ
07/05/25 16:57:37
!(ΦyΦ+){???}

『のだめカンタービレ』

592:気まぐれアナスイ
07/05/25 16:58:53
!(ΦyΦ+){???}

『のだめカンタービレ』

593:デフォルトの名無しさん
07/05/25 17:12:41
初めまして、VC++のC++/CLIのフォームアプリケーションについて質問があります。

今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?

また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?

594:つ[SetRedraw()]
07/05/25 17:13:25
>>590
誘導されているんだから更に質問するなよ。

595:デフォルトの名無しさん
07/05/25 17:14:57
>>593
C++/CLIは最早C++でさえないので該当スレへ。つーか、プロパティだか属性だか知らんが編集可否とかカーサ表示有無とかないの?

596:デフォルトの名無しさん
07/05/25 17:21:17
>>595
それが無くて困ってますorz

該当スレ = C++/CLI について語ろうぜ Part2
で質問してもいつもスルーされてしまうんですorz

597:デフォルトの名無しさん
07/05/25 17:23:06
そりゃ、明らかにC++/CLIの話題じゃなくて、.NET FrameworkなりCLRなりの話題だもん。

598:デフォルトの名無しさん
07/05/25 17:28:00
自分でスレ立てるしかないですかね?

599:デフォルトの名無しさん
07/05/25 17:36:19
>>598
やめれ。

600:デフォルトの名無しさん
07/05/25 17:37:26
>>598
やめれ。

601:デフォルトの名無しさん
07/05/25 17:40:29
>>598
やめれ。

602:デフォルトの名無しさん
07/05/25 17:40:44
やめときますorz
どこに書き込んでも
>こんな奴がC++出来るんだぜとかいってると思うとため息出るな・・・
とか
>(゚Д゚)
みたいに馬鹿にされますorz

これってそこまで初歩的な質問ですかね?

603:デフォルトの名無しさん
07/05/25 17:59:05
>>602
ヘルプぐらい見ろよ。
MSDNで「TreeViewメンバ」一覧とか見れば、
BeginUpdate ツリー ビューの再描画を無効にします。
とか思いっきり書いてあるだろ。
日本語読めないの?

604:デフォルトの名無しさん
07/05/25 18:00:21
>>602
> そのアプリのテキストボックスには、カーソルが表示されていません。
> どのようにすれば、カーソルを表示させないようにできるのでしょうか?
>
とりあえず、この文面だとカーソルを消したいのか表示させたいのか分からん。
あとこの場合は、マウスの移動とともに表示される矢印のマウスカーソルと、
テキストの間に表示される縦棒の二つの意味にとれるので、
そこも説明する必要あり。

605:デフォルトの名無しさん
07/05/25 18:15:45
>>603
あったんですか(゚Д゚)

>>604
テキストの間に表示される縦棒を消したいです。

606:デフォルトの名無しさん
07/05/25 18:30:52
>>602
スレ違いって指摘されているの判る?
それでも居座るような状態だから馬鹿にされるんだよ。

607:デフォルトの名無しさん
07/05/25 18:54:14
俺はこのスレでC++/CLIを出してきても構わないと思うけどな
まあ答える奴は少ないだろうとも思うけど

602が答えを得られないのは602自身の問題

608:デフォルトの名無しさん
07/05/25 18:58:10
片っ端からマルチかよ。
そりゃ答えてもらえないわけだ。

609:デフォルトの名無しさん
07/05/25 20:36:14
構造体の末尾にパディングを入れてサイズを固定にしたいのですが、

struct hoge {
  int a;
  int *b;
  hoge *c;
  char padding[???];
};

例えば sizeof(hoge) == 16 になるようにしたい場合、??? にはどう書けばいいでしょうか?
16 - offsetof(hoge, padding) とか書ければいいのですが。

610:デフォルトの名無しさん
07/05/25 20:50:08
paddingまでが詰まってる前提なら
16-sizeof(a)+sizeof(b)+sizeof(c) でいいんじゃね

試してないけど

611:デフォルトの名無しさん
07/05/25 20:58:19
16バイトの配列との共用体にするとか

union hoge{
  char size[16];
  
  struct {
    int a;
    int *b;
  };
};


612:デフォルトの名無しさん
07/05/25 21:06:47
テキストに入力できる状態なら
縦棒消すの無理じゃない?

613:デフォルトの名無しさん
07/05/25 23:01:17
なぜなのかよく分かりませんが、LimeChat 2というIRCでチャットをするためのソフトでは、点滅しているカーソルが表示されていないんです

614:デフォルトの名無しさん
07/05/25 23:13:11
キャレット表示されてないと入力編集がものすごく難しくないか?

615:デフォルトの名無しさん
07/05/25 23:14:43
チャットソフトだからログ表示部品と発言入力部品が別なんだろ。
でログ表示部品にキャレット(カーソル)が出てしまうのがウザイと。

616:デフォルトの名無しさん
07/05/25 23:21:29
おまえらどこか一箇所でやれよw

617:デフォルトの名無しさん
07/05/25 23:27:44
ぐぐったらこんなのが引っかかった
BOOL HideCaret(HWND);
つーわけで消したいEditBoxのhwndを放り込んで使ってみよう

618:デフォルトの名無しさん
07/05/26 04:34:05
HideCaret(static_cast<HWND>(this->textBox1->Handle.ToPointer()));
でなんとかキャレットを非表示にできそうです。

しかし、外部シンボル ""extern "C" int __stdcall HideCaret(struct HWND__ *)" (?HideCaret@@$$J14YGHPAUHWND__@@@Z)" は未解決です。
というリンクエラーが出てしまいましたorz

619:デフォルトの名無しさん
07/05/26 06:05:17
>>593=>>602=>>605
.NETの話はVCスレ行けよ
キャレット(カーソル)うんぬんとかWin32APIスレ行けよ

620:デフォルトの名無しさん
07/05/26 08:26:09
>>618
user32.libをリンクしろ

>>619
環境依存ネタOkなスレだからありだろ

621:デフォルトの名無しさん
07/05/26 08:50:12
環境以前にスレ違いなわけだが

622:デフォルトの名無しさん
07/05/26 10:32:12
シフト演算(<< >>)ではなく、ローテートを行いたい場合、どのようにすればよいのでしょうか?

623:デフォルトの名無しさん
07/05/26 10:41:59
左右シフト演算をORで結合、かな。
コンパイラに拠っては、rotに展開されるであろう
組み込み関数とかがあるかもしれないけど。

624:デフォルトの名無しさん
07/05/26 10:49:45
組み込み関数あるね
unsigned long _lrotl(unsigned long value, int shift) 符号なし long 型整数の各ビットを左にローテートします。
unsigned long _lrotr(unsigned long value, int shift) 符号なし long 型整数の各ビットを右にローテートします。
unsigned int _rotl(unsigned int value, int shift) 符号なし整数の各ビットを左にローテートします。
unsigned int _rotr(unsigned int value, int shift) 符号なし整数の各ビットを右にローテートします。


625:デフォルトの名無しさん
07/05/26 11:44:25
>>620さんのおかげで解決しました。ありがとうございました。

>>621
スレ違いなら消えますorz

626:デフォルトの名無しさん
07/05/26 11:55:41
何度もスレ違いって言われてるだろ。
さっさと消えろやこの世からもな!

627:デフォルトの名無しさん
07/05/26 12:15:39
    _、,、
  θ《▼》θ                                  ; ,;从 , ガッ
  ノリ#゚-゚リ)((ニ(ニ(l     チュドーン   ..,  ''"´"''': ; .     、゙,',::、⌒::;.,'."));": ←>>626
  ( ノ つ|_||三三二弌ll============lニlll),,'   . : ;  _,; "   `.、:.(`:'⌒::"`.;`⌒゙":ドカーン
  《ソ|__/|ニ〃l,=l┘               "'' -''''"´    ;;.゛;((:;;`';::,");;";;;))`.;
    し'ノ                              ゛;((:;;`::"`.;`⌒゙);;";;;))`.;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おまえが死ねよ
価値がないのはおまえだろw

628:デフォルトの名無しさん
07/05/26 12:24:24
そもそもCLIってなんですか?なにに使うんですか?

629:デフォルトの名無しさん
07/05/26 12:27:21
>>628
URLリンク(ja.wikipedia.org)

630:デフォルトの名無しさん
07/05/26 12:31:16
.NETプログラミングのことですか?

631:デフォルトの名無しさん
07/05/26 13:03:03
managed C++ とどう違うの?

632:デフォルトの名無しさん
07/05/26 13:29:01
>>630
大体あっている
.NET Frameworkを標準規格化した際の名称がCLIとでも思えばいい

>>631
構文がましになった

633:デフォルトの名無しさん
07/05/26 19:39:54
VS2005EEです。
Wktk(void(*func)(void)) というような関数に
クラスメソッド void cKwsk::Osieru()
のポインタを渡したいのですがC2440エラーでうまくいきません。
どのようにキャストすれば良いのですか?

634:デフォルトの名無しさん
07/05/26 19:44:45
Visual Studio 2005にて、以下のようなコードを書いたのですが

const TCHAR OutBuff[] = _T("D:\\TEST\\アイウエオ.txt\n");
const TCHAR OutFile[] = _T("abc.txt");

_tfopen_s(&fp, OutFile, _T("w+, ccs=UNICODE"));
_fputts(OutBuff, fp);
fclose(fp);

これで出来上がったabc.txtの中身を見ると
D:\TEST\[EOF]

要するにカタカナの「ア」以降出力されません。
これはどうすればうまくいくでしょうか?

環境はVS2005 SP1 WindowsXP SP2
ワイド文字を使用するでコンパイルしています。


635:デフォルトの名無しさん
07/05/26 19:49:39
>>633
そのメンバ関数を静的メンバ関数にすればいい。

636:デフォルトの名無しさん
07/05/26 19:51:15
>>633
キャストできない。
クラスメソッドでない普通の関数を噛ませるか、Wktkの方を変えるしかない。

637:デフォルトの名無しさん
07/05/26 19:52:25
>>634
ロケール

638:634
07/05/26 20:13:49
>>637
うまくいきました。ありがとう。

639:633
07/05/26 20:56:47
静的メンバ関数にすることで対応しました。
レスありがとうございました。

640:デフォルトの名無しさん
07/05/26 21:13:31
誰だよ
>環境以前にスレ違いなわけだが
みたいな糞逝ったのは

641:デフォルトの名無しさん
07/05/27 01:49:39
atlのT2Wを使うにしても、mbstowcs系を使うにしても
マルチバイトで"あいう"っていうのをワイド文字列strに変換したばあい、
str[0] = "あ", str[1] = "い", str[2] = "う"と言うふうにはならないんです
変換前と変換後で文字列が対応するように変換するにはどうしたらいいでしょう?


642:デフォルトの名無しさん
07/05/27 01:55:05
え?なるだろ?
ならないっていうなら、現状どうなってるんだ?

643:デフォルトの名無しさん
07/05/27 01:55:30
すいません、マルチバイトに変換してましたorz
ちゃんとT2W使った上手く変換できました

644:デフォルトの名無しさん
07/05/27 03:37:25
初心者ですが質問にお答えいただけるとうれしいです。
配列に直接機械語を埋めて関数ポインタで実行させたいのですが
よくわかりません。
環境はPentium4、WindowsXP、BorlandC++Compiler。
//ソース
#include <stdio.h>

int main(void)
{
   int (*func)(void);
   const char ch[] = {
      0xb8, 0x45, 0x23, 0x01, 0x00, 0xc3
   };
   func = (int(*)(void))ch;

   printf("%X", (*func)());

   return 0;
}
何かが決定的に間違っているのにちゃんと12345と表示されます。
アセンブリで
mov ax, 123h
ret
と書いてnasmでアセンブルすると
B8 23 01 C3と機械語が吐き出されます。
これをそのままch[]に埋め込んでもエラーで正しく実行されません。
axレジスタって16Bitですよね?なぜか32Bitで補正してやると正しく実行されるんですよね。
きっと、正しくできていると思い込んでいて実際には偶然こうなっただけなのでしょうけど
なぜ、これが出来て、普通にアセンブルして出来た機械語が実行できないのでしょうか?
もしかして、こういう行為自体が土台不可能な話で、今回出来たのはまったくの偶然ということでしょうか?
教えていただけないでしょうか、よろしくお願いします。

645:デフォルトの名無しさん
07/05/27 03:58:41
なんで初心者なのにhackのマネ事してるんだ

646:デフォルトの名無しさん
07/05/27 04:28:36
>>644
C++言語の範疇を逸脱した内容なのでスレ違い。
アセンブラ関連のスレへどうぞ。

647:デフォルトの名無しさん
07/05/27 04:36:01
masm系ならuse32

648:644
07/05/27 04:37:26
>>645
hackといわれてもよくわかりませんが
ただ、興味があったとしか申し上げられません。

>>646
こちらC言語です。どうぞ。
失礼。そうですね。ただCでこういうことが可能かどうかを知りたかっただけでして。
出来るか出来ないかだけでも教えて頂きたいと思っているのです。
あとはアセンブリでも機械語でも自分で調べて何とかしますので。

649:デフォルトの名無しさん
07/05/27 06:09:24
すいませんPGMファイルの読み込みの関数を作っているのですが、
im[j][i]=tempのところで落ちます。どうすればいいですか?おしえてください。
/*-------------------------------------------------------
PGMファイルの読み込みの関数
--------------------------------------------------------*/
int** read_PGM( FILE *fp, int *pw, int *ph){


int **im;

int i, j;
int temp, bright;


printf ("PGMの読み込み開始\n");

/*----------------------
P2形式のファイルか判別
-----------------------*/

if ( fgetc(fp) != 'P' || fgetc(fp) != '2' ){

printf("このデータはP2形式PGMファイルではありません。\n");
return (NULL);

}




650:デフォルトの名無しさん
07/05/27 06:10:50
/*----------------------
幅のデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", pw) != 1 ){

printf ("幅の読み込みに失敗しました。\n");
return (NULL);

}

printf("幅のサイズは%dです。\n", *pw );


/*----------------------
高さのデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", ph) != 1 ){

printf("高さの読み込みに失敗しました。\n");
return(NULL);

}

printf("高さのサイズは%dです。\n", *ph );





651:デフォルトの名無しさん
07/05/27 06:12:24
/*-----------------------
輝度のデータの読み込み
-----------------------*/

if ( fscanf(fp, "%d", &bright ) != 1 ){

printf("最大輝度値の読み込みに失敗しました。\n");
return(NULL);

}

if ( bright != MAXVALUE ){

printf("最大輝度値が%dではありません。\n", MAXVALUE );
return(NULL);

}

printf("最大輝度値は%dです。\n", bright );


/*------------------------
ヘッダーの取得完了
------------------------*/

printf("ヘッダーの取得完了\n");





652:デフォルトの名無しさん
07/05/27 06:14:21
/*----------------------------
メモリの確保
----------------------------*/
if ( (im = (int**)malloc(sizeof(int*) * (*ph))) == NULL ) {

printf("メモリが確保できません。\n");
return (NULL);

for ( j=0; j< *ph; j++){

if( (im[j] = (int*)malloc( sizeof(int) * (*pw) )) ==NULL ){

printf("メモリを確保できません。\n");
return(NULL);

}

}

}


printf("メモリ領域が確保できました。\n");




653:デフォルトの名無しさん
07/05/27 06:15:21
/*-----------------------------
画像データの読み込み
-----------------------------*/

for ( j=0; j< *ph; j++ ){
for ( i=0; i< *pw; i++ ){

if ( fscanf(fp,"%d", &temp) != 1 ){

printf("画像データの取得に失敗しました。\n");
return(NULL);

}

im[j][i] = temp;

}
}

return (im);

}


654:デフォルトの名無しさん
07/05/27 08:28:39
>>649
・長いソースはアップローダを使ってくれ。
・その画像ファイルにはコメントは含まれていないか?
試しにエディタで開いてみて、コメントがあるようなら削って味噌。
・そもそもなんでlibpgmでも使わないんだ?

>>648
>647でも指摘されているが、CPU側の事情で巧く動かないだけ。
(x86)アセンブラの勉強をすれば容易に解決する問題。

655:644
07/05/27 11:15:59
>>654
了解です。
「はじめての」シリーズがアマゾンで評価高かったので見てみようかと思います。
あとは、インラインアセンブラで関数作ってその部分だけバイナリで吐き出させて
再び埋め込んでみるのもいいかもしれないです。
シェルコードの解説サイトにソースがあったので使えそうです。
スレ違いな感じですがいろいろ有難うございます。

656:デフォルトの名無しさん
07/05/27 12:40:27
>>649
おそらくポインタ関係でミスってる、てことは分かるでしょ?
>>652 で im != NULL のときどうなるか考えてみ。


657:デフォルトの名無しさん
07/05/27 17:46:45
>>644
EAX の上位ビットをクリアすればいけるかも

658:デフォルトの名無しさん
07/05/27 18:09:00
>>644のは ret のC3がeaxレジスタにmovするときの数値で食われてるから
返ってこないんだよ。

659:デフォルトの名無しさん
07/05/27 18:24:25
>>644
IMMが32bitの場合と16bitの場合を区別するために、
mov ax, 0x123
では、0x66, 0xb8, 0x23, 0x01
とプリフィックスを入れる必要があるみたい。

660:デフォルトの名無しさん
07/05/27 18:29:14
まぁ厳密には関数ポインタは他のポインタと互換性があるとは限らないんだけど

661:デフォルトの名無しさん
07/05/27 18:34:14
確かに…
リニアアドレスであればいいかもしれないが、
データセグメントとコードセグメントなんかに分かれてると
普通に呼び出すのは無理そう

OSのセキュリティレベルが上がってくると
またDOSのようにセグメント毎に分かれるかもしれんし

662:デフォルトの名無しさん
07/05/27 18:45:59
>>660
>>661
こういうことをやる場合は16bit/32bit/64bitで分けるのは当然。
逆にそれを分けてしまえば、ポインタのサイズも
セグメントの問題もどうにでもなると思うけど…

663:デフォルトの名無しさん
07/05/27 18:47:20
16bit/32bit/64bitで分けるっていうのは、
CPUの種類の話ね^^

664:649
07/05/28 09:22:00
みなさん、ありがとうございます。
無事に動かすことができました。


665:デフォルトの名無しさん
07/05/28 10:42:28
クラスのコピーコンストラクタとoperator=って、
実装する処理がまったく同じになることが多いんですけど、
メンバのコピー自体はoperator=だけに書いて、

AAAA::AAAA(const AAAA& rSrc)
{
*this = rSrc;
}

とか書いて処理を合体してしまうことって
やっぱり好ましくないことですか?

666:デフォルトの名無しさん
07/05/28 10:55:56
>>665
代入と初期化は異なる演算です。
コピーコンストラクタでは初期化リストで各メンバのコピーコンストラクタを使いましょう。

667:デフォルトの名無しさん
07/05/28 11:33:02
結果:Strike!

char *pszMsg = "Lucky Strike!";
char *pszHit;
[ 問 ];
printf("%s\n,pszHit");

668:デフォルトの名無しさん
07/05/28 11:37:50
最後の"はそこでいいのか

669:デフォルトの名無しさん
07/05/29 01:31:34
VisualStudio2005でC++をコンパイルした実行ファイルをリバースエンジニアリングできますか?

670:デフォルトの名無しさん
07/05/29 01:37:08
はい、できます。

671:デフォルトの名無しさん
07/05/29 01:47:07
>>669
君には、できません><

672:デフォルトの名無しさん
07/05/29 03:10:42
CLRヘッダが無いと怒られてしまいました。
どうすれば、リバースエンジニアリングできますか?

673:デフォルトの名無しさん
07/05/29 03:16:27
リバースエンジニアになればリバースエンジニアリングできます!

674:デフォルトの名無しさん
07/05/29 03:20:04
馬鹿にはできない不思議なリバースエンジニアリング

675:デフォルトの名無しさん
07/05/29 19:35:08
逆アセンブラはできるけど、逆コンパイルはできない。

676:デフォルトの名無しさん
07/05/29 19:49:18
× 逆アセンブラ
○ 逆アセンブル

× できない
○ それ的な事はできるけど、元のソースを再現できるわけではない

677:デフォルトの名無しさん
07/05/29 20:07:41
ブーメラン ブーメラン

678:デフォルトの名無しさん
07/05/29 20:13:09
64ビットになったらアセンブラでプログラムなんて無理だよね

679:デフォルトの名無しさん
07/05/29 20:13:48
>>678
なんでやねん?

680:デフォルトの名無しさん
07/05/29 20:14:36
めんどくさくない?

681:デフォルトの名無しさん
07/05/29 20:15:00
>>678
ドラスティックな変化があると思っているなら、不勉強にも程がある。

682:デフォルトの名無しさん
07/05/29 20:26:26
eax とかが rax とかになるだけだろ。

683:デフォルトの名無しさん
07/05/29 20:30:51
歳も歳だし、新しく勉強なんてもう俺には無理だよorz
16ビットが恋しい

684:デフォルトの名無しさん
07/05/29 21:14:53
逆アセでollydbg使ってる奴はいないのか?

685:デフォルトの名無しさん
07/05/29 21:49:24
なんだよ

686:デフォルトの名無しさん
07/05/29 22:59:51
16ビットなら人間の手足で数えられるんだな

687:デフォルトの名無しさん
07/05/29 23:39:43
つーか16ビットの方がめんどうだっだろ

688:デフォルトの名無しさん
07/05/29 23:42:06
だっだろ

689:デフォルトの名無しさん
07/05/30 08:45:31
だっだろだっだろ

690:デフォルトの名無しさん
07/05/30 10:24:56
リスクは面倒だっだ

691:デフォルトの名無しさん
07/05/30 12:59:59
フリスクはよかった

692:デフォルトの名無しさん
07/05/30 13:12:08
ロリスクってなんですか?ハァハァ

693:デフォルトの名無しさん
07/05/30 13:24:56
ローリスクっぽい言葉の響きなのに凄くハイリスクな感じがするな。

694:デフォルトの名無しさん
07/05/30 13:27:09
>>693
っ ■■■(座布団)

695:デフォルトの名無しさん
07/05/30 15:02:25
なんら意味のないプログラム

void add(int)
int main(void){
add(2);
return 0;
}

void add(int x){
x=x+1;
}

これ、main関数の中のadd(2)が実行された時点で、
内部だとx==2なので2=2+1になってエラーが起こると思うんだけどおこらない。

main関数の中に
2=2+1;
ってやったらエラーが出て実行できない。

これはなぜ?教えてください

696:デフォルトの名無しさん
07/05/30 15:06:43
>>695
関数へはコピー渡しだからaddを呼んだ時点で2が変数xにコピーされている。
void add(int& x) だとコンパイルエラーにならないか?

697:デフォルトの名無しさん
07/05/30 15:06:58
意味がないなら、どうでもいいじゃないか。( ´∀`)

>内部だとx==2なので2=2+1になってエラーが起こると思うんだけどおこらない。
C/C++ では、引数は値渡しなので
add() 内部で x という変数が 2 になっているだけ。
add() を抜けると、+1 したはずの x は消滅。

698:デフォルトの名無しさん
07/05/30 15:08:10
おいおいw

699:デフォルトの名無しさん
07/05/30 15:09:56
↑誤爆スマソ

700:デフォルトの名無しさん
07/05/30 15:11:53
↓自爆スマソ

701:デフォルトの名無しさん
07/05/30 15:12:26
>>695
そのx=x+1;での=は、数学の授業でやるような等しいという状態を表しているものではなく、
「代入しろ」という動作の命令なのよ。

代入しろという命令だから=の左には代入できるものを書かないとエラー。
だからx=x+1;はokで2=2+1;はエラーになる。

702:デフォルトの名無しさん
07/05/30 22:14:02
CかC++で、整数型のユニークなIDを作るような機能を持ったライブラリってありませんか?

703:デフォルトの名無しさん
07/05/30 22:27:11
>>702
uuid

704:デフォルトの名無しさん
07/05/30 22:32:30
用途が分からんと何とも言えない気がする。

705:デフォルトの名無しさん
07/05/30 23:14:46
unsigned long GenerateUniqueID()
{
static unsigned long id=0;
id++;
return id;
}

706:デフォルトの名無しさん
07/05/30 23:47:21
スレッドセーフじゃないな。

707:デフォルトの名無しさん
07/05/30 23:51:39
unsigned long GenerateUniqueID()
{
static unsigned long id=0;
static int locked=0;

while(locked) msleep(1);
locked=1;
id++;
locked=0;
return id;
}

ミューテックス使わなきゃ駄目?

708:デフォルトの名無しさん
07/05/31 00:06:39
当然なんらかの同期化機構を利用しないとダメ。
スレッドAがwhile(locked)で
"lockedの値をレジスタに取った直後に" スレッドが切り替わり
スレッドBが同様にwhile(locked)を実行したらどうなる?

あと、そのコードはstatic変数の初期化も下手すると二回以上行われるね。

709:デフォルトの名無しさん
07/05/31 00:08:51
いや、、、初期化は実行時じゃ無いぞ・・・
クリティカルセクションでいいな

710:デフォルトの名無しさん
07/05/31 00:17:29
ごめん。C++のつもりで書いてたわ…。

711:デフォルトの名無しさん
07/05/31 00:42:27
最適化でゴッソリ消える予感

712:デフォルトの名無しさん
07/05/31 00:50:34
synchronized

713:デフォルトの名無しさん
07/05/31 02:12:57
C++ にあればねえ

714:デフォルトの名無しさん
07/05/31 02:16:48
>>711
その点については volatile つけとけばおk

715:デフォルトの名無しさん
07/05/31 06:43:11
そういう問題じゃないけどまぁいいか。

716:デフォルトの名無しさん
07/05/31 08:42:34
すいません、この関数って何か間違ってますか?
hairetsu2は、メモリ領域が確保してあり、srand()も関数の外で処理しています。
hairetsu2[j][i] = rand()%2のところで止まります。お願いします。
void rand_point( int **hairetsu2, int row, int line ){

int i, j;

/*** 2次配列の0or1をランダムに格納する ***/
for (j=0; j<row; j++){
for (i=0; i<(1+line); i++){

hairetsu2[j][i] = (rand()%2);

}
}

printf("2次配列にランダムに0or1を格納できました。\n");

}

717:デフォルトの名無しさん
07/05/31 09:06:05
>hairetsu2は、メモリ領域が確保してあり、
どうせちゃんと確保してないに決まってる

718:デフォルトの名無しさん
07/05/31 09:06:36
「止まります」?そもそもコンパイル通らんだろ。

719:デフォルトの名無しさん
07/05/31 09:25:24
コンパイルは通るんですよ↓メモリ確保は、次の関数で確保してます。
void securement2( int **hairetsu2 , int row , int line ){

int i, j;
/*** 2次配列の行を確保する ***/
if (( hairetsu2 = (int **)malloc( sizeof( int* ) * row )) == NULL ){
printf("2次配列のメモリ領域が確保できません。\n");
exit (1);
}
/*** 各行に得点の列を確保する ***/
for ( j=0; j<(row); j++){
if (( hairetsu2[j] = (int*)malloc( sizeof(int) * (1+line) )) == NULL ){
printf("2次配列のメモリ領域が確保できません。\n");
exit (1);
}

/*** 2次配列を0で初期化 ***/
for (j=0; j<row; j++){
for (i=0; i<(1+line); i++){
hairetsu2[j][i] = 0;
}
}
printf("2次配列のメモリ領域が確保できました。\n");
}


720:デフォルトの名無しさん
07/05/31 09:30:00
>>718
根拠は?

>>717
同意。

>>716
その構造だと、メモリはとint配列[line + 1]をrow回とポインタ配列[row]だけ確保する必要があるわけだが。
その部分のコードを晒して味噌。

721:デフォルトの名無しさん
07/05/31 09:30:21
hairetsu2[0][0]だけが格納されて止まるみたいです。hairetsu2[1][1]も格納できないみたいです。


722:720
07/05/31 09:32:01
>>719
あーすまん、やってたのね。
で、止まるってのは具体的にどうなると?

723:デフォルトの名無しさん
07/05/31 09:32:23
>>719
確かにメモリ確保はできてるようだけど、
hairetsu2 をそのまま使うことは出来ない。
変数 hairetsu2 は関数 securement2 を終えた時点で使用不能

724:デフォルトの名無しさん
07/05/31 09:33:06
void securement2( int **hairetsu2 , int row , int line ){

void securement2( int ***hairetsu2 , int row , int line ){

または

void securement2( int **hairetsu2 , int row , int line ){

int **securement2( int row , int line ){
int **hairetsu2;

printf("2次配列のメモリ領域が確保できました。\n");

printf("2次配列のメモリ領域が確保できました。\n");
return hairetsu2;

725:デフォルトの名無しさん
07/05/31 09:44:15
2次元配列も連続した領域である必要があるんだよ。
その配列のアクセスの仕方をやめるか、メモリ確保を一回でやるかどっちかにせい

726:デフォルトの名無しさん
07/05/31 09:45:30
>>725
ちょ…おまw

727:デフォルトの名無しさん
07/05/31 10:29:04
素朴な疑問だが、>>719みたいな奴って「2次元配列」言うの?
確かに同じ形で操作出来た気はするが。

>>725
何に対するレスか非常に疑問。

728:デフォルトの名無しさん
07/05/31 10:36:01
可変長二次元ぬるぽ( ´∀`)

729:デフォルトの名無しさん
07/05/31 11:31:48
>>727
配列のポインタの配列。

730:デフォルトの名無しさん
07/05/31 11:47:39
URLリンク(www.kouno.jp)

731:デフォルトの名無しさん
07/05/31 12:37:24
windows98で
SetPriorityClass(GetCurrentProcess(), ABOVE_NORMAL_PRIORITY_CLASS);
は実行できますか?
実行するとどうなりますか?

732:649
07/05/31 13:10:14
716です。ありがとうございます。ちょっと試してみます。


733:デフォルトの名無しさん
07/05/31 13:37:36
>>731
MSDN読め

734:デフォルトの名無しさん
07/05/31 15:43:09
>>716はダブルポインタ理解してるか?
引数にint **hairetsu2って書いてあるが、ここでダブルポインタにする必要はなにもない。
引数をダブルポインタにするには、関数内でメモリを確保して返すような場合だけだ。
ダブルポインタ=二次元配列じゃないぞ。配列は何次元になってもメモリ内の表現は連続だ。

あとrowとlineは普通どっちも行を意味する。
rowを行とするなら、列の変数名はcolumnの方がいい。

735:デフォルトの名無しさん
07/05/31 17:38:07
>>707
Windows APIのInterlockedIncrementのような関数が使えれば、それを使うのが楽

736:デフォルトの名無しさん
07/05/31 17:52:17
ダブルポインタってなに?

737:デフォルトの名無しさん
07/05/31 17:58:01
1点決めると2点分になる人

738:デフォルトの名無しさん
07/05/31 17:58:22
配列の連続性だけど、
a[3][3] で a[0][2] と a[1][0] の連続性って規格で保証されてたっけ?

739:デフォルトの名無しさん
07/05/31 18:00:11
int**がダブルポインタならこれは何ポインタ?
int*************** nullpo;

740:デフォルトの名無しさん
07/05/31 18:07:56
pentadecuple

741:デフォルトの名無しさん
07/05/31 18:47:40
>>733
読みました。2000以降と書いてありますが、98でどうなるかは書いていません。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch