2

def ファイルを使用して序数をエクスポートできますが、システム dll は def ファイルを使用しません。それでも、shell32.dll には 569 個の序数エクスポートがあり、user32.dll には 181 個の序数エクスポートがあります。

defファイルなしで序数をエクスポートする方法はありますか?

4

1 に答える 1

5

エクスポートされたすべての関数には序数があります。リンカーは自動的にそれらに番号を付け、1 から始まります。しかし、正確な値を制御したい場合 (Microsoft がこれらの DLL を扱う必要があるように) 、.def ファイルを使用する必要があります。

これは、クライアント コードが以前に序数を使用していて、リビルドされない古いコードとのバイナリ互換性が必要で、エクスポートれた関数を追加または削除した場合にのみ必要です。99.99% 以内の精度で、クライアント コードは序数を使用してエクスポートされた関数をリンクすることはありません。代わりに常に名前を使用します。.def ファイルに NONAME 属性を指定して関数をエクスポートし、代わりに序数を使用するようにクライアント コードを強制した場合にのみ、序数の値に依存します。実際には、これはエクスポートを非表示にする場合にのみ行われます。

Microsoft はこれについて何の推測もできず、過去 23 年間、これらの DLL のバイナリ互換性を維持することを余儀なくされてきました。私たちのものではない重荷。

于 2016-07-18T06:43:00.277 に答える