電子書籍の厳選無料作品が豊富!

WindowsAPIを使用しようとしているのですが、エラーが出てうまくいきません。
もし原因が分かる方がいらっしゃれば、教えていただけると幸いです。

エラーコード:
error C2787:: IFileOperation :このオブジェクトに関連付けられたGUIDがありません。

問題箇所:
HRESULT CopyItem(__in PCWSTR pszSrcItem, __in PCWSTR pszDest, PCWSTR pszNewName)
{
//
// Initialize COM as STA.
//
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOperation *pfo;

//
// Create the IFileOperation interface
//
hr = CoCreateInstance(CLSID_FileOperation,
NULL,
CLSCTX_ALL,
IID_PPV_ARGS(&pfo));  //※ここでエラー発生 
if (SUCCEEDED(hr))
{
//
// Set the operation flags. Turn off all UI from being shown to the
// user during the operation. This includes error, confirmation,
// and progress dialogs.
//
hr = pfo->SetOperationFlags(FOF_NO_UI);
if (SUCCEEDED(hr))
{
//
// Create an IShellItem from the supplied source path.
//
IShellItem *psiFrom = NULL;
hr = SHCreateItemFromParsingName(pszSrcItem,
NULL,
IID_PPV_ARGS(&psiFrom));
if (SUCCEEDED(hr))
{
IShellItem *psiTo = NULL;

if (NULL != pszDest)
{
//
// Create an IShellItem from the supplied
// destination path.
//
hr = SHCreateItemFromParsingName(pszDest,
NULL,
IID_PPV_ARGS(&psiTo));
}

if (SUCCEEDED(hr))
{
//
// Add the operation
//
hr = pfo->CopyItem(psiFrom, psiTo, pszNewName, NULL);

if (NULL != psiTo)
{
psiTo->Release();
}
}

psiFrom->Release();
}

if (SUCCEEDED(hr))
{
//
// Perform the operation to copy the file.
//
hr = pfo->PerformOperations();
}
}

//
// Release the IFileOperation interface.
//
pfo->Release();
}

CoUninitialize();
}
return hr;

よろしくお願いします。

A 回答 (1件)

APIがどういう仕様か知りませんが、


普通にCの観点でおかしい箇所はあります。

> IFileOperation *pfo;
ポインタで宣言して、

> IID_PPV_ARGS(&pfo));  //※ここでエラー発生 
さらにそのアドレスを参照している。

*pfoには実体はありません。
実体の無い変数にたいしてさらにアドレス参照しているのだから、
なにかおかしな記述ですね。


GUIDは、予めどこかで生成したFileオブジェクトのIDを指定するのでしょう。
pfoの内部にIDを入れる箇所があるのでは、と思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ご教授いただいた点を考慮して修正を行ったところ、上手くいきました。

また機会があればよろしくお願いします。

お礼日時:2013/12/03 18:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!