2009-04-02 15 views
1

VS9では、GetTickCount()関数を呼び出すと、コンパイル時に自動的にGetTickCount64()関数に変換されます。この2番目の機能はVista +でしか動作しないため、XPで実行するとプログラムエラーが発生します。C++ Windows APIオーバーライド?

元のGetTickCount()を呼び出すにはどうしたらいいですか?

おかげ

答えて

3

あなたがターゲットにするWindowsのバージョンに設定しWINVER。あるいは、それは_WIN32_WINNTまたは_WIN32_WINDOWSです。たぶんそれらのすべてでさえ...

この小さなmess-o-versionマクロの詳細については、http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspxをご覧ください。

しかし、私はWindows SDKでその再定義が全く見られません。私たちのセットアップでは、再定義を行っている何か他のものがあるかもしれませんか?

+0

上に書いたものを無視してください次: の#define WINVERて0x0501 の#define _WIN32_WINNTて0x0501 の#define _WIN32_WINDOWSて0x0501 、それはまだ、再定義されます。 しかし、GetTickCount()を出力する簡単な新しいプロジェクトを作成すると、上記の定義をしなくてもXP上で正常に動作します。 –

+0

コンパイラの/ showIncludesスイッチを使用してみてください(IDEではC++/Advancedのプロパティセットにあります)。 - GetTickCount()が再定義される場所を知るために、インクルードされたすべてのファイルに対してgrepなどを実行します。 –

0

32ビットまたは64ビットのオペレーティングシステム用にコンパイルするのではなく、VistaまたはWindows XP用のアプリケーションをコンパイルしていないことに注意してください。アプリケーションが64ビットVista以外のバージョンのWindowsをサポートする必要がある場合は、ビルドオプションで32ビットを指定します。

+0

これは32ビットとしてコンパイルされていますが、何らかの理由で関数名がGetTickCount64()にすぎません。 –

+0

GetTickCount64は64ビットの値を返すためです。通常のGetTickCountは32ビットで、48または49日でラップします。 – Michael

0

私は、次の内部targetver.hを設定します。

#define WINVER 0x0501 
#define _WIN32_WINNT 0x0501 
#define _WIN32_WINDOWS 0x0501 

、それはまだ、再定義されます。しかし、GetTickCount()を出力する簡単な新しいプロジェクトを作成すると、上記の定義をしなくてもXP上で正常に動作します。 私はプロジェクトの設定で何も変更しませんでした。動作するサンプルのGetTickCount()とそれ以外のコードの唯一の違いは、周囲にたくさんの他のコードがあり、それを使用していることです。

この原因は何ですか?

EDIT:私が使用していた他のファイルの1つは、GetTickCount64()を直接呼び出していましたが、これについてはわかりませんでしたので、自分のGetTickCount()関数であると仮定しました。私は設定

関連する問題