CPU temps de processus en utilisant GetProcessTimes et FileTimeToSystemTime ne fonctionnent pas dans 64 victoire bit

StackOverflow https://stackoverflow.com/questions/3071652

Question

Je suis en train de mesurer le temps CPU. Il fonctionne très bien sur Win 32, mais sur 64 bits, il est dit:

error LNK2019: unresolved external symbol __imp_GetProcessTimes referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ) 

Il a une erreur similaire pour FileTimeToSystemTime

error LNK2019: unresolved external symbol __imp_FileTimeToSystemTime referenced in function "unsigned int __cdecl getWINTime(void)" (?getWIN32Time@@YAIXZ)

Fonction lui-même est pas si important il n'y a pas de problème avec elle.
Est-ce appels Legit en 64 bits l'architecture ou quoi?

Ce n'est pas la seule question, il semble que ce ne est pas relier correctement aux bibliothèques sur 64 fenêtres de bit.
Est-il un paramètre que je dois mettre pour elle de relier correctement?

Était-ce utile?

La solution

ne vous êtes paramètres de construction pour les deux environnements ont les mêmes bibliothèques d'importation énumérées. Ces deux fonctions sont en kernel32.dll.

Autres conseils

Vérifiez vos drapeaux de liaison. La configuration entière du projet pour construit 64 bits est différente de celle de 32 bits construit. Donc, vérifiez vos paramètres du projet pour vérifier que les deux pointent vers les mêmes bibliothèques.

Vérifiez également que le compilateur et éditeur de liens se sont invoquées correctement, que ce soit en cochant les volets de ligne de commande dans les paramètres du projet, ou en inspectant le journal de la construction.

Je viens essayé de créer une version 64 bits de ce code dans Visual Studio 2010, et il a bien fonctionné:

#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);

}

J'ai simplement créé un nouveau projet Win32, a ajouté une plate-forme 64 bits, et compilé. Je n'ai pas changé les paramètres du projet à tous.

La documentation GetProcessTimes et FileTimeToSystemTime vous diront les en-têtes d'inclure, et le fichier bibliothèque lien vers ainsi. Toutefois, Visual Studio reliera généralement ceux automatiquement pour vous. Avez-vous ignorer les bibliothèques par défaut peut-être vérifiés dans votre projet?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top