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

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

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

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も頑張ってください><

429 ◆rCEzuNnL0g:2008/09/16(火) 18:39:35
91.71MBもあってでかいなーと思ったけれども、
Sleipnirもそれくらいあった。

430 ◆rCEzuNnL0g:2008/09/16(火) 21:27:06
Visual C++の小技
http://hp.vector.co.jp/authors/VA000092/win32/vc-tech.html
---
>__declspec(naked) がポイントでした。これはコーリングコンベンションではなく、関数の実体を修飾するもので、プロローグ・エピローグのコードを全く生成しないようコンパイラに指示します。アセンブラで"ret"を書かないと、関数からのリターンもしないという徹底した仕様のようで(笑)。
-----
__declspec(naked)いいねえ。

431 ◆rCEzuNnL0g:2008/09/16(火) 21:31:00
うはwww
本当にretすら生成しないwwwww
これを利用すればラベルとか使わなくてもC/C++のように関数宣言出来るじゃん。
それに型とか明示できるし、とても少ない内容のソースコードならばインライン化してくれる筈。

432 ◆rCEzuNnL0g:2008/09/16(火) 21:32:17
駄目だ。
最適化してくれないorz...

433 ◆rCEzuNnL0g:2008/09/16(火) 21:37:38
普通にやれば良いという事に気づいた。
---
int GetLastError_(){
__asm{
mov eax, dword ptr fs:[00000018h]
mov eax, dword ptr [eax+34h]
}
}

434 ◆rCEzuNnL0g:2008/09/16(火) 22:51:50
MFC的なものを作りたいなあと勝手に思っていたり。
まあ、俺がMemoPanelでやったことみたいにすればいいかと。
全てのメッセージを網羅すれば、ジャンプテーブルになるだろうし。

435 ◆rCEzuNnL0g:2008/09/16(火) 22:58:28
簡単にすれば、MFC的なもので、全てのバーチャルな関数を呼び出すようにすればいいと思う。
まあ、その為にはインスタンスへのポインタを持たねばならないが、それは簡単にどうにかできるので良いや。
簡単なアセンブリは読めるし、書けるようになりますた。

436 ◆rCEzuNnL0g:2008/09/16(火) 22:58:41
!Microsoft IME Dictionary Tool
!Version:
!Format:WORDLIST
!User Dictionary Name: C:\Documents and Settings\Owner\Application Data\Microsoft\IMJP9_0\imjp9u.dic
!Output File Name: C:\Documents and Settings\Owner\
!DateTime: 2008年9月16日 22:54

あちゃー (ノ∀`) アチャー 名詞 AA
いい (・∀・)イイ!! 名詞 AA
いらね (゚⊿゚)イラネ 名詞 AA
えー ( ゚д゚) 名詞 AA
えー ('A`) 名詞 AA
おわた \(^o^)/オワタ 名詞 AA
きた キタ━━━━━━(゚∀゚)━━━━━━ !!!!! 名詞 AA
しゃきーん (`・ω・´) シャキーン 名詞 AA
しょぼーん (´・ω・`)ショボーン 名詞 AA
じゅうにこっき 十二国記 名詞
たーん ;y=ー( ゚д゚)・∵. ターン 名詞 AA
だっしゅ ――― 名詞
なかま (・∀・)人(・∀・)ナカーマ 名詞 AA
にやにや (・∀・)ニヤニヤ 名詞 AA
ばんざい ∩( ・ω・)∩バンジャーイ 名詞 AA
ばんじゃーい ∩( ・ω・)∩バンジャーイ 名詞 AA
ぷぎゃー m9(^Д^)プギャー! 名詞 AA
ぷっ ( ´,_ゝ`)プッ 名詞 AA
へー ( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー 名詞 AA
ぺっ ( ゚д゚)、ペッ 名詞 AA
ぽかーん ( ゚д゚)ポカーン 名詞 AA
まだー マダァ-? (・∀・ )っ/凵⌒☆チンチン 名詞 AA
() (笑) 名詞

437 ◆rCEzuNnL0g:2008/09/16(火) 23:01:51
!Microsoft((_space_))IME((_space_))Dictionary((_space_))Tool
!Version:
!Format:WORDLIST
!User((_space_))Dictionary((_space_))Name:((_space_))C:\Documents((_space_))and((_space_))Settings\Owner\Application((_space_))Data\Microsoft\IMJP9_0\imjp9u.dic
!Output((_space_))File((_space_))Name:((_space_))C:\Documents((_space_))and((_space_))Settings\Owner\
!DateTime:((_space_))2008年9月16日((_space_))22:54

あちゃー((_tab_))(ノ∀`)((_space_))アチャー((_tab_))名詞((_tab_))AA
いい((_tab_))(・∀・)イイ!!((_tab_))名詞((_tab_))AA
いらね((_tab_))(゚⊿゚)イラネ((_tab_))名詞((_tab_))AA
えー((_tab_))( ゚д゚)((_tab_))名詞((_tab_))AA
えー((_tab_))('A`)((_tab_))名詞((_tab_))AA
おわた((_tab_))\(^o^)/オワタ((_tab_))名詞((_tab_))AA
きた((_tab_))キタ━━━━━━(゚∀゚)━━━━━━((_space_))!!!!!((_tab_))名詞((_tab_))AA
しゃきーん((_tab_))(`・ω・´)((_space_))シャキーン((_tab_))名詞((_tab_))AA
しょぼーん((_tab_))(´・ω・`)ショボーン((_tab_))名詞((_tab_))AA
じゅうにこっき((_tab_))十二国記((_tab_))名詞
たーん((_tab_));y=ー(((_space_))゚д゚)・∵.((_space_))ターン((_tab_))名詞((_tab_))AA
だっしゅ((_tab_))―――((_tab_))名詞
なかま((_tab_))(・∀・)人(・∀・)ナカーマ((_tab_))名詞((_tab_))AA
にやにや((_tab_))(・∀・)ニヤニヤ((_tab_))名詞((_tab_))AA
ばんざい((_tab_))∩(((_space_))・ω・)∩バンジャーイ((_space_))((_tab_))名詞((_tab_))AA
ばんじゃーい((_tab_))∩(((_space_))・ω・)∩バンジャーイ((_tab_))名詞((_tab_))AA
ぷぎゃー((_tab_))m9(^Д^)プギャー!((_tab_))名詞((_tab_))AA
ぷっ((_tab_))(((_space_))´,_ゝ`)プッ((_tab_))名詞((_tab_))AA
へー((_tab_))(((_space_))・∀・)つ〃∩((_space_))ヘェーヘェーヘェーヘェーヘェー((_tab_))名詞((_tab_))AA
ぺっ((_tab_))( ゚д゚)、ペッ((_tab_))名詞((_tab_))AA
ぽかーん((_tab_))(((_space_))゚д゚)ポカーン((_tab_))名詞((_tab_))AA
まだー((_tab_))マダァ-?((_space_))(・∀・((_space_)))っ/凵⌒☆チンチン((_tab_))名詞((_tab_))AA
()((_tab_))(笑)((_tab_))名詞

438 ◆rCEzuNnL0g:2008/09/16(火) 23:03:56
兄が登録していたMS-IME用の辞書がとても邪魔だったので、全て消してみた。
取り敢えず、バックアップ用にテキストで出力して、
"\t" -> ((_tab_))
" " -> ((_space_))
と置き換えしておいた。
           全角の空白は連続していても消えないはずなので、そのまま。

439 ◆rCEzuNnL0g:2008/09/16(火) 23:05:44
だって、
「いいじゃん」を変換するのに「(・∀・)イイ!!じゃん」
と出るのはさすがにイラッと来る。
やっぱり初期状態が一番使いやすい。

440 ◆rCEzuNnL0g:2008/09/16(火) 23:15:35
>>434-435
うーん。
ライブラリ的なものは難しいなあ。
DLLにするのもなんだし。スタティックライブラリにしてみるか?
取り敢えず、最初は良く使うメッセージを中心に実装すれば良いと思った。

441 ◆rCEzuNnL0g:2008/09/17(水) 00:19:26
普通にクラス中にstaticな関数を入れればいいじゃん!
アホだ俺!

442 ◆rCEzuNnL0g:2008/09/17(水) 00:32:26
JavaScript1.7と1.8は勉強しなおす必要性があるようだ。
というか、初めから勉強していないのだが。

443 ◆rCEzuNnL0g:2008/09/17(水) 19:49:02
__thiscallは型変換が出来ないので、
一度メンバ関数ポインタで取得して、その後インラインアセンブリで取得すれば良い。
以下、実証コード。
------
#include <iostream>

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

virtual
int Get1() = 0;
virtual
int Get2() = 0;
virtual
void Set1(int) = 0;
virtual
void Set2(int) = 0;
};

class CSub : public ISuper{
public:
CSub()
: x(), y()
{}

virtual
int Get1(){
return x;
}
virtual
int Get2(){
return y;
}
virtual
void Set1(int _x){
x = _x;
}
virtual
void Set2(int _y){
y = _y;
}

private:
int x, y;
};

int main(int argc, char **argv){
CSub x;
int (ISuper::*func1)();
void (ISuper::*func2)(int);
func1 = &ISuper::Get1;
func1 = &ISuper::Get2;
func2 = &ISuper::Set1;
func2 = &ISuper::Set2;

void *p;
__asm{
push eax
mov eax, func1
mov p, eax
pop eax
}

std::cout << p << std::endl;

int i;

__asm{
push ecx
lea ecx, x
call p
mov i, eax
pop ecx
}
}

444 ◆rCEzuNnL0g:2008/09/17(水) 21:20:12
ニコニコ動画とかに、大量のメッセージボックスを出して
うわあああああああああああああああああああ
という作品があるが、あれをリアルに再現するにはどうすればいいだろうか。
出来るだけMessageBox関数でやりたいがあれを利用すると閉じるまで処理が止まるので、
スレッド+MessageBoxでいいと思う。
という事で、五十個ぐらいMessageBoxを出すプログラムでも作る。

445 ◆rCEzuNnL0g:2008/09/17(水) 21:31:05
#include <iostream>
#include <vector>
#include <windows.h>
#include <process.h>

unsigned int __stdcall thread(void *){
MessageBox(NULL, L"うああああああああああああああ", L"うわああああああああああああ", MB_OK);

return 0;
}

int main(int argc, char **argv){
std::vector<HANDLE> v;

for(int i = 0; i < 50; i++)
v.push_back((HANDLE)_beginthreadex(NULL, 0, thread, NULL, 0, NULL));

WaitForMultipleObjects(v.size(), &v[0], FALSE, INFINITE);

for(int i = 0, len = v.size(); i < len; i++){
CloseHandle(v[i]);
}
}

446 ◆rCEzuNnL0g:2008/09/17(水) 21:33:15
後はタイミングにあわせて上手くbeginthreadすればいいと思う。
例えばSleep関数使うとか。

任意の位置で出したいのならば、その為にウィンドウを作れば良い。
今はそこまでかまっていられない。
音は・・・。どうすればいいんだろう。

447 ◆rCEzuNnL0g:2008/09/17(水) 21:37:07
MessageBeep(MB_ICONHAND);
で「ボン」というエラー音がだせるみたい。

448 ◆rCEzuNnL0g:2008/09/17(水) 21:40:43
和音はむりっぽいなあ。

449 ◆rCEzuNnL0g:2008/09/18(木) 01:40:43
うーん。
俺は何をしたいのだろうか。
何か方向性も持たぬまま、パソコンの前に座っていても何も起こるはずが無い。
取り敢えず、十一月に入るまではパソコンを出来るだけ触らないようにしよう。
そして、それまでに勉強の習慣を付けなければならない。
プログラミングはあくまでも趣味で嗜む程度であるから、本当に適当にやっていればいいんだ。
適当が一番勉強になる。

450 ◆rCEzuNnL0g:2008/09/18(木) 02:10:57
どうして__thiscallの関数のポインタは簡単に取得できないのだろうか。
いや、取得できてもC/C++の標準機能でどうしてvoid*とかにキャストできないのだろうか。
いや、俺は根本的に間違っていたのか。
確かC++にはC++の独自のキャストがあった筈だ。
それを試して駄目だったらもう寝よう。

451 ◆rCEzuNnL0g:2008/09/18(木) 02:15:10
試していないが、多分無理であろうという結論に達した。
という事で、そろそろ寝るか。
明日は補習もあるし。


新着レスの表示


名前: E-mail(省略可)

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

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

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

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