Pregunta

Please have a look at the following code

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

I am using QT. When I run this code, I get the error

Cannot open include file: 'atlbase.h': No such file or directory

I noticed that I do not have the files atlbase.h or atlcom.h in my machine. However, this code runs without error in my laptop, and I got those 2 files there.

I am thinking about getting a copy of those 2 files into my desktop computer and will it work? If yes, to which folder do I have to copy them? I am new to Windows programming, QT and speech.

¿Fue útil?

Solución

For me these files are located here:

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

Please note ATL is part of Microsoft Visual Studio (but not the Express Edition). If you need get ATL for Express please take a look at this topic How to add WTL and ATL to visual studio c++ express 2008

I don't think copying atlbase.h and atlcom.hwill help you. You might try to get all atl*.h files and install required Microsoft Visual C++ Redistributable package.

Otros consejos

You don't need those headers for that code. Remove extern CComModule _Module; and the atl headers. Add #include <windows.h>.

ATL and MFC come with retail versions of VC++. It does not matter where you will place includes and libraries (atl*.lib) needed. Just provide the correct paths to them in IDE.

I installed VS 2015 Express which said it was VS 2017 Community when it ran and was having this altbase.h problem with very simple c++ programs. You can fixate on getting the exact include files or you can take a step back to solve this problem. Microsoft is a big, thorough company, when they give you the c++ compiler they give you the libraries you need. When I fixed this problem I

  1. started Visual Studio as administrator.
  2. Created a Win32 c++ Console app
  3. Did NOT check "Empty Project" on c++ project create wizard.
  4. Did NOT check the Common Header Files for ATL and MFC.

Then when I added my code the generated stdafx.h default included header did not cause this altbase.h problem like it was doing before. I was able to add other includes and did a "using namespace std;" and I was able to do cout and cin's. My base operating system was Windows 7 Home Premium. Obviously when you installed VS 2015/2017 Express you had to select the c++ check box for the install.

Having the headers is certainly a step in the right direction, but you will also need the libraries in order to compile (unless everything is implemented in headers). You can place the headers where you like, just make sure the linker finds them (either in the default location* or by including the path as a flag).

*I don't know the default location for Windows.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top