COM

IWbemServices::ExecQuery

COM

IWbemServices::ExecQueryで、クエリを実行する。IWbemServices::ExecQuery (wbemcli.h) - Win32 apps | Microsoft Docs 例: ローカルコンピューターから WMI データを取得する - Win32 apps | Microsoft DocsIWbemServices.cppで、第1引数は"WQL"、第2引数…

CoSetProxyBlanket

COM

WMIでは、プロキシのセキュリティ設定も必要らしい。 CoSetProxyBlanketで設定する。CoSetProxyBlanket function (combaseapi.h) - Win32 apps | Microsoft Docs WMIを使用してディスプレイの接続方法を取得CoSetProxyBlanket.cppで、とすると、 CoCreateIns…

IWbemServices

COM

WMIへの具体的な操作は、IWbemServicesインターフェースを通して行う。IWbemServices (wbemcli.h) - Win32 apps | Microsoft DocsIWbemServices.cppで、とりあえず取得したIWbemServicesインターフェースポインタを出力だけ。 CoCreateInstance OK! pLocator…

IWbemLocator::ConnectServer

COM

IWbemLocator::ConnectServerで、WMIへ接続する。IWbemLocator::ConnectServer (wbemcli.h) - Win32 apps | Microsoft Docs 例: ローカルコンピューターから WMI データを取得する - Win32 apps | Microsoft DocsIWbemLocator.cppで、ConnectServerの第1引数…

BSTR

COM

BSTRは、表面上ワイド文字だが、文字列本体の前には文字列のバイト数、文字列本体の後には2バイトのNULL終端があるので、全く同じに扱うことはできない。SysAllocString function (oleauto.h) - Win32 apps | Microsoft Docs BSTR 用のメモリの割り当てと解…

SysAllocString

COM

COM用のBSTR文字列を扱う必要が出てきたので、SysAllocStringについて。 BSTR文字列を扱うには、SysAllocStringでメモリを確保し、文字列をセットする。SysAllocString function (oleauto.h) - Win32 apps | Microsoft Docs BSTR 用のメモリの割り当てと解放…

IWbemLocator

COM

IWbemLocatorは、WMIに接続するためのインターフェース。IWbemLocator (wbemcli.h) - Win32 apps | Microsoft Docs 例: ローカルコンピューターから WMI データを取得する - Win32 apps | Microsoft Docs前回、成功したのはわかったけど、取得したポインタを…

CoCreateInstance

COM

CoCreateInstanceで、COMインターフェースポインタを生成・取得する。CoCreateInstance function (combaseapi.h) - Win32 apps | Microsoft DocsWMIで使うIWbemLocatorインターフェースポインタを生成・取得する。 wbemuuid.libをリンクwbemuuid.libをリンク…

FAILED

COM

FAILEDは、エラーによる失敗の時だけ真になる。FAILED macro (winerror.h) - Win32 apps | Microsoft DocsFAILED.cppで、CoInitializeSecurityにでたらめな引数を与えたら、エラーになるだろうから、FAILEDで判定する。 SUCCEEDED! FAILED! 続行するには何か…

SUCCEEDED

COM

ここで、SUCCEEDEDマクロについて。 SUCCEEDEDは、引数のHRESULTがS_OKでもS_FALSEでも真を返す。 それ以外のエラーでは偽になる。SUCCEEDED macro (winerror.h) - Win32 apps | Microsoft DocsSUCCEEDED.cppで、とすると、 SUCCEEDED! CoInitialize success…

CoInitializeSecurity

COM

CoInitializeSecurityで、セキュリティ設定を初期化する。CoInitializeSecurity function (combaseapi.h) - Win32 apps | Microsoft Docs 例: ローカルコンピューターから WMI データを取得する - Win32 apps | Microsoft DocsWMIのように、COMインターフェ…

CoInitializeEx

COM

CoInitializeExも、COMの初期化を行う。CoInitializeEx function (combaseapi.h) - Win32 apps | Microsoft Docsこちらは、STA(シングルスレッドアパートメント)か、MTA(マルチスレッドアパートメント)か、どちらに属するかも設定する。 この話は難しいので…

CoUninitialize

COM

CoUninitializeで、COMの終了処理を行う。CoUninitialize function (combaseapi.h) - Win32 apps | Microsoft DocsCoInitializeで初期化して、COMインターフェースを使い終わったら、これで終了処理をする。 そして、この後にまたCOMインターフェースを使う…

CoInitialize

COM

CoInitializeで、COMの初期化を行う。CoInitialize function (objbase.h) - Win32 apps | Microsoft Docsまずは、 // ヘッダファイルのインクルード #include <windows.h> // 標準WindowsAPI #include <tchar.h> // TCHAR対応 #include <stdio.h> // C標準入出力 // _tmain関数の定義 int </stdio.h></tchar.h></windows.h>…

IPicture

COM

OleLoadPictureを使って、IPictureポインタ形式でアクセス出来るのは、Jpeg形式に限らない。IPicture (ocidl.h) - Win32 apps | Microsoft Docs今度は、Gif形式の画像を読み込む。 test.gifを用意test.gifを用意。これで、 Gif画像も読み込めたGif画像も読み…

IStream

COM

IStreamは、ストリームオブジェクトに対する読み書きや各種情報などを取得する機能を提供するインターフェース。IStream (objidl.h) - Win32 apps | Microsoft Docsストリームサイズ(ファイルサイズ)を取得してみる。コンソールコンソール。空プロ空プロ。sh…

OleLoadPicture

COM

Jpegは、OleLoadPictureを使って読み込むことが出来る。OleLoadPicture function (olectl.h) - Win32 apps | Microsoft Docs前回のIStreamをこれでIPictureにして、そこから最終的にHBITMAPを取得できる。CreateStreamOnHGlobalでIStreamポインタpStreamを取…

CreateStreamOnHGlobal

COM

CreateStreamOnHGlobalは、GlobalAllocで確保したメモリにJpegなどの画像ファイルバイナリを格納したものを元にして、IStreamオブジェクトを生成し、IStreamポインタを返す。CreateStreamOnHGlobal function (combaseapi.h) - Win32 apps | Microsoft DocsWi…

IPersistFile::Save

COM

IPersistFile::Saveで、ショートカットをファイルに保存する。IPersistFile::Save (objidl.h) - Win32 apps | Microsoft Docsショートカットを作成し、ショートカットのパスも出力している。 実行すると、 tszSrcPath = c:\Project\Cloud\github.com\Sample\…

IPersistFile

COM

ショートカットをファイルに保存するには、IPersistFileインターフェースが必要。 まずは、QueryInterfaceでポインタを取得する。IPersistFile (objidl.h) - Win32 apps | Microsoft Docsポインタの値を出力。 tszSrcPath = c:\project\cloud\github.com\sam…

IShellLink::SetPath

COM

ショートカットリンク先の実体ファイルパスをセットする場合には、IShellLink::SetPathを使う。IShellLinkA::SetPath (shobjidl_core.h) - Win32 apps | Microsoft Docsとりあえずセットはしてみる。 (ただ、これだけで完成ではない。)一応、確認のために、I…

IShellLink

COM

これまでは、COMサーバを作る側で紹介してきたが、ここからはCOMクライアントとして呼ぶ側として紹介していく。IShellLinkは、ショートカットを作成したり、ショートカットのリンク先情報を取得する時などに使う。IShellLinkA | Microsoft Docs ショートカッ…

IClassFactory

COM

IClassFactoryは、オブジェクトの作成を可能にするインターフェース。IClassFactory | Microsoft DocsIUnknownだけでは、不完全なので、今回はIClassFactoryも含めた形のモノを作成。まず、Main.cppで、前回と違うのは、CoGetClassObjectではなく、CoCreateI…

IUnknown

COM

COMは、Microsoftが提唱した技術で、ある言語でできたライブラリなどのコンポーネントを別の言語から利用できるようにしたコンポーネントの仕様である・・・。Component Object Model - WikipediaCOMは、コンポーネント本体とそれを別の言語から利用できるよ…