環境はVisualStudio.NET2003,WindowsXPです。
下記のソースでGetImageEncodersSize(&num, &size);
の所でおちています。
GetEncoderClsid関数はファイルの種類を
決めるためのものだと解釈しています。
前後で何か必要な処理があるのでしょうか。
ヒントでもいいので、よろしくお願い致します。
参考HP
http://d.hatena.ne.jp/s0u/20080211/1202679717
//OKボタンクリック
void CTestJpegDlg::OnBnClickedOk()
{
CLSID encoderClsid;
GetEncoderClsid(L"image/jpeg", &encoderClsid);
OnOK();
}
int CTestJpegDlg::GetEncoderClsid(const WCHAR* format, CLSID* pClsid) {
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1;
pImageCodecInfo = (ImageCodecInfo*)new char[size];
if(pImageCodecInfo == NULL)
return -1;
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT n=0; n<num; ++n) {
if( wcscmp(pImageCodecInfo[n].MimeType, format) == 0 ) {
*pClsid = pImageCodecInfo[n].Clsid;
delete pImageCodecInfo;
return n;
}
}
delete pImageCodecInfo;
return -1;
}
GDI+の関数を呼び出しただけで強制終了するようなら
単にGDI+の初期化を行っていないか
GDI+の初期化に失敗している可能性が考えられます。
返信ありがとうございます。
初期化処理が行われていませんでした。
//GDI+の初期化
GdiplusStartup(&m_Token, &m_StartupInput, NULL);
UINT size = 0;
GetImageEncodersSize(&m_NumEncoders, &size);
の初期化処理を追加することで解決できました。
ありがとうございます。
返信ありがとうございます。
初期化処理が行われていませんでした。
//GDI+の初期化
GdiplusStartup(&m_Token, &m_StartupInput, NULL);
UINT size = 0;
GetImageEncodersSize(&m_NumEncoders, &size);
の初期化処理を追加することで解決できました。
ありがとうございます。
解決のチェックを立てました。
編集 削除