1

Win7開発マシンにVS2005、VS2008、およびVS2010をインストールしています。EXEプロジェクトがVS2010によってビルドされたときにLoadLibrary()呼び出し中に例外を取得するサードパーティのDLLを使用する特定のプロジェクトがあります(v100またはv90ツールセットのいずれかを対象としている場合)。VS2005またはVS2008によって直接ビルドされた場合は完全に機能します。 。

Li Shao(Microsoftの)2009年のブログエントリによると:

http://blogs.msdn.com/b/vcblog/archive/2009/12/08/c-native-multi-targeting.aspx

VS2010プロジェクトを開き、プラットフォームツールセットをv100からv90に変更できるはずです。そうすると、VS2010は実際にVS2008コンパイラ、ヘッダー、およびライブラリを使用してプログラムをビルドします。そうである場合、プロジェクトがこのようにビルドされたときにDLLがロードされないため、「正しく」実行されていません。ビルドログを調べて、使用されているコンパイラを確認しようとしましたが、ログにパスやバージョン番号がないため、問題が発生しました。

これは、Win32Apisに直接書き込まれたプレーンなC(C ++、MFC、.NETではない)プロジェクトです。これを機能させる方法はありますか、それとも単一のプロジェクト(システム全体を構成する100以上のうち)に別のコンパイラを使用しているだけですか?

ヘルプ!

4

2 に答える 2

1

水仙を見てください:http://daffodil.codeplex.com/

Daffodilをインストールすると、VS 2010を使用して、古いバージョンのライブラリを使用してプロジェクトをビルドできるようになります。

于 2012-10-04T20:45:29.923 に答える
0

私はそれを解決したと思います。VS2010はVS2008コンパイラ、リンカーなどを問題なく実行するようですが、VS2010はプロジェクトをそのままにしておくことはありません。プロジェクトがVS2010にインポートされると、コマンドラインにいくつかの新しいデフォルト設定が追加されます。明らかに、それらの少なくとも1つはVS2008とは十分に異なり、使用しているDLLの読み込みに失敗します。

データ実行防止(DEP)の詳細リンカー設定を[はい](デフォルト)から[いいえ]に変更すると、プログラムが再び機能し始めました。実際、v90ツールセットを使用してコンパイルする必要はありません。問題全体は、/NXCOMPATリンカーコマンドラインスイッチの新しいデフォルトが原因で発生していました。/ NXCOMPATスイッチは、VS2005 IDE(プロジェクトが作成された場所)のプロジェクト設定でも参照されていませんが、「link /?」を実行しています。VC8 binフォルダーにあるのは、スイッチが既知であり、デフォルトがNOであったことを示しています。

残念ながら、Visual Studio IDEには、新しいバージョンで変更されたプロジェクトで使用されていたデフォルト設定のリストが含まれていませ。それが難しすぎる場合、インポーターは古いデフォルト値を使用して変更された設定を指定する必要があります。そうでない場合、プロジェクトは正しくインポートされませんでしたね。

于 2012-10-05T19:58:35.487 に答える