web-dev-qa-db-fra.com

Impossible d'ouvrir le fichier d'inclusion: 'atlbase.h': aucun fichier ou répertoire de ce type

S'il vous plaît jeter un oeil sur le code suivant

#define _ATL_APARTMENT_THREADED

#include <atlbase.h>
//You may derive a class from CComModule and use it if you want to override something,
//but do not change the name of _Module
extern CComModule _Module;
#include <atlcom.h>

#include <sapi.h>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
 cout << "Hello" << endl;
 ISpVoice * pVoice = NULL;

 if (FAILED(::CoInitialize(NULL)))
     return FALSE;

 HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice);
 if( SUCCEEDED( hr ) )
 {
     cout << "Succeeded" << endl;
     hr = pVoice->Speak(L"Hello world", 0, NULL);
     pVoice->Release();
     pVoice = NULL;
 }
 else
 {
     cout << "Not succeeded" << endl;
 }

 ::CoUninitialize();
 return TRUE;
}

J'utilise QT. Quand je lance ce code, j'obtiens l'erreur 

Impossible d'ouvrir le fichier d'inclusion: 'atlbase.h': aucun fichier ou répertoire de ce type

J'ai remarqué que je n'ai pas les fichiers atlbase.h ou atlcom.h dans ma machine. Cependant, ce code fonctionne sans erreur sur mon ordinateur portable et j'ai ces 2 fichiers.

Je pense à obtenir une copie de ces 2 fichiers sur mon ordinateur de bureau et cela fonctionnera-t-il? Si oui, dans quel dossier dois-je les copier? Veuillez noter que je suis nouveau en programmation Windows, QT et discours.

S'il vous plaît aider!

9

Pour moi, ces fichiers se trouvent ici:

VS2010 - C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlbase.h
VS2008 - C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\atlbase.h

Veuillez noter que ATL fait partie de Microsoft Visual Studio (mais pas de l'édition Express). Si vous avez besoin d'ATL pour Express, veuillez consulter cette rubrique Comment ajouter WTL et ATL à Visual Studio C++ Express 2008

Je ne pense pas que copier atlbase.h et atlcom.h vous aidera. Vous pouvez essayer d’obtenir tous les fichiers atl * .h et d’installer le package redistribuable Microsoft Visual C++ requis.

12

Vous n'avez pas besoin de ces en-têtes pour ce code. Supprimez extern CComModule _Module; et les en-têtes atl. Ajoutez #include <windows.h>.

6
john

J'ai installé VS 2015 Express qui disait que c'était VS 2017 Community quand il fonctionnait et qui avait ce problème altbase.h avec de très simples programmes c ++. Vous pouvez vous fixer pour obtenir les fichiers d’inclusion exacts ou prendre du recul pour résoudre ce problème. Microsoft est une grande entreprise bien établie qui, lorsqu'elle vous fournit le compilateur c ++, vous fournit les bibliothèques dont vous avez besoin. Quand j'ai résolu ce problème je 

  1. commencé Visual Studio en tant qu'administrateur. 
  2. Création d'une application Win32 c ++ Console 
  3. N'a PAS coché "Projet vide" dans l'assistant de création de projet c ++. 
  4. N'a PAS vérifié les fichiers d'en-tête communs pour ATL et MFC. 

Ensuite, lorsque j'ai ajouté mon code, l'en-tête inclus par défaut stdafx.h généré ne causait pas ce problème altbase.h comme il le faisait auparavant. J'ai pu ajouter d'autres inclus et faire un "using namespace std;" et j'ai pu faire des couts et cin. Mon système d'exploitation de base était Windows 7 Home Premium. Évidemment, lorsque vous avez installé VS 2015/2017 Express, vous deviez cocher la case c ++ pour l'installation.

1
flashgordon

Avoir les en-têtes est certainement un pas dans la bonne direction, mais vous aurez également besoin des bibliothèques pour compiler (à moins que tout ne soit implémenté dans les en-têtes). Vous pouvez placer les en-têtes à votre guise, en vous assurant que l’éditeur de liens les trouve (à l’emplacement par défaut * ou en incluant le chemin comme indicateur).

* Je ne connais pas l'emplacement par défaut de Windows.

1
Marc Claesen

ATL et MFC sont livrés avec les versions commerciales de VC++. Peu importe où vous allez placer les inclusions et les bibliothèques (atl * .lib) nécessaires. Il suffit de leur fournir les chemins corrects dans l'IDE.

0
SChepurin