したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

1みみず★:2008/08/10(日) 23:28:15
あまりにもプログラミングの内容が増えすぎた。
よって隔離スレの中を更に隔離。

329 ◆rCEzuNnL0g:2008/09/10(水) 20:23:53
という事で、これでunequalとなります。
----------
if((void*)pcs == (void*)(ISuper*)pcs){
std::cout << "equal" << std::endl;
}else{
std::cout << "unequal" << std::endl;
}

330 ◆rCEzuNnL0g:2008/09/10(水) 20:36:39
+00:offset ISub1::`vftable' -> offset CSub::`vftable'
+04:offset CSub::`vbtable'
+08:m_v1
+0C:offset ISub2::`vftable' -> offset CSub::`vftable'
+10:offset CSub::`vbtable'
+14:m_v2
+18:offset IClass::`vftable' -> offset ISub2::`vftable'
+1C:
+20:
+24:offset ISub1::`vftable' -> offset CSub::`vftable'
+28:m_1
+2C:m_2
+30:m_3

331 ◆rCEzuNnL0g:2008/09/10(水) 20:49:39
>>328,330
は両方とも間違えだと思う。
なんだか面倒になってきた。
やっぱり仮想継承は考えないこととするか。

332 ◆rCEzuNnL0g:2008/09/10(水) 20:53:29
まあ、補正用にvbtableが入るのは間違いない。
検証用に用意した、適当なソースコードでも貼っておく。
-----

#include <iostream>
#include <string>

class IClass{
public:
virtual
~IClass(){}

virtual
int Get() = 0;

int m_1;
int m_2;
int m_3;
};

class ISub1 : virtual public IClass{
public:
virtual
~ISub1(){}

int m_v1;

virtual
int Get1() = 0;
};

class ISub2 : virtual public IClass{
public:
virtual
~ISub2(){}

int m_v2;

virtual
int Get2() = 0;
};

class CSub : public ISub1, public ISub2{
public:
virtual
int Get1(){
return m_v1;
}
virtual
int Get2(){
return m_v2;
}
virtual
int Get(){
return m_1;
}
};

int main(int argc, char **argv){
CSub cs;
CSub *pcs = &cs;

pcs->m_1 = 0;
pcs->m_2 = 0;
pcs->m_3 = 0;
pcs->m_v1 = 0;
pcs->m_v2 = 0;

if((void*)pcs == (void*)(IClass*)pcs){
std::cout << "equal" << std::endl;
}else{
std::cout << "unequal" << std::endl;
}

/*
ISub1 *pi1 = &cs;
ISub2 *pi2 = &cs;
IClass *pic = &cs;

pcs->m_1 = pi1->m_1 = pi2->m_1 = pic->m_1 = -1;
*/
};

333 ◆rCEzuNnL0g:2008/09/10(水) 20:55:00
デザインパターン編 第22章 Visitorパターン
http://www.geocities.jp/ky_webid/design_pattern/022.html
-----
Visitorパターンは物凄く使えると思う。

334 ◆rCEzuNnL0g:2008/09/10(水) 20:58:35
つまりLispを実装しようと思ったら、
全てのCellとかAtomとかをILispObjとかにして、
そっから全てのObjectを継承して、
ILispObj::Eval(IVisiter);
とかやって、
IVisiter::Printとかやったればいいんじゃね?とか妄想している。
正直上手くいきそうに無いwwwww

335 ◆rCEzuNnL0g:2008/09/10(水) 21:32:19
寝るか「、¥

336 ◆rCEzuNnL0g:2008/09/10(水) 22:48:01
仮称継承して出力してみた。
-----
序数: 0001 名前: ??0CSub1@@QAE@ABV0@@Z
序数: 0002 名前: ??0CSub1@@QAE@XZ
序数: 0003 名前: ??0CSub2@@QAE@ABV0@@Z
序数: 0004 名前: ??0CSub2@@QAE@XZ
序数: 0005 名前: ??0CSub@@QAE@ABV0@@Z
序数: 0006 名前: ??0CSub@@QAE@XZ
序数: 0007 名前: ??0CSuper@@QAE@ABV0@@Z
序数: 0008 名前: ??0CSuper@@QAE@XZ
序数: 0009 名前: ??1CSub1@@UAE@XZ
序数: 000A 名前: ??1CSub2@@UAE@XZ
序数: 000B 名前: ??1CSub@@UAE@XZ
序数: 000C 名前: ??1CSuper@@UAE@XZ
序数: 000D 名前: ??4CSub1@@QAEAAV0@ABV0@@Z
序数: 000E 名前: ??4CSub2@@QAEAAV0@ABV0@@Z
序数: 000F 名前: ??4CSub@@QAEAAV0@ABV0@@Z
序数: 0010 名前: ??4CSuper@@QAEAAV0@ABV0@@Z
序数: 0011 名前: ??_7CSub1@@6B@
序数: 0012 名前: ??_7CSub2@@6B@
序数: 0013 名前: ??_7CSub@@6B@
序数: 0014 名前: ??_7CSuper@@6B@
序数: 0015 名前: ??_8CSub1@@7B@
序数: 0016 名前: ??_8CSub2@@7B@
序数: 0017 名前: ??_8CSub@@7BCSub1@@@
序数: 0018 名前: ??_8CSub@@7BCSub2@@@
序数: 0019 名前: ??_DCSub1@@QAEXXZ
序数: 001A 名前: ??_DCSub2@@QAEXXZ
序数: 001B 名前: ??_DCSub@@QAEXXZ
序数: 001C 名前: ?Print@CSub1@@UAEXXZ
序数: 001D 名前: ?Print@CSub2@@UAEXXZ
序数: 001E 名前: ?Print@CSub@@UAEXXZ
序数: 001F 名前: ?Print@CSuper@@UAEXXZ

337 ◆rCEzuNnL0g:2008/09/10(水) 23:06:42
メンバ変数にメンバ関数へのポインタを置いておいて、状態によってその呼び出す関数を変えたい。
で、こんな書き方しか出来ないのだろうか?
---
#include <iostream>
#include <string>

class CClass{
public:
void (CClass::*pFunc)();
std::string str;

CClass()
: pFunc(NULL)
, str("")
{}

void Print1(){
std::cout << str << std::endl;
}
void Print2(){
std::cout << "|" << str << "|" << std::endl;
}

void Set(std::string _str){
str = _str;
}
};

int main(int, char**){
CClass e;
e.pFunc = &CClass::Print1;
(e.*(e.pFunc))();
}

338 ◆rCEzuNnL0g:2008/09/10(水) 23:07:59
(e.*(e.pFunc))();
とか正直何がしたいのか分からない。というかeを二回書いている時点でスマートじゃない。

339 ◆rCEzuNnL0g:2008/09/10(水) 23:10:09
メンバ関数内ならば、
(this->*pFunc)();
と書けるか・・・

340 ◆rCEzuNnL0g:2008/09/10(水) 23:11:42
まあ、此れで現状のC++については勉強しつくした感がある。

341 ◆rCEzuNnL0g:2008/09/10(水) 23:16:37
いや、まだ、メンバ関数ポインタについては勉強できていないな。

342 ◆rCEzuNnL0g:2008/09/10(水) 23:28:49
どうやらメンバ関数ポインタ用に新たな関数を生成するらしい。
-----
IClass::`vcall'{0}':
00412330 mov eax,dword ptr [ecx]
00412332 jmp dword ptr [eax]
-----

343 ◆rCEzuNnL0g:2008/09/10(水) 23:32:27
つまり、メンバ関数ポインタを使うと動作が遅くなるということ。

344 ◆rCEzuNnL0g:2008/09/10(水) 23:42:01
virtualな関数を持つクラスを多重継承したときに、ずれたポインタでthisを渡さなければいけないときは、
ちゃんとずらして渡しているんだなあと。

345 ◆rCEzuNnL0g:2008/09/10(水) 23:42:32
本当にコンパイラは、勝手に色々なことをしてくれますねえ。

346 ◆rCEzuNnL0g:2008/09/11(木) 00:45:59
東方とかデバッグどうしているんだろうね。
クリアーできないステージとか作っちゃわないのかなあ。

347 ◆rCEzuNnL0g:2008/09/11(木) 01:29:32
東方の弾って、基本撃ったらまっすぐ飛んでいるよね?
敵の弾の話だけれども。

348 ◆rCEzuNnL0g:2008/09/11(木) 02:52:14
Firebug Lite
http://getfirebug.com/lite.html
----
こんなのがあったんだ。

349 ◆rCEzuNnL0g:2008/09/11(木) 20:18:44
Sleipnirは
MFC + COM

350 ◆rCEzuNnL0g:2008/09/12(金) 19:09:17
PEInfo: PE Structure information

( base data )
entrypointaddress.: 0x1000a127
timedatestamp.....: 0x48b4c771 (Wed Aug 27 03:18:09 2008)
machinetype.......: 0x14c (I386)

( 5 sections )
name viradd virsiz rawdsiz ntrpy md5
.text 0x1000 0x9bc5 0xa000 6.08 33b42c7206c4f31e757a883ec2547f8c
.rdata 0xb000 0x30c6 0x4000 4.16 43c0b6753432e49b0bf939cf053250ad
.data 0xf000 0x778 0x1000 1.28 495ef169b5b15996b1839f1a943b45b0
.rsrc 0x10000 0x1ac 0x1000 3.46 7fda13786a06da6ad8e043a471a7124c
.reloc 0x11000 0xcba 0x1000 5.90 ea947a48fd3e02547711ad6622936bd6

351 ◆rCEzuNnL0g:2008/09/12(金) 19:21:41
処理時間の取得方法
http://www14.big.or.jp/~ken1/tech/tech19.html

352 ◆rCEzuNnL0g:2008/09/12(金) 19:28:28
(新)APIから知るWindowsの仕組み---目次:ITpro
http://www.itproexpo.jp/article/COLUMN/20070129/259838/

353 ◆rCEzuNnL0g:2008/09/12(金) 19:51:40
EncodePointer Function (Windows)
DecodePointer Function (Windows)

354 ◆rCEzuNnL0g:2008/09/12(金) 20:00:50
?QueryInterface@FActionData@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FByteArrayInputStream@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FByteArrayOutputStream@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FCmdUI@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FFileInputStream@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FFileOutputStream@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FGZip@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FHistoryData@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FOptionDialogData@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FSearchEngine@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FSearchItemCombo@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FSearchItemList@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FStatusBarItemData@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FToolBarButtonData@@UAGJABU_GUID@@PAPAX@Z
?QueryInterface@FToolBarButtonDataEx@@UAGJABU_GUID@@PAPAX@Z

355 ◆rCEzuNnL0g:2008/09/12(金) 20:03:29
沈黙を破ったホリエモン,ITを語る:ITpro
http://itpro.nikkeibp.co.jp/article/Interview/20080910/314505/

356 ◆rCEzuNnL0g:2008/09/12(金) 20:47:27
暇だったからCOMっぽいものを実装した。
まあ、あんまり意味が無いから削除。

357 ◆rCEzuNnL0g:2008/09/12(金) 20:47:47
あんまり完成しても感動しなかった。

358 ◆rCEzuNnL0g:2008/09/12(金) 21:15:11
DLLは・・・
エクスポートしたい全ての関数を持つ純仮想関数を持つクラスを宣言する。
でそれを継承した奴で中身のクラスを実装する。
中身のクラスをnewして純仮想関数を持つクラスにキャストして渡す関数をエクスポートする。
それをDeleteする関数をエクスポートする。

EXEは・・・
中身(中略)関数を呼び出す。
それで普通に->で関数を呼び出す。
要らなくなったら、それを(中略)関数で消す。

此れだと、出力したいClassのサイズが分からなくても大丈夫なので、絶対安心。
だからCOMとかは、バージョンが上がって新しいclassが一杯出るわけである、と某所で書いてあった。
まあ、詳しくは自分で調べてくだせう。

359 ◆rCEzuNnL0g:2008/09/12(金) 21:41:30
COM総合研究所 - COM研究室
http://www5.plala.or.jp/atata/com/
---
という事で実際のCOMの実装でも見てみるか。

360 ◆rCEzuNnL0g:2008/09/12(金) 21:56:08
え・・・
クラスのメンバー関数が__stdcallってどういうこと・・・?

361 ◆rCEzuNnL0g:2008/09/12(金) 22:04:42
結局今の僕には理解できませんでした。

362 ◆rCEzuNnL0g:2008/09/12(金) 22:06:27
取り敢えず、基礎は触ったのでアセンブリを読んでみる。

363 ◆rCEzuNnL0g:2008/09/12(金) 22:09:26
QueryInterfaceはメンバ関数なんだろ?
じゃあ、どこでそのメンバを実体化する?
CoInitializeのタイミング? <-これは無いね><
まあ、それは実装によるのだろう。

364 ◆rCEzuNnL0g:2008/09/12(金) 22:15:05
COMが利用されているとすると色々と厄介だなあ。
関数ポインタが多いのも頷ける。

365 ◆rCEzuNnL0g:2008/09/12(金) 22:19:03
COMキモイ><

366 ◆rCEzuNnL0g:2008/09/12(金) 22:21:45
あ、別にメンバ関数のQueryInterfaceから取得する必要は無いか。
適当なグローバルな関数(若しくはclassのstaticな関数)でQueryInterface的なことをやれば良いか。
どちらにせよ色々面倒だ。

367 ◆rCEzuNnL0g:2008/09/12(金) 22:32:46
コンパイラ実装とか出来ません><
VM実装とか出来ません><
という事で、もうプログラミングなんて出来ません><
まあ、趣味で(ry

368 ◆rCEzuNnL0g:2008/09/12(金) 22:35:49
という事で、Lispでも作ってみる?
某所でスキームの実装の話を見たので読み返してみるか。

369 ◆rCEzuNnL0g:2008/09/12(金) 23:05:41
なるほど。
数値じゃなくて、エスケープ関連の文字じゃなかったらatomに決まってますね。
すげー。頭良い。

To たつひろ

370 ◆rCEzuNnL0g:2008/09/12(金) 23:07:14
atom以前のatomがあったらそれを流す、無いならば作る。
まあ、当たり前か。

371 ◆rCEzuNnL0g:2008/09/12(金) 23:08:28
うーん。
やっぱりC++的に言えばダウンキャストしているなあ。
やっぱりそうするしかないよなあ。

372 ◆rCEzuNnL0g:2008/09/12(金) 23:09:39
>>1-370まではアップキャストとダウンキャストを間違えて覚えていた。
まあ、今脳内修正したから良いや。

373 ◆rCEzuNnL0g:2008/09/12(金) 23:14:34
アップキャストは安全、
ダウンキャストは危険、ということ。意味分からんねwwww

374 ◆rCEzuNnL0g:2008/09/12(金) 23:14:53
暇だし、atoi関数でも実装してみる。

375 ◆rCEzuNnL0g:2008/09/12(金) 23:16:03
int atoi(char *str){
int b = 0;
while(*str){
b = b * 10 + (*str - '0');
}
return b;
}

376 ◆rCEzuNnL0g:2008/09/12(金) 23:16:18
一分十秒か・・・

377 ◆rCEzuNnL0g:2008/09/12(金) 23:18:11
まあ、此れだと符号が考慮に入っていないので、本気でやるならば

int atoi(char *str){
int f = 0, b = 0;
if(*str = '-') f = 1
while(*str){
b = b * 10 + (*str - '0')
}
return f ? -b : b;
}

378 ◆rCEzuNnL0g:2008/09/12(金) 23:19:46
コロンが二箇所ほど抜けてますね。
はい。
しかし本当はatoiは空白を読み飛ばさないといけないので、

int atoi(char *str){
int f = 0, b = 0;
whlie(*str++ == ' ');
if(*str = '-') f = 1;
while(*str){
b = b * 10 + (*str - '0');
}
return f ? -b : b;
}

379 ◆rCEzuNnL0g:2008/09/12(金) 23:27:07
しかし10進数しか変換できないのも変な話だ。どうせならば二進数とか十六進数とか八進数とか三進数とか五進数とか、良く分からない変数も変換したい。
まあ、C標準関数に含まれているがそれも自分で実装しよう。
関数名が分からないので、適当にkでいいや。

int k(char *str, int b){
int f = 0, r = 0
while(*str++ == '');
if(*str == '-') f = 1;
whlie(*str){
if('0' <= *str && *str <= '9')
r = r * b + (*str - '0');
else if('A' <= *str && *str <= 'Z')
r = r * b + (*str - 'A' + 10);
else if('a' <= *str && *str <= 'z')
r = r * b + (*str - 'a' + 10);
else
return NULL;
}
return f ? -b : b;
}

380 ◆rCEzuNnL0g:2008/09/12(金) 23:27:30
return f ? -r : r;
じゃんねえ

381 ◆rCEzuNnL0g:2008/09/12(金) 23:28:40
ということは、
int atoi(char *str){
return k(str, 10);
}
でおk。

382 ◆rCEzuNnL0g:2008/09/12(金) 23:51:58
FPI_CreateInstanceとか見るとCOMの初期化のようだ(笑)
本当に、早くPDK公開しないかなあ。

383 ◆rCEzuNnL0g:2008/09/13(土) 00:11:06
WinMainからmainでいうargc,argvを利用したいときの話。
__argc,__argvを利用すれば良い。
その実体は(*__p___argc())であり
extern int *__p___argc(void);である。
また__wargvも存在する。

384 ◆rCEzuNnL0g:2008/09/13(土) 00:14:39
やっぱりネイティブAPIあたりを弄くらないと面白くないのかなあ。

385 ◆rCEzuNnL0g:2008/09/13(土) 11:43:36
#define _CRTIMP __declspec(dllimport)


#if defined(_DLL) && defined(_M_IX86)

_CRTIMP int * __cdecl __p___argc(void);
_CRTIMP char *** __cdecl __p___argv(void);
_CRTIMP wchar_t *** __cdecl __p___wargv(void);
_CRTIMP char *** __cdecl __p__environ(void);
_CRTIMP wchar_t *** __cdecl __p__wenviron(void);
_CRTIMP char ** __cdecl __p__pgmptr(void);
_CRTIMP wchar_t ** __cdecl __p__wpgmptr(void);


#endif /* _M_IX86 && _DLL */

#if !defined(_M_CEE_PURE)
_CRTIMP extern int __argc; /* count of cmd line args */
_CRTIMP extern char ** __argv; /* pointer to table of cmd line args */
_CRTIMP extern wchar_t ** __wargv; /* pointer to table of wide cmd line args */
#else
_CRTIMP int* __cdecl __p___argc();
_CRTIMP char*** __cdecl __p___argv();
_CRTIMP wchar_t*** __cdecl __p___wargv();
#define __argv (*__p___argv())
#define __argc (*__p___argc())
#define __wargv (*__p___wargv())
#endif

386 ◆rCEzuNnL0g:2008/09/13(土) 12:04:34
継承の実装も分かった。
仮想継承の実装も分かった。
では、例外の実装は?

387 ◆rCEzuNnL0g:2008/09/13(土) 12:34:44
OllyDbgでアタッチしながらプログラム動かしたら例外の部分でおかしくなった。
という事でまあいいや。

388 ◆rCEzuNnL0g:2008/09/13(土) 12:37:04
SPX_IdleProcで一秒毎に来ると思ったら、メッセージで実現しているようだ。
で、そのメッセージの関連付けはSPX_Initnaze(?)の返したウィンドウである。
で、タイマーIDは12345なので、それをタイマーIDでSPXで使われていたが、ダブってしまうというw
駄目実装だなwwww

389 ◆rCEzuNnL0g:2008/09/13(土) 13:04:37
なんだか、プラグインの実装がCOMっぽい。COM勉強して良かった。
ということは、第一引数はIUnknown**?

390 ◆rCEzuNnL0g:2008/09/13(土) 13:05:12
それともFIObject**?

391 ◆rCEzuNnL0g:2008/09/13(土) 18:05:56
やっぱりCOMコンポーネントです\(^o^)/オワタ

392 ◆rCEzuNnL0g:2008/09/13(土) 19:39:38
msclr::_detail::smart_com_ptr
うまー?

393 ◆rCEzuNnL0g:2008/09/13(土) 19:59:31
IWebBrowser2を利用したいなあと思って、何をincludeすればいいのかを知りたかったので、適当に調べたら、
ExDisp.h
をインクルードすれば良いみたい。

394 ◆rCEzuNnL0g:2008/09/13(土) 21:06:23
という事で、適当にSleipnirで上手くブラウザが弄くれるか試してみる。

395 ◆rCEzuNnL0g:2008/09/13(土) 21:07:00
まあ、Browser触るんだったらスクリプトでも出来るんだけれども、MemoPanelで取り込むんだったら、
ネイティブの方がいいかなあと。

396あぼーん:あぼーん
あぼーん

397 ◆rCEzuNnL0g:2008/09/13(土) 22:12:22
結構簡単にIWebBrowser2 *を取得して色々と出来た。
という事で、適当にwindow系でも弄ってみるか。

398 ◆rCEzuNnL0g:2008/09/14(日) 13:46:02
IDA Pro 4.9 Freewareを落とし中。

399 ◆rCEzuNnL0g:2008/09/14(日) 13:52:08
起動して適当なEXEを解析中・・・

400 ◆rCEzuNnL0g:2008/09/14(日) 14:31:44
使いにくい><
アセンブリリストはもっと小さいほうがいいよ><

401 ◆rCEzuNnL0g:2008/09/14(日) 14:32:51
と、言うことでWinDbgを入れるお!

402 ◆rCEzuNnL0g:2008/09/14(日) 14:44:09
WinDbgは使いにくい。でも此れが使えこなせないと駄目なのかなあ。
やっぱりOllyDbgが一番良いお!

403 ◆rCEzuNnL0g:2008/09/14(日) 23:48:25
JavaScriptでマルチスレッド(navigator.newWorkerPool) - 素人がプログラミングを勉強するブログ
http://d.hatena.ne.jp/javascripter/20080914/1221385821
----
ん?
マルチスレッドの動作の確認になっていないと思うが・・・

404 ◆rCEzuNnL0g:2008/09/15(月) 00:01:54
こうすれば、右クリックと選択を防止できるんだ。
右クリックは知っていたが、選択ははじめて知った。
----
<body oncontextmenu="return false" onselectstart="return false">

405 ◆rCEzuNnL0g:2008/09/15(月) 00:52:15
Google Talk用のURL
http://talkgadget.google.com/talkgadget/popout?hl=ja

406 ◆rCEzuNnL0g:2008/09/15(月) 13:15:29
IEで
(new Array(arguments)).slice(2)
という書き方が有効じゃなくてウザかった。

407 ◆rCEzuNnL0g:2008/09/15(月) 13:27:07
>>403
うーん。やっぱり交互に表示されないということに意味があるんだよなあ。

408 ◆rCEzuNnL0g:2008/09/15(月) 13:28:41
JavaScriptでスレッドか・・・
正直C/C++じゃないと使いどころがなくね?

409 ◆rCEzuNnL0g:2008/09/15(月) 18:54:27
WaitForMultipleObjects()ってMAXIMUM_WAIT_OBJECTS(64)個しか待てないのかよ。
100個待とうとして上手くいかなかった。馬鹿野郎。

410 ◆rCEzuNnL0g:2008/09/15(月) 18:55:47
今後の見通しとしては、
COM?
第三の言語?
JavaScript?
C/C++の標準を極める?
ソフト解析を極める?
のどれかにしたい。
まあ、十月一杯は学校の勉強を頑張ります><

411 ◆rCEzuNnL0g:2008/09/15(月) 18:56:03
十月一杯まで。

412 ◆rCEzuNnL0g:2008/09/15(月) 18:57:44
ソケットプログラミングは汎用性がある程度高いけれども、レベルが高いので、
WinInetから攻めていくこととする。

413 ◆rCEzuNnL0g:2008/09/15(月) 19:12:35
文字コードを考えなければ以下のソースで、読み込める。
-----
#include <iostream>
#include <windows.h>
#include <wininet.h>
#include <tchar.h>

#pragma comment(lib, "wininet.lib")

int main(int argc, char **argv){
HINTERNET hInet = InternetOpen(_T("TEST"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hFile = InternetOpenUrl(hInet, _T("http://mimizu.karou.jp/&quot;), NULL, 0, INTERNET_FLAG_RELOAD, 0);

char buff[1024];
DWORD dwSize;

while(1){
InternetReadFile(hFile, buff, sizeof(buff) - 1, &dwSize);
if(dwSize == 0) break;

buff[dwSize] = '\0';

std::cout << buff;
}

std::cout << std::endl;
}

414 ◆rCEzuNnL0g:2008/09/15(月) 19:13:51
Wininet Programing
http://bangdoll.xrea.jp/wininet/

415 ◆rCEzuNnL0g:2008/09/15(月) 19:16:51
>>413
ハンドルを閉じるのを忘れていた><
-----
#include <iostream>
#include <windows.h>
#include <wininet.h>
#include <tchar.h>

#pragma comment(lib, "wininet.lib")

int main(int argc, char **argv){
HINTERNET hInet = InternetOpen(_T("TEST"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hFile = InternetOpenUrl(hInet, _T("http://mimizu.karou.jp/&quot;), NULL, 0, INTERNET_FLAG_RELOAD, 0);

char buff[1024];
DWORD dwSize;

while(1){
InternetReadFile(hFile, buff, sizeof(buff) - 1, &dwSize);
if(dwSize == 0) break;

buff[dwSize] = '\0';

std::cout << buff;
}

std::cout << std::endl;

InternetCloseHandle(hFile);
InternetCloseHandle(hInet);
}

416 ◆rCEzuNnL0g:2008/09/15(月) 19:23:24
一番見たい、ミクロソフトからの情報が見つからないなあ。

417 ◆rCEzuNnL0g:2008/09/15(月) 19:27:19
InternetReadFile()でデータを取得するときは、
bRet && dwSize == 0
で読み込み完了を見たほうが良いみたい。
InternetReadFile()の返却した値がFALSEの時にGetLastErrerの値を調べないとなあ。

418 ◆rCEzuNnL0g:2008/09/15(月) 19:28:58
GetLastErrorだな。

419 ◆rCEzuNnL0g:2008/09/15(月) 19:32:49
Microsoftの解説あった。
-----
WinINet Reference (Windows)
http://msdn.microsoft.com/en-us/library/aa385483(VS.85).aspx

420 ◆rCEzuNnL0g:2008/09/15(月) 20:53:38
独自ドメイン、TLDって自由化されるんじゃなかったの?
http://cube.dmget.com/08/08/02-1800.php
----
んなもん、一人でTLDを占有できたら誰がルートサーバの面倒を見るんだよ。

421 ◆rCEzuNnL0g:2008/09/15(月) 21:25:11
SleipnirのSuperViewで、ページが移動しそうになったらリンク先を新しいタブで開く設定が欲しい。

422 ◆rCEzuNnL0g:2008/09/15(月) 21:26:50
SuperViewでGoogle Talkをやっているときにリンクをクリックして開くことが出来ないからである。

423 ◆rCEzuNnL0g:2008/09/15(月) 22:52:07
C++でstd::getline()という関数があるのだが、此れが一番行を取得するのが良さそう。
何故ならば、std::stringで一行の内容を取得できるからである。
因みにstringをインクルードしなければなりません。
多分此れがistreamクラスの所属になっていないのは、std::stringに依存するのはよろしくないと判断したんだろう。
だけれども、此れが無いとC++は使い物にならん!

424 ◆rCEzuNnL0g:2008/09/15(月) 23:02:19
std::basic_istreamを継承してるので、std::ifstreamとかstd::cinとか自分が作ったのでもいけるねえ。

425 ◆rCEzuNnL0g:2008/09/16(火) 18:29:26
Lunascapeトリプルエンジンキター

426 ◆rCEzuNnL0g:2008/09/16(火) 18:31:02
どうせ使わないけれども。
Sleipnirも焦れと。
取り敢えず他のプラグインの対応は後回しにして、中に詰め込め!

427 ◆rCEzuNnL0g:2008/09/16(火) 18:37:35
入れた、今から消す。

428 ◆rCEzuNnL0g:2008/09/16(火) 18:38:05
六分ぐらい使ってやめました。
Sleipnirも頑張ってください><


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板