COM

VariantClear

COM

VariantClearは、VARIANT構造体変数をクリアする。VariantClear function (oleauto.h) - Win32 apps | Microsoft Docs プログラミング用メモ帳 VARIANT型について Part.3 【Visual C++】vtをVT_EMPTYにして、bstrValに文字列が割り当てられていたら、SysFree…

VARIANT.bstrVal

COM

文字列(BSTR)を格納する場合は、vtにVT_BSTRを指定し、bstrValにSysAllocStringで文字列をセットする。VARIANT (oaidl.h) - Win32 apps | Microsoft Docs 型タグ フィールドの設定 - Win32 apps | Microsoft DocsVARIANT.cppで、vr.bstrValにSysAllocString(…

VARIANT.intVal

COM

入れる値が4バイト(32ビット)の符号付き整数なら、VARIANT.intValに格納するのがいい。VARIANT (oaidl.h) - Win32 apps | Microsoft Docs プログラミング用メモ帳 VARIANT型について Part.3 【Visual C++】VARIANT.cppで、符号付きということで、せっかくな…

VARIANT.vt

COM

VARIANT.vtに型の種類を格納する。VARIANT (oaidl.h) - Win32 apps | Microsoft Docs オートメーション - メソッド呼び出しの実装 プログラミング用メモ帳 VARIANT型について Part.3 【Visual C++】VARIANT.cppで、例えば、4バイト(32ビット)整数なら、VT_I4…

VariantInit

COM

VariantInitで、VARIANT構造体の初期化を行う。VariantInit function (oleauto.h) - Win32 apps | Microsoft Docs VARIANT型を知ってみるVariantInit.cppで、こう書いて、デバッガで見てみる。 0xccccがいっぱいあり、つまり初期化されていない。0xccccがい…

VARIANT

COM

VARIANT構造体は、様々な型を内包した構造体。VARIANT Structure - Win32 apps | Microsoft Docs VARIANT型を知ってみる何でも格納できる変数型としてVisualBasicではお馴染みのVariant型に相当するもの。 VARIANT.cppで、これだけ書いて、中がどうなってる…

IWbemClassObject

COM

列挙したデータの各要素は、IWbemClassObjectインターフェースポインタの形で扱う。IWbemClassObject (wbemcli.h) - Win32 apps | Microsoft DocsIWbemClassObject.cppで、取得したIWbemClassObjectインターフェースポインタを出力。 CoCreateInstance OK! p…

IEnumWbemClassObject::Next

COM

IEnumWbemClassObject::Nextで、次の要素をIWbemClassObjectインターフェースポインタとして取り出す。IEnumWbemClassObject::Next (wbemcli.h) - Win32 apps | Microsoft DocsIEnumWbemClassObject.cppで、とりあえずwhileループの中でIEnumWbemClassObject…

IEnumWbemClassObject

COM

IWbemServices::ExecQueryの結果、列挙されたデータは、IEnumWbemClassObjectインターフェースのポインタとして渡される。IEnumWbemClassObject (wbemcli.h) - Win32 apps | Microsoft DocsIEnumWbemClassObject.cppで、取得したIEnumWbemClassObjectインタ…

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…