Пожалуйста, посмотрите на следующий код
#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;
}
Я использую QT. Когда я запускаю этот код, я получаю ошибку
Не удается открыть включаемый файл: ‘atlbase.h’: нет такого файла или каталога
Я заметил, что у меня нет файлов atlbase.h
или же atlcom.h
в моей машине. Тем не менее, этот код работает без ошибок на моем ноутбуке, и я получил эти 2 файла там.
Я подумываю получить копию этих двух файлов на моем настольном компьютере, и будет ли она работать? Если да, в какую папку я должен их скопировать? Обратите внимание, я новичок в программировании Windows, QT и речи.
Пожалуйста помоги!
Для меня эти файлы находятся здесь:
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
Обратите внимание, что ATL является частью Microsoft Visual Studio (но не Express Edition).
Если вам нужно получить ATL для Express, пожалуйста, ознакомьтесь с этой темой Как добавить WTL и ATL в Visual Studio C ++ Express 2008
Я не думаю, что копирование atlbase.h
а также atlcom.h
поможет вам.
Вы можете попытаться получить все файлы atl * .h и установить требуемый распространяемый пакет Microsoft Visual C ++.
Вам не нужны эти заголовки для этого кода. Удалить extern CComModule _Module;
и заголовки ATL. добавлять #include <windows.h>
,
Наличие заголовков, безусловно, является шагом в правильном направлении, но вам также понадобятся библиотеки для компиляции (если все не реализовано в заголовках). Вы можете разместить заголовки там, где вам нравится, просто убедитесь, что компоновщик их найдет (либо в расположении по умолчанию *, либо включив путь в качестве флага).
* Я не знаю местоположение по умолчанию для Windows.
Я установил VS 2015 Express, в котором говорилось, что это VS VS Community, когда он работал, и у него была проблема altbase.h с очень простыми программами на С ++. Вы можете сосредоточиться на получении точных включаемых файлов или сделать шаг назад, чтобы решить эту проблему. Microsoft — крупная, основательная компания, когда они предоставляют вам компилятор c ++, они предоставляют вам необходимые библиотеки. Когда я исправил эту проблему, я
Затем, когда я добавил свой код, сгенерированный заголовок stdafx.h по умолчанию не вызывал проблему altbase.h, как это было раньше. Я был в состоянии добавить другие включения и сделал «использование пространства имен std;» и я смог сделать cout и cin’s. Моей базовой операционной системой была Windows 7 Home Premium. Очевидно, когда вы установили VS 2015/2017 Express, вы должны были установить флажок c ++ для установки.
ATL и MFC поставляются с розничными версиями VC ++. Неважно, где вы разместите включенные файлы и библиотеки (atl * .lib). Просто предоставьте им правильные пути в IDE.