VC で COM を 使ってみる(FileSystemObject)その2

  • デル株式会社

  • だいぶ、ほったらかしだったんだけども、
    前回
    を参照してソースを書いてみる。
    ヘッダー部。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のが楽だな。。



    関連記事

    ページ上部へ戻る