【初心者歓迎】C/C++室 Ver.21【環境依存OK】
891 :
デフォルトの名無しさん:2005/10/07(金) 18:56:05
>>890 ヘッダでの変数宣言なら2重定義をはじくマクロくらい入れとけ
てか、普通入れる物だと思ってた俺ってアホ?
(・∀・)ニヤニヤ
シッ!
見ちゃいけません・・!
894 :
デフォルトの名無しさん:2005/10/07(金) 20:31:37
こんばんわ。質問させて下さい。
既存のCOMサーバーのATLオブジェクト(シンプルオブジェクト)があり、
これがコネクションポイント非サポートなんですが、
コネクションポイントのサポートをさせる事は可能でしょうか?
コネクションポイントのサポートをウィザードで指定した
ATLオブジェクトを作ってみて、IDL等真似して移植してみたのですが、
クライアントから DispEventAdvise した時に
0x80004002:インターフェイスがサポートされていません
エラーが出てしまいました。
素直にイベント配信用に新しいATLオブジェクトを作成した方がいいのでしょうか。。。
開発環境はVC6.0です。
よろしくお願いします。
下のプログラムの c[0] のところで
コンパイルエラーが発生してしまうのですが、
このような使い方はできないのでしょうか?
class CHoge {
public:
int& operator[]( int i ) { return x[i]; }
protected:
int x[1];
};
void main() {
CHoge a;
CHoge& b = a;
const CHoge& c = a;
a[0];
b[0];
c[0];
}
何故エラーメッセージを晒さないくせに質問するんだろうな。
>>895 constなオブジェクトはconstなメンバ関数しか呼び出せない。
const int& operator[](int i) const { return x[i]; }
を用意すれ
898 :
デフォルトの名無しさん:2005/10/07(金) 22:25:00
httpでアクセスして,ページのソースをmyDataBufferに格納しました↓
InternetReadFile(hFile,myDataBuffer,(DWORD)(size),&dwSize);
ただヤフーのページのため,EUC-JPでエンコード(ディコード?)しないと文字化けします
C++ではどのようにしてエンコードするのでしょうか?
調べてみたところ,使えそうなのが
HRESULT ConvertINetString( LPDWORD lpdwMode,
DWORD dwSrcEncoding,
DWORD dwDstEncoding,
LPCSTR lpSrcStr,
LPINT lpnSrcSize,
LPBYTE lpDstStr,
LPINT lpnDstSize
);
ここでEUC-JP → UNICODEやShift-JISとしてみたものの,文字化けします
どのようにするのがいいでしょうか?
C#の場合は,非常に簡単にできるみたいです↓
//C#の場合
Encoding.GetEncoding("EUC-JP").GetString(myDataBuffer);
>>897 通りました〜。
ありがとうございます。
>>884 そもそも自作のライブラリで piを提供する必要があるとは思わないが、
(普通に math.h M_PIとか使いたい)
その糞ライブラリはオブジェクト.o,.aを提供するんだろうから、
警告もマクロもdefineも嫌ならヘッダには extern const double PI;
ぐらいしか書きようがないのでは。
901 :
デフォルトの名無しさん:2005/10/08(土) 00:38:53
C++Builder 6 を使い始めたのですが、
閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
902 :
デフォルトの名無しさん:2005/10/08(土) 00:39:36
C++Builder 6 を使い始めたのですが、
閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
double型で確保した二次元配列にファイルからfreadでbitサイズの物を格納または
fwriteでunsigned charサイズのものをファイルに出力できないのでしょうか。
キャストしなくてはいけないはずなのですが、二次元配列のキャストも(int)のようなものを
変数の前につけるだけでいいのでしょうか。試してみたのですがうまく値を格納・出力できなかったもので。
どこにキャストの宣言をつけるのか解らないのでよろしくお願いします。
C言語、 VC 6.0、Win2000です。
double **arr2;
double *buff;
buff = (double *)malloc(sizeof(double) * (x * y));
arr2 = (double **)malloc(sizeof(double) * (y));
fread(&test1, sizeof(bit), 1, fp);
arr2[i][j] = test1;
fwrite(&arr2[i][j], sizeof(unsigned char), 1, fp);
>>902 まさしくデバッグ中のプログラムが動きっぱなしなんだろ。
>>903 エラーメッセージを貼れ。
キャストは誤魔化しのためにあるのではない。
arr2[i][j] = *((double *)&test1);
ってことがやりたいんじゃないの?
その文面だけじゃよくわからんけど
C++Builder 6 を使い始めたのですが、
閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
>>906 パソコンの電源落として窓から投げ捨てろ
C++Builder 6 を使い始めたのですが、
閉じたくても「デバッグ中ですが終了してもよろしいですか?」
と出るので、はいにすると、「プロセスを終了できません。アクセス拒否
されました」と出て、終了できないのですが、どうしたら
いいんでしょうか?教えてください。。
909 :
デフォルトの名無しさん:2005/10/08(土) 09:18:37
サーバーとクライアントを作り、
クライアントから、IPアドレス・ポート番号を入力せずに、又はIPアドレスのみ入力せずに、
起動しているサーバーを自動検索するにはどうすればよろしいでしょうか?
知っている方いましたらお教えください。
宜しくお願いします。
環境はVC6.0です。
>>909 考えられる全IP、全ポートにpostして応答が返ってきたもの
相当限定された環境でないと不可能だな
912 :
デフォルトの名無しさん:2005/10/08(土) 09:57:05
>>910 その方法は一番最初に考えついてつくってみたんですが、
検索にかなりの時間がかかってしまって、実用的ではなかったです。
時間短縮さえできれば、その方法でもいいとおもっているんですが。
>>911 やはり不可能なんですね。
ポート番号から、サーバーを探すことはできますか?
逆接続にするのはどうだろう。
クライアントがサーバのIPを使って接続するのではなく、
クライアントのIPを使ってサーバが接続するの。
#実は某官庁系ネットワークがそういうつくりだったり。
>>912 無理だろ。
IPとポート番号が揃ってはじめてアクセスできる。
お前の家へは市町村だけ書いて番地を書かずとも郵便は届くのか。
UDPのブロードキャストを利用して、
専用のプロトコル作れば良いだけでは?
ピュア型P2Pのノード探索とかが近いかも名
>>912 もともとその発想自体が実用的でも適切でもないんじゃね?
サーバ側が約束のportで適時ブロードキャストで情報をアナウンスするか、
クライアントからのリクエスト(ブロードキャスト)に返信するようにするか…
無駄だなあ。
918 :
903:2005/10/08(土) 12:46:48
>>904 自分のやり方は
fwrite((unsigned chart*)&arr2[i][j], sizeof(unsigned char), 1, fp);
でやったのですが、エラーがでなくてファイルが空のままでした。
読み込み時も同じ感じでやった後に配列の中身をprintfで調べても空でした。
>>905 ありがとうございます。今すぐには試せないのですが。
最初から配列をint型で確保した時は出来たのですが、double型でなってしまったので確保しなくてはいけないので、
キャストは一時しのぎで使う時だけ型を変えればいいと言われたのでして。
>>918,903
論理的に意味の取れない断片だけ提示してもまったく無意味だぞ。
動かせる程度の最小例ぐらいにまとめないと。
bitサイズだとかtest1の型だとか、不明な点ばかりなので。
そもそも何をしたいのかまったく意味をとれないようなコードだし、
int型で本当にできたのかどうかも怪しいぐらいだ…
>>918 もともとdouble型をsizeof(bit)だけ読んだりsizeof(unsigned char)だけ
書いたりするって、何か勘違いしてやしないか?
エラーが出なくて空って、ちゃんと fwriteの返値でエラーチェックやってる?
まさか、double値の bitがちょうど zeroの部分を 1byte書き込んだのを
zero==空 と勘違いしてやしないよね?
>>918 IEEE754を知らないとか言わないよな?
922 :
918:2005/10/08(土) 14:04:08
test1は構造体でunsigned char型で宣言してました。
for(i=0; i<20; i++){
for(j=0; j<20; j++){
fread(&Ko.test1, sizeof(bit), 1, fp);
log[i][j] = Ko.test1;
}
}
のように二次元配列に入れるもしくは出すことがしたかったものでして。
質問の仕方が悪かったのと基本的なところを理解しきれていなかったみたいです。
申し訳ありませんでした。基礎的なところをもっと詳しく調べてやり直してみます。
すみませんでした。
>>922 ならなんで fread(&Ko.test1, sizeof(unsigned char), ... じゃないんだ?
初心者のトラブルなんだし返値のチェックぐらいきちんとしろよ。
つか、*何も*理解してないが故に質問さえまともにできないだけだな。終了。
SuperCon課題レベルの、高度なC言語の問題が沢山載った本を、どなたがご存じないでしょうか?
C++に関する基本的な質問です。
開発環境は WinXP Pro SP2 、VC++.NET です。
現在C++勉強のために多倍長整数のクラスを自作しております。
http://aploda.net/dl.php?mode=pass&file_id=0000004834 のような形で、クラスを書いてみました。 (operator+ はまだ実装してません。)
このクラスを使って
void CtestDlg::OnBnClickedOk() {
{
CInteger a(1);
CInteger b(2);
CInteger c;
c = a+b;
}
}
という関数を作ったところ、
c=a+b; から抜けたあたりで、 プログラムが落ちてしまいます。
エラーメッセージは
test.exe の 0x1020a702 (msvcr71d.dll) でハンドルされていない例外が発生しました :
0xC0000005: 場所 0xccccccc8 を読み込み中にアクセス違反が発生しました。 。
というものです。
よろしくお願いいたします。
くそプログラムのデバッグを他人にやらせようとはいい度胸をしているじゃないか。
とりあえず、確保もしてないメモリにmemcpyを呼ぶ奴は死ね。
>>925 operator +=はどうした。
あと、CIntegerのメンバ関数の中でもCInteger::を付けずにzeroとかの列挙へアクセスできる。
>>929 operator +()の戻り値が値渡しになるのは仕方がない。
operator +=()があればoperator +()はすぐに作れる常套手段がある。friendにする必要もない。
CInteger operator +(const CInteger& left, const CInteger& right)
{
return CInteger(left) += right;
}
nullpo inter
>>930 そうなんですか……orz
でも、見ててポインタと区別つかない……
>>931 おぉ、 確かにそうですね。
今から書いてみます。
みなさん、どうもです。
>>794 if( boost::is_pod<TYPE>::value )
でできるみたいですね。ありがとう御座いました。
一番シンプルな四捨五入のコードを教えてください。
int n;
n=(n+5)/10*10;
(int)(d + 0.5);
938 :
935:2005/10/09(日) 05:36:45
すみません。浮動小数点でお願いします。
そもそも四捨五入ったって、小数点以下何位を四捨五入したいの?
それを指定した上での四捨五入が欲しいのか?
第三位なら
(int)(d*1000 + 0.5)/(double)1000;
とか