2016-07-18 7 views
1

defファイルを使用して序数をエクスポートできます。ただし、システムDLLはdefファイルを使用しません。shell32.dllは569序数のエクスポートを持ち、user32.dllは181序数のエクスポートを持っています。defファイルなしで序数をエクスポート

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

+2

"システムDLLはdefファイルを使用していません" - 本当ですか? (私はそうではありません)私は序文(VS6の誰ですか?)を使用しなければならなかったので、しばらくしているので、回避する方法があるかどうか疑問に思っています。しかし、再び私は、あなたが序列がいくつかのdllのために作成/定義されていることを伝えることができるかどうか分からない。 –

+1

私は@ XerenNarcyに同意します:そのシステムDLLが.DEFファイルでビルドされていない証拠がわかりません。しかし、これをソースコードで[#pragma comment(リンカ、/エクスポート:エントリ名[、@序数[、NONAME]] [、DATA] ")'](https://msdn.microsoft。 com/ja-jp/library/hyx1zcd3.aspx)。 – EJP

+2

defファイルに対しては何がありますか? @DavidHeffernanの保守性を一言で言えば、 –

答えて

3

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

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

マイクロソフトではこれについて何も仮定することはできません。これらのDLLを過去23年間バイナリ互換にすることを余儀なくされました。私たちの負担ではありません。

関連する問題