次のコードをご覧ください
#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つのファイルをそこに取得しました。
これら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はMicrosoftVisual Studioの一部であることに注意してください(Express Editionではありません)。 Express用のATLを入手する必要がある場合は、このトピックをご覧ください Visual Studio c ++ express 2008にWTLとATLを追加する方法
atlbase.h
とatlcom.h
をコピーしても役に立たないと思います。すべてのatl * .hファイルを取得して、必要なMicrosoft Visual C++再頒布可能パッケージをインストールしようとする場合があります。
そのコードにはこれらのヘッダーは必要ありません。削除する extern CComModule _Module;
およびatlヘッダー。追加 #include <windows.h>
。
VS 2015 Expressをインストールしました。これは、実行時にVS 2017コミュニティであり、非常に単純なc ++プログラムでこのaltbase.hの問題が発生していたことを示しています。正確なインクルードファイルの取得に固執することも、一歩下がってこの問題を解決することもできます。 Microsoftは大規模で徹底的な会社であり、c ++コンパイラを提供すると、必要なライブラリを提供します。この問題を修正したとき
次に、コードを追加したときに、生成されたstdafx.hのデフォルトのインクルードヘッダーは、以前のようにこのaltbase.hの問題を引き起こしませんでした。他のインクルードを追加することができ、「usingnamespacestd;」を実行しました。そして、私はカウトとシンをすることができました。私の基本オペレーティングシステムはWindows7 HomePremiumでした。明らかに、VS 2015/2017 Expressをインストールしたときは、インストール用にc ++チェックボックスを選択する必要がありました。
ヘッダーを持つことは確かに正しい方向への一歩ですが、コンパイルするためにライブラリも必要になります(すべてがヘッダーに実装されている場合を除く)。ヘッダーは好きな場所に配置できます。リンカーがヘッダーを見つけるようにしてください(デフォルトの場所*にあるか、パスをフラグとして含めることによって)。
* Windowsのデフォルトの場所がわかりません。
ATLとMFCには、VC++の製品版が付属しています。インクルードと必要なライブラリ(atl * .lib)をどこに配置するかは重要ではありません。 IDEでそれらへの正しいパスを指定するだけです。