ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

DLLの作り方

2006-07-28 03:28:51 | PG(VC++)

ちょっと作りたいなーと思ったものがあって、でもそれはDLLでしか作れないので、DLLの作り方を勉強

ついでにカスタムビルドというものの存在を初めて認識。
いや、存在は前から知ってたけど、何に使うものかさっぱり意識してなかったので(汗)
生成したDLLファイルを所定の場所にコピーするにはとっても便利♪

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

winsockのWSAStartupはDllMainから呼び出していいのか?

2006-07-27 20:35:36 | PG(ソケット通信)

winsockを使って通信をするサンプルを作る為に自分のウェブページのソースをコピペしてみたら、コンパイルエラーになる部分があったので修正。
(rmaskの「r」が全角文字になってたとか、soc+1はキャストが必要とか、インクルードするヘッダーはwinsock.hじゃなくてwinsock2.hの方がいいとか(爆))


ところで、今回はこれをDLL化しようとしたんだけど、winsockの場合は他の言語のライブラリと違って最初に一回だけWSAStartupで初期化し、最後にWSACleanupでクリーンアップしなければならない。

DLLの場合、ロード時や終了時にDllMainが呼ばれ、その第二引数の値によって どの時点で呼ばれたかが分かる。
なので、DLL_PROCESS_ATTACHで呼ばれたときにWSAStartupし、DLL_PROCESS_DETACHで呼ばれたらWSACleanupをすればちょうどいいじゃん!
と思ったんだけど。

マイクロソフトのSDKのページ.NETとの混在DLLのページにある制限事項を見ると、DllMainでは別DLLをロードしたり解放したりするようなことは禁止であり、問題が発生しうる例としてソケット関数呼び出しがバッチリ挙げられていた(泣)
自分で試した限りではとりあえず動いたし、DllMainでWSAStartupを呼び出している例もウェブ上で見かけたが…いいんだろうか。WSAStartupがDLLをロードしていなければたぶん大丈夫だと思うけど、どうなんだろう?
(たぶん、「絶対ロードしない」とは言い切れないだろうな~)

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

isほにゃらら

2006-07-27 00:49:14 | PG(言語比較)
プログラミング言語比較の文字判断で、C言語のisdigitとかが抜けていたのはなんでだろう?
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ナイトブレイカーズ!

2006-07-25 22:44:25 | 読書

夜にブレーカーが落ちると真っ暗で困るよね…という無関係な話はさておき。

例によって今頃、ソードワールドRPGアドベンチャー(1994~1997)を読破。

「アレクラストでロックって何じゃい」と思ってたので昔はあんまり読んでなかったんだけど、序盤はともかく、2巻目以降の小ネタやストーリーは面白かった。スチャラカ冒険隊なんかもゲストで登場する(デルヴァの森の後日談や「かくもささやかな凱歌」の続き)し、もっと早く読んでおけばよかった~!

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

C# 配列の長さ

2006-07-24 23:04:12 | PG(C#)

C#だって、配列の長さを取得する方法があるよな~と思って調べたら、やっぱり。あっさり見つかった。

ついでに次元数を取得する方法まであるのを発見。他の言語ではあまり聞かないなぁ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする