私はかなり長い間ダイナミックライブラリとGetProcAddressのものを使用してきましたが、それは常に退屈で、インテリセンスの敵対的で、物事を行うための醜い方法のようです。
古いOSとの互換性を維持しながら、新しい機能をインポートするためのクリーンな方法を知っている人はいますか。
Vistaの一部であるXMLライブラリを使用したいとします。LoadLibraryWを呼び出し、HANDLEがnullでない場合は、関数を使用できます。
しかし、私は本当に行きたくありません、#typedef (void*)(PFNFOOOBAR)(int, int, int)
そしてPFNFOOOBAR foo = reinterpret_cast<PFNFOOOBAR>(GetProcAddress(GetModuleHandle(), "somecoolfunction"));
、その間ずっと50、方法。
この混乱を避けることができる非ハックな解決策はありますか?
プロジェクト設定にcoolxml.libを追加してから、delayload dllリストにcoolxml.dllを含め、必要なファイルで使用するいくつかの関数シグネチャをコピーすることを考えていました。次に、LoadLibraryWがnull以外で返されることを確認し、nullでない場合は、通常のプログラムフローのようにVistaブランチに分岐します。
しかし、LoadLibraryとdelay-loadが連携して機能するかどうか、また、分岐予測によって問題が発生しない場合があるかどうかはわかりません。
また、このアプローチが機能するかどうか、および次のSDKにアップグレードした後に問題が発生しないかどうかもわかりません。