2006-02-02-01-class DLL - 3 - project-enigma

2006-02-02-01-class DLL - 3

>> Site top >> weblog >> 月別アーカイブ >> 2006年02月のlog >> 2006-02-02-01-class DLL - 3

最終更新日付:2013/12/31 07:39:40


class DLL - 3

2006 年 02 月 02 日

さて、ここからはちょっと微妙な話になる。5年前の陰郎は LoadLibrary( ) やFreeLibrary( ) について完全に理解していたわけではないようだ(今もそうかもしれないが)。というのは、LoadLibrary( ) や FreeLibrary( ) を複数回数呼び出すことによるトラブルは、API の側で参照カウントを管理することで対処がなされているにも関わらず、陰郎の DLL ラッパークラスは自前で参照カウントを実装し、オブジェクトのライフサイクルを管理していたからだ。

前回は説明を単純化するために参照カウント関連は完全に省いて書いたが、実際にはSampleDLL クラスは参照カウントを実装し、値オブジェクトとして使用されるハンドルクラステンプレートがそれをさらにラップする...このあたりの実装はボツにする予定なので詳しくは書かないが、要するに必要の無いことをやっていました、ということだ。それに、オブジェクトの new や delete にまつわる問題を回避するために参照カウントハンドルを使用するとしても、最初から組み込んでしまうとそうしたくない場合に困る。C++ には多重継承があるのだし、それ以外の方法でも参照カウントを利用した DLL ラッパーは必要に応じて合成できる...それならば DLL ラッパー単体の実装はシンプルである方が良い。これが参照カウント実装をボツにするもうひとつの理由である。

まだある。前回の説明用サンプルコードでいうところの DLLBase クラスがあるせいで、DLL 個別に定義する派生クラスは小さい割りに記述が面倒になる。これを、5年前の陰郎はプリプロセッサマクロで乗り切ってしまった。しかし、5年経った今見てみると、明らかに幼稚だ。今となってはプリプロセッサマクロを避けた方が良い理由は痛いほどわかっているし、DLL のラッパークラスなどそうそう乱造するものでもない。というわけで、どうやらマクロもやっつけなければならないようだ。

...となると、どうやら public な const 関数ポインタをもってメンバ関数のように見せかけるというテクニックしか面白いものはないということになる...やはり人間5年も経つと考え方や見え方が大きく変わるようだ。前回、そのうち公開しようかなどと書いてしまったが、どうやら思いとどまった方がいいのかもしれない。

 

コメント

このページにコメントする

 

このページのタグ

Page tag : 開発

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.