2
#include "vss.h"
#include "vswriter.h"
#include <VsBackup.h>
#include <stdio.h>

#define CHECK_PRINT(result) printf("%s\n",result==S_OK?"S_OK":"error")
int main(int argc, char* argv[])
{
 BSTR xml;
 LPTSTR errorText;
 IVssBackupComponents *VssHandle;


 HRESULT  result = CreateVssBackupComponents(&VssHandle);
 CHECK_PRINT(result);
 result = VssHandle->InitializeForBackup();
 printf("unexpected%x\n",result);

 system("pause");
 return 0;
}

上記のプログラムの initializeforbackup は、エラー コード E_UNEXPECTED で失敗します。VSS サービスが実行されています。イベント ログには、「ボリューム シャドウ コピー サービス エラー: ルーチン CoCreateInstance の呼び出し中に予期しないエラーが発生しました。hr = 0x800401f0.」と表示されます。InitializeForBackup が S_OK を返すための解決策はありますか?

4

1 に答える 1

2

CoInitialize 関数を使用して COM ライブラリを初期化する必要があります。

HRESULT  result = CoInitialize(NULL);
CHECK_PRINT(result);
result = CreateVssBackupComponents(&VssHandle);
CHECK_PRINT(result);
result = VssHandle->InitializeForBackup();
CHECK_PRINT(result);

これにより、すべての S_OK が得られます

于 2010-08-27T08:06:31.143 に答える