2016-11-01 5 views
0

WindowsマシンでVS2015(Platform Toolset v140、ターゲットプラットフォーム8.1)を使用してC++プログラムを作成していて、最近まで、Windows 7,8、および10でUSER32.dllのエントリポイントがないと、C++、VS2015の起動プログラムが停止する

GetPointerInfo()を使用したタッチのサポートを追加した後、私は、Windows 7のマシン上で実行時にすぐにこのポップアップエラーが表示されます。

USER32.dllの

でGetPointerInfoという名前のエントリポイントを見つけることができません。 MSは明らかに GetPointerInfo()がWin8以上でのみサポートされていることを明示していますが、それは問題ありませんが、私のプログラムのWindows 7との互換性を完全に破壊したくありません。

私はUSER32.DLLのWindows 7ののバージョンを前提とは全く機能を含むが、私のプログラムで実行時チェックを追加すること(すなわち、唯一の真のGetPointerInfo()IsWindows8OrGreater()かのリターンを呼び出す)トリックをしませんしません。

実際には、私のプログラムをGetPointerInfo()への参照でコンパイルするだけで、関数が実際に呼び出されるかどうかにかかわらずWin7の互換性が損なわれます。プログラムはWinMain()も入力しません、それは私にそのメッセージをスローして終了します。

また、Windows 8以降では、すべて正常に動作しています。

どうすれば解決できますか?

私は半日もGoogledしていますが、DLL、リンカー、コンパイラの設定についてはほとんど知識がありません。

ランタイムライブラリとしてマルチスレッド(/ MT)とマルチスレッドDLL(/ MD)の両方を試しました。

私はまた、機能レベルのリンクを有効または無効にしようとしましたが、結果は変わりません。

答えて

0

私はUSER32.dllのののWindows 7のバージョンが正しいことをすべて

の機能を含んでいないん前提としています。

私のプログラムでランタイムチェックを追加する(つまり、IsWindows8OrGreaterでGetPointerInfoを呼び出すだけでは)トリックは行いません。あなたはリンカのdelay-loading featureを使用して、またはコード内で直接GetProcAddress()のいずれかを使用して、実行時に動的に機能をロードする場合:(

それは(リンカの遅延ローダーがあなたのために内部GetProcAddress()を使用しています)行います。

実際に

、funcionが実際に呼び出されているかどうかだけでGetPointerInfoへの参照して私のプログラムをコンパイルすると、関係なくwin7の互換性を中断します。

エラーが場合にのみ起こることリンカーの遅延ロード機能を使用せずにコンパイル時に関数に静的にリンクします。

関連する問題