何时必须提供这些状态更新?
在设置 VSS 时?还是在备份数据等时?在后一种情况下,VSS 只返回一个路径,可以直接从 VB 中使用。
但是对于设置......它也可能有意义,因为它可能相当慢,但我想你可以将它变成一个状态机 - 将所有 VSS API 调用放入一个大 switch() 并创建一个函数来调用他们一一更新状态变量。
更新:我的意思是这样的。Init() 和 Step() 是由 dll 导出并从 VB 调用的函数。
或者,您可以生成一个线程来执行所有这些操作(仍在 dll 中)并在 Step() 中的 Sleep(100) 之后返回状态更新。
int s; // state
int Init( void ) { s=0; }
int Step( void ) {
switch( s ) {
default: break;
case 0:
CoInitialize(0); break;
case 1:
r = CreateVssBackupComponents(&vssc);
if( FAILED(r) ) s=-1;
if( vssc==0 ) s=-2;
break;
case 2:
r = vssc->InitializeForBackup();
if( FAILED(r) ) s=-3;
break;
case 3:
r = vssc->SetBackupState( FALSE, FALSE, VSS_BT_COPY, FALSE );
if( FAILED(r) ) s=-4;
break;
[...]
}
s += (s>=0);
}