トップページ⇒tech
1001コメント326KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/01/17(水) 22:16:00
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1164376287/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0153デフォルトの名無しさん2007/01/24(水) 23:12:45
>>152 スレ違い。
0154デフォルトの名無しさん2007/01/24(水) 23:13:07
今現在Winでsizeof(wchar_t)==2に依存するコード書いてるんですが
これってどの程度通用するものなんでしょうか?
どうでもいい代物ではあるのでC_ASSERTだけは置くとして、参考にお聞きしたいです
0155デフォルトの名無しさん2007/01/24(水) 23:19:27
>>154
Windows 以外は 4 が主流だろう。
どちらにしても、依存せずに素直に sizeof(wchar_t) 使って書けよ。
0156デフォルトの名無しさん2007/01/24(水) 23:22:37
即答ありがとう

>Windows 以外は 4 が主流
そうだったんですか 
まずいよなぁとは思いつつ書いてたのでちょっと考え直すべきですね
0157デフォルトの名無しさん2007/01/24(水) 23:37:52
>>155
UCS2かUCS4かに依存するコードになっているならそう簡単には行くまいよ
sizeof(wchar_t) == 2ならICUのUCharと互換だが、みたいな
01581102007/01/25(木) 08:15:08
>>113
RegisterHotKeyだとスタートメニューが開いてしまうので、
SetWindowsHookExでやりました。
ありがとうございました。
0159デフォルトの名無しさん2007/01/25(木) 16:43:28
質問です。
smart_ptrを利用しているのですが、例えばクラスのメンバー変数として

class CNantoka
{
smart_ptr<CHoge> hoge;
};
とやる場合、そのクラスの前にCHoge.hをincludeする必要があるようです。
ですがこれだと、CHoge.hが書き換えられる度に、CNantoka.hを読んでいる全てのcppがリコンパイルされてしまいます。

単純なポインタならば
class CHoge;
class CNantoka
{
 CHoge* hoge;
};
とやればいいのですが、smart_ptrで同様の手軽さを実現することはできないのでしょうか?

(目的から考えると)CNantokaを使いたい連中に、CHogeの実装を知らせる必要はありません。
メンバーには(後述する構造体への)ポインタだけもたせて、メンバー変数代わりの構造体の定義をCNantoka.cppで行なうという手は一応考えました。

0160デフォルトの名無しさん2007/01/25(木) 17:06:37
>>159
class CHoge;
class CNantoka
{
 smart_ptr<CHoge> hoge;
};
でいいのでは?そのsmart_ptrにもよるが
0161デフォルトの名無しさん2007/01/25(木) 17:17:03
>>160
できました。
というかすいませんでした…。
何故できないと思い込んでいたのかお恥ずかしい限りです。

多分以前試した時は、別の原因のエラーが出てたのを勘違いしたんでしょう。
ありがとうございました。
0162デフォルトの名無しさん2007/01/25(木) 17:43:22
161です。
思い込んだ原因がわかりました。
ヘッダファイル内に一部の関数を直書きしていたのですが、そこでsmart_ptr<CHoge>を使っていました。

そりゃあデストラクタが正しく定義できずエラーにもなりますわ…。
0163デフォルトの名無しさん2007/01/25(木) 19:22:13
質問です。C++の日本語処理って
wcout.imbueとwofstream/wifstreamのimbueがあれば
間に合うような気がするんですが
locale::globale()ってどういう場合に利用するんですか?
0164デフォルトの名無しさん2007/01/25(木) 19:23:15
コンストラクタ・デストラクタと純粋仮想関数について混乱気味なので質問
以下のImplクラスのコンストラクタ・デストラクタ呼び出し結果は未定義ってこと?

struct Abst {
virtual ~Abst() {}
virtual void MemberInit() = 0;
virtual void MemberTerm() = 0;
};

struct Impl : Abst {
Impl() { this->MemberInit(); }
~Impl() { this->MemberTerm(); }
void MemberInit() {}
void MemberTerm() {}
};
0165デフォルトの名無しさん2007/01/25(木) 19:47:12
>>164
それぞれImpl::MemberInit(), Impl::MemberTerm()が呼ばれることになってる。
0166デフォルトの名無しさん2007/01/25(木) 20:08:36
あれー? むしろまるでわかってないみたい…
日本語も満足に解釈できないのかよ俺
0167デフォルトの名無しさん2007/01/25(木) 20:22:28
STLはここで聞いても大丈夫ですか?
スレ違いだったらスンマソン。

class Cfoo
{
int func1( void ){ return 1; }
}foo;

void main( void )
{
vector<Cfoo *> f;
f.push_back( 省略 );//Cfooクラスを継承したクラスを入れる
for_each( f.begin(), f.end(), mem_fun( &Cfoo::func1 ) );
}

上記でCfooのメンバ関数func1の戻り値を取る方法なんぞあれば、教えてください。
(実際、使う場合はメンバ関数が複数個(int func1(void), char func2(void)・・・
)になります)
0168デフォルトの名無しさん2007/01/25(木) 20:28:17
>>131-138
今更だけどこれくらいやればboost::functoinと遜色なく使える。
#include <iostream>
#include <functional>
template<typename T> class MyScopedPtr { //削除子付スマートポインタ
public:
    template<typename U> MyScopedPtr(U* p) : p(p), delator(makeDelator<U>) {}
    ~MyScopedPtr() {delator(p);}
    T* Ptr() {return p;} //* ->など演算子は省略
private:
    T* p;
    void (*delator)(void*);
    template<typename U> static void makeDelator(void* p) {delete static_cast<U*>(p);}
    MyScopedPtr(const MyScopedPtr&);
    MyScopedPtr& operator =(const MyScopedPtr&);
};
template <typename Ret, typename Arg1> class FunctionHolder1 : std::unary_function<Ret, Arg1> {
public:
    template<typename FnObj> FunctionHolder1(FnObj f) : obj(new FnObj(f)), pfn(callFunc<FnObj>) {}
    Ret operator ()(Arg1 a) {return pfn(obj.Ptr(), a);}
private:
    MyScopedPtr<void> obj; //std::tr1::shared_ptrもしくはboost::shared_ptrでも可
    Ret (*pfn)(void*, Arg1);
    template<typename FnObj> static Ret callFunc(void* p, Arg1 a) {return (*static_cast<FnObj*>(p))(a);}
};
0169デフォルトの名無しさん2007/01/25(木) 20:29:05
続き
struct C_hoge {
    void hoge1() {std::cout << "hoge1" << std::endl;}
    int hoge2() {std::cout << "hoge2" << std::endl; return 1;}
};

char func1(char x) {return x;}

int main() {
    C_hoge hoge;
    FunctionHolder1<void, C_hoge> fhv(std::mem_fun_ref(&C_hoge::hoge1)); //boost::function1<void, C_hoge>
    FunctionHolder1<int, C_hoge> fhi(std::mem_fun_ref(&C_hoge::hoge2)); //boost::function1<int, C_hoge>
    FunctionHolder1<char, char> fhc(std::ptr_fun(func1)); //boost::function1<char, char>
    fhv(hoge);
    int ret = fhi(hoge);
    std::cout << "ret: " << ret << std::endl;
    std::cout << "fhc: " << fhc('A') << std::endl;
}
0170デフォルトの名無しさん2007/01/25(木) 20:30:45
>>167
std::transform() 使えばいいんじゃね?
0171デフォルトの名無しさん2007/01/25(木) 20:33:22
('A')
01721672007/01/25(木) 21:43:52
>>170
即レスさんくす。
なんとかがんがったら、望んでいる形に近い状態で
プログラムが動きますた。

ところでfor_eachってループ回り始めたら途中で止めることって
できないですか?
for文のbreakみたいな感じで止めたいんす、、、。

0173デフォルトの名無しさん2007/01/25(木) 21:54:29
例外投げたら
0174デフォルトの名無しさん2007/01/25(木) 22:01:55
>>173
そんなことに例外使うなよ
0175デフォルトの名無しさん2007/01/25(木) 22:03:33
gets()で読み込んだファイル名で書き込みしたいのですが、
ファイル名が同じで拡張子を変えて保存したい時でも1つずつ指定しないとだめですか?
あと、保存先を別フォルダに指定できますか?
0176デフォルトの名無しさん2007/01/25(木) 22:09:09
意味分からん
0177デフォルトの名無しさん2007/01/25(木) 22:21:00
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)return(-1);

WaitKey();
DxLib_End();
return(0);
}

ウィンドウのサイズを変更したいのですが
この文のどこに何を入れればいいのでしょうか?
0178デフォルトの名無しさん2007/01/25(木) 22:25:28
>>172
イテレータの範囲で表現できない終了条件があるなら、
それはもう標準アルゴリズムじゃないから、おとなしく
自分でループ書け。
0179デフォルトの名無しさん2007/01/25(木) 22:30:32
>>175
string filename;
string ext1 = ".dat";
string ext2 = ".lsp";

あとはご自由に
0180デフォルトの名無しさん2007/01/25(木) 22:32:07
>>172
自分で停止するバージョンのfor_each書けば?
template <class IT, class FN>
void my_for_each(IT first, IT last, FN func)
{
  for(; first != last && func(*first); ++first)
    ;
}
みたいな感じで
0181デフォルトの名無しさん2007/01/25(木) 22:42:52
>>177
リファレンス見ろよー
一応教えるとSetGraphModeね
0182デフォルトの名無しさん2007/01/25(木) 22:55:23
>>181
即答ありがとうございます
うまくいきました!
0183デフォルトの名無しさん2007/01/25(木) 23:30:57
>>180
std::find_if ?
0184デフォルトの名無しさん2007/01/25(木) 23:58:24
>>183
ああ、そういえば本来の目的とは全く違うが、find_ifでいいんだね
やってることほぼ同じだし
0185デフォルトの名無しさん2007/01/26(金) 00:20:15
質問です。
C++でプログラムを実行したところ,
-1.#IND00 という値が入っている変数がありました.
デバッグのため,値が-1.#IND00 となったらデバッグプリントを表示したいのですが、
どのようにやればよいでしょうか?
環境は.net 2003です。
ちなみに、
float fx = 0.0;
float r;
if(r == -2.0f/fx || r == 2.0f/fx || r == fx/fx || r == -fx/fx){
としてみたところダメでした。
どなたかよろしくお願いします。
0186デフォルトの名無しさん2007/01/26(金) 00:22:12
185です
rは別の計算によって求めたい値が入っているとします。
0187デフォルトの名無しさん2007/01/26(金) 00:50:21
>>185
float r = 0.0;
0188デフォルトの名無しさん2007/01/26(金) 00:57:59
187さん
レスありがとうございます
説明不足だったと思いますが、実際のプログラムでは当然
float r;
の後に計算を行い結果を格納しています。
このrの値をプリントしたところ,-1.#IND00と表示されるのです・・・
0189デフォルトの名無しさん2007/01/26(金) 01:01:53
計算の部分を詳しく
0190デフォルトの名無しさん2007/01/26(金) 01:02:06
>>188
01.#IND00となってる時

int i = reinterpret_cast<int&>(r);

とやってビットパターンをつかめばいいのでわ?
但しこれはx86の32ビットモード限定で。
0191デフォルトの名無しさん2007/01/26(金) 01:06:22
do{
if ((fp = fopen("list.txt", "r")) == NULL){
printf("ファイルのオープンができませんでした。\n");
return 0;
}

fgets(filename,255,fp);
if(filename=="\n"){return 0;}
read(filename,orig);

printf("つづける?(yes=0)=");
scanf("%d",&yes);
}while(yes==0);

ファイルを1行読んで処理を改行文字がくるまで繰り返すプログラムを作ったのですが、
実行するとファイルが開けませんと表示されて終わってしまういます。
読み込むファイル名はちゃんと確認したし、プログラムと同じフォルダに入っています。
どうしたらいいのでしょう?
0192デフォルトの名無しさん2007/01/26(金) 01:06:34
>>188
計算する数値が計算途中でオーバーフローしてると思う。
0193デフォルトの名無しさん2007/01/26(金) 01:10:34
>>191
ファイルを同時に開ける数に限りがあったはず。
fclose でファイルを閉じるか、fopen をループから出せばいいんじゃね?
0194デフォルトの名無しさん2007/01/26(金) 01:15:12
>>191
いまいち何がしたいのかわからんが、文字列の比較はstrcmp (#include<string.h>)を使うといい

if(filename=="\n"){return 0;}
↓
if(strcmp(filename,"\n")==0){return 0;}
0195デフォルトの名無しさん2007/01/26(金) 01:16:08
185です.
計算過程は長いのでソースは載せませんが,
怪しそうなところとしては,exp計算がオーバーフロー,
途中の計算に使う変数が値を取得していない時があること等が考えられます。
-1.#IND00やINFなどはif文で分岐させることは難しいのでしょうか???

0196デフォルトの名無しさん2007/01/26(金) 01:16:55
 私はXP PROで制御している高額な精密機械を使ってる者です。
そしてそのXPは最終的にはその機械のソフトでしか立ち上がりません。起動の過程において、XPのデスクトップ画面はでるのですが・・。
その機械のサービス(嫌なタイプの修理屋)に少しPCの知識があれば、コントロールパネルを開けられると言われて開ける過程を見る
暇もなくコンパネを見せられました。
 そのソフトの起動中に、そのソフトを絶対に止めることなく、コンパネを開ける方法はどの様にしたらいいのでしょうか?ソフト画面が全画面
になっていてコンパネを見れません。
 自己責任において聞いてます。なにか、コンパネは知識がない奴には見れないなんて感じで言われたので開けれないのが悔しいのです。
そして唯コンパネをシステムを変更する事無しに見たいだけなのです。嫌いなタイプのサービスなんかに馬鹿にされたくありません。
なにとぞ、コンピューターにうとい私を2チャンネラーの知識で助けて下さい。宜しくお願いいたします。

0197デフォルトの名無しさん2007/01/26(金) 01:19:19
>>193
ループの開始をfgetsの前に変えてみましたが、変わらず「ファイルのオープンができませんでした」出ます。
実行してすぐ1週目でとまってしまいます。
0198デフォルトの名無しさん2007/01/26(金) 01:20:26
>>196
まずは落ち着いてスレタイをよく読むように。
初心者歓迎だけに脳髄反射しないように。
01991962007/01/26(金) 01:20:46
 もし私の質問が板違いならば、マルチにならないように質問する板をご紹介お願いいたします。
02001972007/01/26(金) 01:23:59
>>194
list.txtに処理をしたいファイルの名前が書いてあって、一つ読んではそのファイルを読み込んで処理をしたいんです。
0201デフォルトの名無しさん2007/01/26(金) 01:27:26
>>196
責任持てないけどミ田←こんなキーがCtrlとAltに挟まれてあるでしょ。
それを押してみたらどう?
もう一度言うけど責任は持てない。
02021962007/01/26(金) 01:27:50
>>198

 悲しい事にプログラムの事は分りません、ごめんなさい。私の質問に最適な板やスレッドはあるでしょうか?
0203デフォルトの名無しさん2007/01/26(金) 01:28:52
>>200
read()という関数の中で、そのファイルをオープンして読んで処理してんだろ?
終わったらそのファイルを閉じろ。

それと、fopen()に失敗したら、
perror()使ってみな。
fopen()はエラーの際に、その理由を示す番号をerrnoにセットする。
perror()を使って、errnoに応じたメッセージを表示することができる。

多分今回のケースでは"Too many open files"のようなメッセージが出力
されるだろう。
0204デフォルトの名無しさん2007/01/26(金) 01:31:31
>>195
っ isinf()@math.h
0205デフォルトの名無しさん2007/01/26(金) 01:31:46
>>196
君の文章は日本語として滅茶苦茶だし説明能力に非常に問題がある。
現物も見ずに、2chで君のつたない文章から問題を把握し、適切な回答を
出してくれるようなエスパー能力と忍耐力を持つ人は皆無だろう。

というわけで諦めれ。
0206デフォルトの名無しさん2007/01/26(金) 01:33:16
>>197
/* do { */
....
/* } */
02071962007/01/26(金) 01:38:40
>>201様
 コンパネを出すときに、一瞬のキー操作でだしたので、隠れリンクでしょうか?
Alt+F4をやってみましたが、ソフトの終了無しに全く反応しませんでした。
0208デフォルトの名無しさん2007/01/26(金) 01:38:43
>>196
Win + Rを押して、出てきたウィンドウに control と打ち込みEnterを押す
0209デフォルトの名無しさん2007/01/26(金) 01:41:24
>>207
ちょwwww
日本語の意味が全くわからんぞww
本当に日本人ですか?
0210デフォルトの名無しさん2007/01/26(金) 01:43:16
>>197
そのエラーメッセージは read 関数で出されているんじゃないの?
あとファイル名に改行は入れられない

fgets(filename,255,fp);
↓
fgets(filename,255,fp);
if(filename[strlen(filename)-1]=='\n') filename[strlen(filename)-1]='\0';
0211デフォルトの名無しさん2007/01/26(金) 01:45:10
>>205

 私の文章がどの様におかしいのか説明お願いいたします。
私はおかしくないと自負して読み返しました。
0212デフォルトの名無しさん2007/01/26(金) 01:47:23
>>211
自覚が無いのが一番厄介。諦めて帰れ。
0213デフォルトの名無しさん2007/01/26(金) 01:53:59
>>208様、

本当に有り難うございます。明日やってみます。

>>209

あなたは、コンテクストって概念がない人ですね。主語なんて文章の流れで何度も出す物じゃない。


0214デフォルトの名無しさん2007/01/26(金) 02:01:38
>>213
あんたの日本語おかしいよ。どうせチャンコロかチョンだろ?
不法滞在すんなよ。
0215デフォルトの名無しさん2007/01/26(金) 02:03:22
>>208様

自分のPCでもコマンドを打ち込む物が出てきました。本当に有り難う御座います。感謝してます。
本当に有り難うございました。
0216デフォルトの名無しさん2007/01/26(金) 02:07:17
>>208様

私の特殊な環境でも不思議とコンパネを入れるとできました。
本当に有り難う御座います。
0217デフォルトの名無しさん2007/01/26(金) 02:08:46
出来たのは不思議なのか?
この間違った日本語面白いな。
つーか日本は26日だ。明日は27日だぞ。
0218デフォルトの名無しさん2007/01/26(金) 02:12:38
空気を読んでわざと変な日本語で書いてるんだろう。
だがそれがいい。
0219デフォルトの名無しさん2007/01/26(金) 02:17:52
204さま>
185です.
使用しているvcではなぜかmathにisinf()、isnan等が入っていませんでした・・・
しかし,教えていただいたisinfをもとに検索したところ
#define isnan(x) ((x) != (x))
という方法を見つけ、if文で検出することが出来ました。
また何かありましたらよろしくお願いします。
ありがとうございました.
0220私は215であるが、216ではない。2007/01/26(金) 02:18:22
>>217

 文章の問題で話合いたいなら、文章の何処がおかしいのか言ってくださいよ。
確かに最初の私の文章は、文章に脈絡がなかったですけどね。
0221デフォルトの名無しさん2007/01/26(金) 02:25:28
デフォルトの名無しさんは多重人格ですね
0222デフォルトの名無しさん2007/01/26(金) 02:32:04
>>219
素晴らしいレスです
0223デフォルトの名無しさん2007/01/26(金) 02:38:14
>>219
もう解決してしまったようだが、VC++だと、
<float.h>に_isnan()が定義されているかもしれない。
0224デフォルトの名無しさん 2007/01/26(金) 03:26:12
以下のようなコードで、
継承先のクラス宣言部内(class{〜間};)
で親のpublicメソッドが呼べるのですが、
継承先のメソッド内ではAccess Violationエラーが
出て呼べない状況です。
継承の使い方が間違ってるでしょうか?

class B
{
public:
B(){}
~B(){}
virtual void SendData();
virtual void OnRecieve()=0;
};
void B::SendData(){ }

class A : public B
{
public:
A(){ SendData(); } << 正常にSendData()が実行される
~A(){}
virtual void SendData2();
void OnRecieve(){};
};

void A::SendData2(){ SendData(); }
↑
このメソッドコールするとSendData()のところで
Access Violation C0000005
0225デフォルトの名無しさん2007/01/26(金) 07:30:47
>>224
それだけ見ると問題ないなぁ。勝手にソースを省かずに、
問題が再現する最小のコンパイルできるコードを作ってみるといい。
0226デフォルトの名無しさん2007/01/26(金) 09:11:11
>>224
いっかいフルコンパイルかけてみたら?

# ヘッダ修正したのに、プリコンパイルヘッダ使いやがって、修正前のヘッダ状態でコードはいちゃった とか?
0227デフォルトの名無しさん2007/01/26(金) 14:15:45
DLLのソースをスタティックライブラリ用に変更したいんですけど
どうやればいいでしょうか?
環境はVC2005,WindowsXPです。
0228デフォルトの名無しさん2007/01/26(金) 14:39:34
>>227
新規にスタティックライブラリのプロジェクトを作って、そこにソース&ヘッダをコピペしたほうが早いかも。

そこから、
DllMain周りの初期化/後始末処理と、シンボル名の衝突
__declspec(dllexport), __declspec(dllimport) or *.def の削除は手作業で修正。
02292272007/01/26(金) 15:18:16
>>228
ありがとうございます。
__declspec(dllexport), __declspec(dllimport)を削除したところ
ビルドはできましたがDLLで使えてた機能が使えません。
DllMain周りの初期化/後始末処理とは何でしょうか?
0230デフォルトの名無しさん2007/01/26(金) 15:31:27
#include<conio.h>
#include<stdio.h>
void main(void) {   キー入力サンプルプログラム */
charKey;
for(;;){   Key = inp(0x60);
printf("%x\n",Key);
if (Key == 0x01){/* ESCで終わります */ break;}
}}
警告 W8065 test15wc.c 18: プロトタイプ宣言のない関数 'inp' の呼び出し(関数 main )
Error: 外部シンボル '_inp' が未解決
というエラーが出てしまいます。自分なりにやってみたのですが、うまくいきませんでした
0231デフォルトの名無しさん2007/01/26(金) 15:36:08
>>229
元々の機能ってフックかなんか? それだと DLL 以外は不可能だぞ。

実行ファイル書くときの WinMain() や main() の亜種で、
DLL用に DllMain() ってのがあって、DLLがロードされたりすると暗黙のうちに呼ばれるのがある。
(詳細はヘルプなりMSDNなりで調べてね)

元ソースを grep してみて、そいつが居るようなら特別な作業が必要ってこった。
0232デフォルトの名無しさん2007/01/26(金) 15:49:12
>>230
キー入力する部分の inp() が君の使っているコンパイラには無い。
他の1文字入力を待つ標準関数を探そう。

# 最後に押されたASCIIコードが port 60h のリードで得られるって OS&PC は何なんだろ?
0233デフォルトの名無しさん2007/01/26(金) 16:00:26
VS2005でMFCで更にダイアログでプロジェクトを新規作成するとF1キーを押すと
HELPが見つかりませんとでます。MFCでもダイアログ以外を選択するとでません。
またMFCでなくWindowsフォームアプリケーションにしても出ません。
これは仕様なのでしょうかね?HELPを作成せずにメッセージを出さなくする方法
はありますか?こちらのスレの方が適切だと後で思ったのでこちらにも書いてみ
ました。マルチポストすみません。
0234デフォルトの名無しさん2007/01/26(金) 16:01:39
私のOSはXPでPCはAT互換機です。
簡単なゲーム作成で、藤川ソフトウェア工房で
「C言語のget系の標準関数を使うのは問題外です。2つ以上のキーを同時に認識できないからです。」
 「キーボードのデータはI/Oポートのアドレス60hから取得できます。
 C言語でI/Oポートのアドレス60hを読むには、conio.hをインクルードしておいて」
ハードウェア割り込みというこでできると書いてありましたが環境が違うので、無理っぽいですが
もう少し調べてみます。有り難うございました。
02352272007/01/26(金) 16:05:43
>>231
>元々の機能ってフックかなんか? それだと DLL 以外は不可能だぞ。
その通りフックです。そうなんですか〜、既存のアプリがランタイム要るので自分で作ろうとしたのにorz
どうもありがとうございました。
0236デフォルトの名無しさん2007/01/26(金) 16:20:41
>>234
サイト見つけた。
ttp://www14.big.or.jp/~amiami/fsk/old/stg/stg2.html
AT互換機で DOS/Win9x限定(ポート直たたきするから)
+ コンパイラはWatcomC という縛りの元で Webの内容を構成してるぞ。

環境あわすか、他のページを参考にしたほうが良いんじゃねーかな?
0237デフォルトの名無しさん2007/01/26(金) 16:33:20
>>236
そうでした。コンパイラが違うから使えない・・・
あらためて、互換性の高い壁を感じました。(>_<)
コンパイラ変更も含め検討します。
どうもでした!
0238デフォルトの名無しさん2007/01/26(金) 16:35:01
>>237
Win32API使えばいいじゃん
0239デフォルトの名無しさん2007/01/26(金) 16:52:46
>>238
まじっすか!get系を使っていて同時押しできなくて、どうしようかと悩んでいました。
(真剣にコンパイラ変更を考えていた)コマンドプロンプト用のゲーム。
色や位置設定などでコンソールAPIを使っていました!Win32APIもためしてみます!
有り難うございます。m(_ _)m
0240デフォルトの名無しさん2007/01/26(金) 17:01:49
>>239
コンパイラ変更だけじゃなくて、動作OSも変えないと意味ないぞ。 (XP じゃ port 60 のリードできない)
素直に WinAPIを使う=Windows のプログラミングするべし
0241デフォルトの名無しさん2007/01/26(金) 17:06:21
>>234
> 私のOSはXP

お前、XP で動いてるんか。
0242デフォルトの名無しさん2007/01/26(金) 17:09:15
頭は486並だけどな
02432312007/01/26(金) 17:30:55
>>235
ランタイムを使わないDLLを作るのはどうだろう?
そこから改めてランタイムの不要なアプリを自作すると。
02442272007/01/26(金) 18:35:36
>>243
既存のアプリが実行ファイルとランタイムの構成で、
それを1つにまとめたくて同じ機能の物はランタイム不要で作れたんですけど、
フックした方がもっと便利なものが作れると思ったら、
DLLとEXEの複数ファイルが必要だったって状態です。
0245デフォルトの名無しさん2007/01/27(土) 15:28:33
>>244
何故「一つのファイル」に拘るの?
0246デフォルトの名無しさん2007/01/27(土) 15:30:35
なんか結局dynamicにリンクするハメになるんじゃないかと
0247デフォルトの名無しさん2007/01/27(土) 16:34:36
先生からもらったプログラムに
int size = 128;
int n = size >> 1;
という記述があったんですが">>"はどういう意味なんですか?
0248デフォルトの名無しさん2007/01/27(土) 16:38:56
先生に訊けよ
0249デフォルトの名無しさん2007/01/27(土) 16:39:26
ビットシフト
0250デフォルトの名無しさん2007/01/27(土) 18:13:52
>>247
先生に
「どうして”int size = 64;”にしなかったのですか?」
って聞いたら教えてあげる
0251デフォルトの名無しさん2007/01/27(土) 18:18:34
ついでに、unsignedでない整数型に右シフトを使うのは
いかがなものでしょうか先生、
ぐらい言うと良い
0252デフォルトの名無しさん2007/01/27(土) 18:19:55
さらに「先生はプログラム向いてないんじゃないですか?」くらい言えば完璧
■ このスレッドは過去ログ倉庫に格納されています