Visual Studio の def で IMPORTS が使えない件

2つの異なるC DLLから同じ名前の2つの関数を呼び出す - CODE Q&A

以前は、リンカ.defファイルを使用してインポートされたシンボルの名前を変更することができました。おそらくまだ可能ですが、.defファイルが広く使用されているので、ドキュメントを見つけるのは難しいです。
現在のMSDNドキュメントでは、importsディレクティブを「予約済みキーワード」としてリストしています。これが機能を削除したことを意味するのか、それとももうサポートしたくないのかはわかりません。
importsディレクティブを説明するページは次のとおりです。

http://www.digitalmars.com/ctg/ctgDefFiles.html#imports

他のkludgyの代替案は次のとおりです。
競合するAPIのラッパー関数を作成します。これらの関数は、LoadLibrary()/GetProcAddress()ダンスを行うことができます。他のすべての非競合関数は、通常どおり暗黙的にリンクすることができます。実際には、この解決策はおそらくこの回答の3の最小クラッジです。
各リンクが競合する名前を持つ1つまたは他のライブラリにのみリンクするような2つのラッパーDLLを作成します。ラッパーDLLで異なる名前を使用して、単に実際のライブラリに移動します。ラッパーライブラリはすべてのAPIをラップする必要はありません。競合するものをラップするだけです。

えー、ほんとかよーと思って試行錯誤してみたらできた。

実は、 EXPORTS の中で設定できる

例えば、KERNEL32.DLL の GetVersion をインポートしたいなら
    GetVer=KERNEL32.GetVersion @ 123
とやれば、 序数 1213 の GetVerという関数にインポートできる

また、
     MofMof=COMCTL32.#9 @ 124 NONAME
とやれば 序数124の関数に COMCTL32.DLLの 9番目の関数をインポートできる

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です