![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
例外についてです
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <atlbase.h>
#include <sphelper.h>
#include<stdio.h>
int main(){
USES_CONVERSION;
HRESULT hr = S_OK;
CComPtr<ISpRecognizer> cpRecoEngine;
hr = cpRecoEngine.CoCreateInstance(CLSID_SpInprocRecognizer);
CComPtr<ISpStream> cpInputStream;
CComPtr<ISpRecognizer> cpRecognizer;
CComPtr<ISpRecoContext> cpRecoContext;
CComPtr<ISpRecoGrammar> cpRecoGrammar;
printf("test1\n");
// Create basic SAPI stream object
// NOTE: The helper SpBindToFile can be used to perform the following operations
hr = cpInputStream.CoCreateInstance(CLSID_SpStream);
// Check hr
CSpStreamFormat sInputFormat;
// generate WaveFormatEx structure, assuming the wav format is 22kHz, 16-bit, Stereo
hr = sInputFormat.AssignFormat(SPSF_22kHz16BitStereo);
// Check hr
printf("test2\n");
// setup stream object with wav file MY_WAVE_AUDIO_FILENAME
// for read-only access, since it will only be access by the SR engine
WCHARpszSrc[] = {L"test.wav"};
hr = cpInputStream->BindToFile(pszSrc,
SPFM_OPEN_READONLY,
&sInputFormat.FormatId(),
sInputFormat.WaveFormatExPtr(),
SPFEI_ALL_EVENTS);
// Check hr
printf("test3\n");
・
・
・
このように音声を認識するプログラムを作っているのですが、どうしてもprintf("test2")までの出力で例外が起こってしまいます(p!=0という例外でした)。hr = cpInputStream~で例外が起こっていると思うのですが,GUIで同じ記述をしたときはうまくいきました。アドバイスをお願いします。
No.2ベストアンサー
- 回答日時:
こんにちは。
そのエラーは、CComPtr<ISpStream>のoperator->()で内部のポインタがNULLの時に発生するものです。
::CoInitialize(NULL);
を呼び出していないので、
hr = cpRecoEngine.CoCreateInstance(CLSID_SpInprocRecognizer);
の部分で、COMインターフェースの作成に失敗しています。
関数の一番上で、
::CoInitialize(NULL);
を呼び出し、
関数の一番下で、
::CoUninitialize();
を呼び出して下さい。此れで成功する筈です。
CComPtr<T>はかえってややこしくなる場合があるので、あまり使用しない方が良いかもしれません。
GUI(win32アプリケーションのプロジェクト)の方で上手くいった理由は、前もってCoInitialize()の呼び出しを行ってくれているから(多分)だと思います。
No.1
- 回答日時:
>printf("test2")までの出力で例外が起こってしまいます(p!=0という例外でした)。
の「p」は何処から出てきた内容でしょうか?
それと、肝心の各APIの戻り値「hr」の正当性についてのチェックがありませんが、GUIでは「本当に正しく」動作していたのでしょうか?
単純に考えでも、「GUI(Win32アプリ)」と「コンソール」ではメモリ管理など様々な違いがあるので何処でおかしくなっていても不思議ではありませんよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CTRL+Dでループを抜けるには
-
printf で二進表示を行いたい。
-
分数を表示するプログラム(長...
-
10個出力で改行したいのですが...
-
改行について 1行に何個かづ...
-
コンパイルエラーについて
-
C言語で、「自然数nを入力し、n...
-
【C言語教えてください】sin波...
-
三平方の定理を求めるプログラム
-
コマンドラインに出力した文字...
-
C言語 じゃんけんswicth case ...
-
ホームページをC言語で作りたい...
-
LU分解法のピボット選択機能実...
-
switch分のケースを範囲数?に...
-
3つの入力した数値の大小比較...
-
アセンブラでコマンドライン引...
-
c言語で2000年以降カレンダーを...
-
wsprintfの書式制御文字列につ...
-
strcmp
-
C言語の文字列一部取得について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
strcmp
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
cshの文字列操作(0埋め)
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
%P と %X の違い
-
8人分のテストの点数を入力し、...
-
C言語での、年複利の計算方法...
-
printf( " %2d", p * q );
-
hit&bolwのプログラミングがで...
-
scanfに文字が入力されたときに...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
unsigned int型について
おすすめ情報