サンプルCOMクライアント
ゼロからのCOM - クラスの作成とその利用で説明したサンプルプログラムです。
コード全体をコピーしたい場合は、著作権表示といちごパックへのリンクを残した形でコピーしてください。
サンプルコードとしてその一部を利用、参照いただくぶんには問題ありません。
COMを使う32ビットまたは64ビットプログラムの場合は、リンク時に次のライブラリを与えてください。
kernel32.lib | user32.lib | advapi32.lib | rpcrt4.lib | ole32.lib | oleaut32.lib |
このサンプルプログラムでは、リンカにamstrmid.libも追加してください。
このコードをVisual C++のプロジェクトとしてビルドしたい場合は、次の準備を行ったうえでビルドしてください。
Visual C++ → Win32 → Win32プロジェクトを選択して空のプロジェクトを作成
サンプルコードを.cppファイルとして追加
プロジェクトのプロパティを開き、リンカの設定でリンク時のライブラリとして上記のライブラリを追加
//
// Copyright (c) 2016 The Ichigopack Project (http://ichigopack.net/).
//
#include <windows.h>
#include <ole2.h>
#include <dshow.h>
#include <iostream>
#include <iomanip>
#define PLAYSAMPLEW L"c:\\windows\\media\\chimes.wav"
int main()
{
HRESULT hr;
hr = CoInitialize(NULL);
if ( FAILED(hr) ) {
std::cout << "CoInitialize() error: " << hr << std::endl;
return 1;
}
IMediaControl* pIFMediaControl = NULL;
IMediaEvent* pIFMediaEvent = NULL;
BSTR bstr = NULL;
long evCode = 0;
hr = CoCreateInstance(
CLSID_FilterGraph, NULL,
CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER |
CLSCTX_LOCAL_SERVER,
IID_IMediaControl, (LPVOID*)&pIFMediaControl);
if ( SUCCEEDED(hr) )
hr = pIFMediaControl->QueryInterface(
IID_IMediaEvent, (LPVOID*)&pIFMediaEvent );
if ( SUCCEEDED(hr) ) {
bstr = SysAllocString(PLAYSAMPLEW);
if ( bstr == NULL ) {
hr = E_OUTOFMEMORY;
}
}
if ( SUCCEEDED(hr) ) {
hr = pIFMediaControl->RenderFile( bstr );
if ( FAILED(hr) ) {
std::cout << "RenderFile failed." << std::endl;
}
}
if ( SUCCEEDED(hr) ) {
hr = pIFMediaControl->Run();
}
if ( SUCCEEDED(hr) ) {
hr = pIFMediaEvent->WaitForCompletion( INFINITE, &evCode );
}
if ( pIFMediaControl != NULL ) {
pIFMediaControl->Release();
}
if ( pIFMediaEvent != NULL ) {
pIFMediaEvent->Release();
}
if ( bstr != NULL ) {
SysFreeString( bstr );
}
if ( FAILED(hr) ) {
std::cout << "COM error: "
<< std::hex << std::setfill('0')
<< std::setw(8) << hr << std::endl;
}
CoUninitialize();
return 0;
}
関連ページ
COM/ActiveXの解説ページ 目次
クラスの作成とその利用