none
VisualC++2012でのDLLのXP向けビルドについて RRS feed

  • 質問

  • 足し算をするだけの簡単なDLL(test.dll)と、そのDLLをLoadLibraryで読み込むだけのテストプログラム(load.exe)をVisualStudio2012で作り、

    プラットフォームツールセットをv110_xpにして、Windows XP向けにビルドしたのですが、挙動が今一つ理解できません。

    load.exeはプラットフォームをv110_xpでビルドしないと、WindowsXPでは起動すらできませんが、test.dllはプラットフォームがv110_xpでなくても動作します。

    まとめると、以下のような挙動になりました。

    1. load.exe(v110) + test.dll(v110)  : 有効なアプリケーションではありません

    2. load.exe(v110) + test.dll(v110_xp) : 有効なアプリケーションではありません

    3. load.exe(v110_xp) + test.dll(v110) : exeが起動してDLLも読み込める。

    3. load.exe(v110_xp) + test.dll(v110_xp) : exeが起動してDLLも読み込める。

    1,2,4はわかるのですが、ケース3がよく分かりません。

    dllをv110_xpでビルドしていないので、exeは起動してLoadLibraryに失敗すると思うのですが違うのでしょうか?

    プラットフォームツールセットv110_xpはexeにしか関係しないのでしょうか?

    何卒よろしくお願いいたします。

    2014年11月20日 9:13

回答

  • in DLLs, MajorSubsystemVersion is ignored until Windows 8.

    https://code.google.com/p/corkami/wiki/PE#MajorSubsystemVersion_/_MinorSubsystemVersion

    • 回答としてマーク mkNIT 2014年11月24日 9:40
    2014年11月22日 18:20
  • VS2012 は使ってないし、そこらを詳しく見た事もないですけど1~4の挙動でおかしくないと思います。

    DLL が変わったという話は特になかったはずなので構造を普通に考えれば動くでしょ。 保証はできませんが・・・。

    v110_xp はたしか v110 の exe が XP 非対応だったのを非難する声で追加されたツールセットですよね。

    exe の互換性崩しは影響小さいし支持できますが、DLL の互換性崩しはシャレにならないしやらないでしょ。多分・・・。

    • 回答としてマーク mkNIT 2014年11月24日 9:40
    2014年11月22日 15:41

すべての返信

  • VS2012 は使ってないし、そこらを詳しく見た事もないですけど1~4の挙動でおかしくないと思います。

    DLL が変わったという話は特になかったはずなので構造を普通に考えれば動くでしょ。 保証はできませんが・・・。

    v110_xp はたしか v110 の exe が XP 非対応だったのを非難する声で追加されたツールセットですよね。

    exe の互換性崩しは影響小さいし支持できますが、DLL の互換性崩しはシャレにならないしやらないでしょ。多分・・・。

    • 回答としてマーク mkNIT 2014年11月24日 9:40
    2014年11月22日 15:41
  • in DLLs, MajorSubsystemVersion is ignored until Windows 8.

    https://code.google.com/p/corkami/wiki/PE#MajorSubsystemVersion_/_MinorSubsystemVersion

    • 回答としてマーク mkNIT 2014年11月24日 9:40
    2014年11月22日 18:20
  • う~ん、セキュリティ対策が進んで DLL も対応してるんですね。

    一応、下位互換は残ってる感じだけど・・・

    > DLL の互換性崩しはシャレにならないしやらないでしょ。多分・・・。

    って書いたのは、これ間違いっぽいです・・・。

    思ってた以上に Win8 って改善してるのですね、普及がイマイチなのが残念。

    2014年11月23日 7:13
  • ありがとうございます

    試しに,自分の環境でdllのPEヘッダのMajorSubSystemVersionを弄ってもLoadLibraryは成功しました.

    ようやく納得できました.

    2014年11月24日 9:48
  • ありがとうございます.

    確かにそうですね.exeが動かないからdllも動かないものだと単純に考えていました.

    2014年11月24日 9:49