- 2014-10-27
- Visual C++
だいぶ、ほったらかしだったんだけども、
前回
を参照してソースを書いてみる。
ヘッダー部。COMの宣言なんかを行う。
Oleviewの画面見ながらと、MSのHELP見ながらで何となく理解できると思うけど。
最初は、ひたすら書く。
#import "c:\windows\system32\scrrun.dll" raw_interfaces_only, \ raw_native_types, \ named_guids, \ rename("DeleteFile", "DelFile"), \ rename("MoveFile","MvFile"), \ rename("CopyFile", "CpFile"), \ rename("GetFreeSpace", "_GetFreeSpace") using namespace Scripting;
本体部。COMを扱う場合は、必ず「CoInitialize」と「CoUninitialize」を行う。
void CFileSystemDlg::OnBnClickedOk() { HRESULT hRet = S_OK; // 結果格納用 // COMオブジェクトの初期化 hRet = ::CoInitialize(NULL); // 初期化は成功したか? if (hRet != S_OK) { //エラー処理 return; } CComPtr<IFileSystem> pFiso; // ファイルシステムオブジェクト // インスタンスの生成 hRet = pFiso.CoCreateInstance( L"Scripting.FileSystemObject" ); // インスタンスは生成されたか? if ( hRet != S_OK ) { //エラー処理 ::CoUninitialize(); return; } // ディレクトリの削除 hRet = pFiso->DeleteFolder( bstr_t( "C:\\Test" ), VARIANT_TRUE ); // インスタンスは生成されたか? if ( hRet != S_OK ) { //エラー処理 pFiso.Release(); ::CoUninitialize(); return; } pFiso.Release(); ::CoUninitialize(); }
COMインタフェース生成の方法は他にもあって、
IFileSystemPtr pFiso; hRet = pFiso.CreateInstance( "Scripting.FileSystemObject" ); とか IFileSystemPtr pFiso; hRet = pFiso.CreateInstance( __uuidof( FileSystemObject ) );
んな感じ。。
時間ができたら、補足説明書こうかな。。
しかし、これくらいの処理だと、断然VBSのが楽だな。。