kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

続:動的ロード

とっちゃんwrote:

ま、またしても...両方使ってます(^^;
なんで、そんなにおいしいえさをぶら下げてくるかなぁwww

ええ、読者層の分析ばっちりですから(うそ)♪

GetProcAddress は C++ なら、
void (*pfn)( int hoge );
(FARPROC*&)pfn = GetProcAddress( hInst, ”foo” );
(snip)
DelayLoad は、ロード失敗(LoadLibrary/GetProcAddressの失敗)で
構造化例外が出るというのが、鬼門です。

おお、なるほど…C++はBetter C位しか使ってないので、気付かなかったです。構造化例外はまだ使ったことがないですが、例外周りもネタがあるので、後日のエントリで。
社本@ワックwrote:

SHLWAPI APIなど、Windows(IE)のバージョンによって提供されていないものには、DelayLoadを使うようにしています。んで、起動時には、SHLWAPIのDLLがあるかどうかをチェックします。
独自の標準DLLの場合は、手で遅延ロードするクラスを使うようにしています。もっともCOMを使うことが多いので、それほど手で遅延ロードすることはないですけどね。

COM…VBからしか使ったことがありません(^^;。呼び出される側で作ったのはActive X位かなぁ。IEのバージョンによって使えるAPIに差まであって大変でしたね。「NT4.0でDLLのロードエラーが出るんですけど」と1年くらい前に報告があったときは愕然としました。確かデスクトップのショートカットを全部リストアップするAPIがNT4.0のIEには無かった…んだったかな(デスクトップ統合の有無だったかもしれない)。
で、まぁこういうネタを書いたのは、長年(Windows 3.1の頃から)書いてきたけれど、身近に相談できる人がいなくて、「もっといいやり方があるんじゃないかな」と思い出したこともあります。基本編には出てこないけれど、人によってやり方に差が出そうな(?)ところなんかをネタふりして、コメントorトラックバックもらえればなと。オープンソースのプロダクト参考にするって手もあるけれど…ね。