getProcessTimesとfiletimetosystemtimeを使用したCPUプロセス時間は64ビットで動作しません
-
28-09-2019 - |
質問
CPU時間を測定しようとしています。 Win 32ではうまく機能しますが、64ビットで、次のように述べています。
error LNK2019: unresolved external symbol __imp_GetProcessTimes referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ)
同様のエラーがあります FileTimeToSystemTime
error LNK2019: unresolved external symbol __imp_FileTimeToSystemTime referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ)
機能自体はそれほど重要ではありません。問題はありません。
この呼び出しは64ビットアーキテクチャの合法ですか?
これは、64ビットウィンドウのライブラリに正しくリンクしていないように思われる問題だけではありません。
適切にリンクするように設定する必要がある設定はありますか?
解決
2つの環境のビルド設定は、同じインポートライブラリがリストされています。これらの関数は両方ともkernel32.dllにあります。
他のヒント
リンカーフラグを確認してください。 64ビットビルドのプロジェクト構成全体は、32ビットビルドの構成とは異なります。したがって、プロジェクトの設定を確認して、両方が同じライブラリにリンクしていることを確認してください。
また、プロジェクト設定でコマンドラインペインをチェックするか、ビルドログを検査することにより、コンパイラとリンカーが正しく呼び出されたことを確認します。
Visual Studio 2010でこのコードの64ビットビルドを作成しようとしましたが、うまくいきました。
#include <Windows.h>
int CALLBACK WinMain(
__in HINSTANCE hInstance,
__in HINSTANCE hPrevInstance,
__in LPSTR lpCmdLine,
__in int nCmdShow
) {
FILETIME ct;
FILETIME et;
FILETIME kt;
FILETIME ut;
GetProcessTimes(NULL, &ct, &et, &kt, &ut);
SYSTEMTIME st;
FileTimeToSystemTime(&ut, &st);
}
新しいWin32プロジェクトを作成し、64ビットプラットフォームを追加してコンパイルしました。プロジェクトの設定はまったく変更しませんでした。
GetProcessTimesとFileTimetosystemtimeのドキュメントでは、ヘッダーを含めるヘッダーと、リンクするライブラリファイルも指示されます。ただし、Visual Studioは通常、自動的にそれらをリンクします。おそらくあなたのプロジェクトでチェックされているデフォルトライブラリを無視しましたか?