我正在使用VSS API,并使用这个抽象基类CVSSWriter。我想调用它的函数,但我不能创建它的对象。我应该如何继承它,因为它是一个类定义在vswriter。h这里是有关其方法信息的链接http://msdn.microsoft.com/en-us/library/aa381524%28v=VS.85%29.aspx
我卡住了,请帮帮我。
我试过了,但是不工作。
class SPCVssWriterEx:public CVssWriter
{
private:
LONG _cRef;
public:
SPCVssWriterEx(){}
~SPCVssWriterEx(){}
// callback for prepare snapsot event
bool STDMETHODCALLTYPE OnPrepareSnapshot()
{
return true;
}
// callback for freeze event
bool STDMETHODCALLTYPE OnFreeze()
{
return true;
}
// callback for thaw event
bool STDMETHODCALLTYPE OnThaw()
{
return true;
}
// callback if current sequence is aborted
bool STDMETHODCALLTYPE OnAbort()
{
return true;
}
};
这四个是纯虚函数,还有一些虚函数。
该类的实现是 class CVssWriter
{
// Constants
public:
// Constructors & Destructors
public:
__declspec(dllexport)
STDMETHODCALLTYPE CVssWriter();
__declspec(dllexport)
virtual STDMETHODCALLTYPE ~CVssWriter();
// Exposed operations
public:
// initialize the writer object
__declspec(dllexport)
HRESULT STDMETHODCALLTYPE Initialize
(
IN VSS_ID WriterID,
IN LPCWSTR wszWriterName,
IN VSS_USAGE_TYPE ut,
IN VSS_SOURCE_TYPE st,
IN VSS_APPLICATION_LEVEL nLevel = VSS_APP_FRONT_END,
IN DWORD dwTimeoutFreeze = 60000, // Maximum milliseconds between Freeze/Thaw
IN VSS_ALTERNATE_WRITER_STATE aws = VSS_AWS_NO_ALTERNATE_WRITER,
IN bool bIOThrottlingOnly = false,
IN LPCWSTR wszWriterInstanceName = NULL
);
// cause the writer to subscribe to events.
__declspec(dllexport)
HRESULT STDMETHODCALLTYPE Subscribe
(
IN DWORD dwEventFlags = VSS_SM_BACKUP_EVENTS_FLAG | VSS_SM_RESTORE_EVENTS_FLAG
);
// cause the writer to unsubscribe from events
__declspec(dllexport)
HRESULT STDMETHODCALLTYPE Unsubscribe();
// installs an alternative writer
__declspec(dllexport)
HRESULT STDMETHODCALLTYPE InstallAlternateWriter
(
IN VSS_ID writerId,
IN CLSID persistentWriterClassId
);
// Internal properties - accessible from OnXXX methods
protected:
// get array of volume names
__declspec(dllexport)
LPCWSTR* STDMETHODCALLTYPE GetCurrentVolumeArray() const;
// get count of volume names in array
__declspec(dllexport)
UINT STDMETHODCALLTYPE GetCurrentVolumeCount() const;
// get the name of the snapshot device corresponding to a given volume.
__declspec(dllexport)
HRESULT STDMETHODCALLTYPE GetSnapshotDeviceName
(
IN LPCWSTR wszOriginalVolume,
OUT LPCWSTR* ppwszSnapshotDevice
) const;
// current snapshot set GUID
__declspec(dllexport)
VSS_ID STDMETHODCALLTYPE GetCurrentSnapshotSetId() const;
// Current backup context.
__declspec(dllexport)
LONG STDMETHODCALLTYPE GetContext() const;
// current app level (either 1,2,3)
__declspec(dllexport)
VSS_APPLICATION_LEVEL STDMETHODCALLTYPE GetCurrentLevel() const;
// determine if path is in set of volumes being snapshotted
__declspec(dllexport)
bool STDMETHODCALLTYPE IsPathAffected
(
IN LPCWSTR wszPath
) const;
// does the backup include bootable state (formerly system state backup)
__declspec(dllexport)
bool STDMETHODCALLTYPE IsBootableSystemStateBackedUp() const;
// is the backup application smart (i.e., selecting components) or
// dump (i.e., just selecting volumes)
__declspec(dllexport)
bool STDMETHODCALLTYPE AreComponentsSelected() const;
__declspec(dllexport)
VSS_BACKUP_TYPE STDMETHODCALLTYPE GetBackupType() const;
__declspec(dllexport)
VSS_RESTORE_TYPE STDMETHODCALLTYPE GetRestoreType() const;
__declspec(dllexport)
bool STDMETHODCALLTYPE IsPartialFileSupportEnabled() const;
_declspec(dllexport)
HRESULT STDMETHODCALLTYPE SetWriterFailure(HRESULT hr);
// Ovverides
public:
// callback when request for metadata comes in
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnIdentify(IN IVssCreateWriterMetadata *pMetadata);
// callback for prepare backup event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnPrepareBackup(
IN IVssWriterComponents *pComponent
);
// callback for prepare snapsot event
virtual bool STDMETHODCALLTYPE OnPrepareSnapshot() = 0;
// callback for freeze event
virtual bool STDMETHODCALLTYPE OnFreeze() = 0;
// callback for thaw event
virtual bool STDMETHODCALLTYPE OnThaw() = 0;
// callback if current sequence is aborted
virtual bool STDMETHODCALLTYPE OnAbort() = 0;
// callback on backup complete event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnBackupComplete
(
IN IVssWriterComponents *pComponent
);
// callback indicating that the backup process has either completed or has shut down
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnBackupShutdown
(
IN VSS_ID SnapshotSetId
);
// callback on pre-restore event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnPreRestore
(
IN IVssWriterComponents *pComponent
);
// callback on post-restore event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnPostRestore
(
IN IVssWriterComponents *pComponent
);
// callback on post snapshot event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnPostSnapshot
(
IN IVssWriterComponents *pComponent
);
// callback on back off I/O volume event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnBackOffIOOnVolume
(
IN VSS_PWSZ wszVolumeName,
IN VSS_ID snapshotId,
IN VSS_ID providerId
);
// callback on Continue I/O on volume event
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnContinueIOOnVolume
(
IN VSS_PWSZ wszVolumeName,
IN VSS_ID snapshotId,
IN VSS_ID providerId
);
// callback to specify that the volume snaphost service is shutting down. Used
// by alternative writers to signal when to shutdown.
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnVSSShutdown();
// callback to an alternative writer when the application writer subscribes. Used to
// signal the alternative writer to shutdown.
__declspec(dllexport)
virtual bool STDMETHODCALLTYPE OnVSSApplicationStartup();
private:
IVssWriterImpl *m_pWrapper;
};
"
抽象类是不可实例化的,在大多数情况下,它们被用来定义稍后在其他类中实现的接口。当你说你想要调用抽象类的函数时,你可能想要在继承自抽象类的具体类型上调用这些函数。
作为一个例子,假设您有一个GeometricFigure
抽象类,它提供了一个area
虚函数。您不希望获得抽象图形的area
,而希望获得具体图形的area
(例如Triangle
)。抽象类为您提供了一种以统一的方式引用不同图形并调用这些对象上的方法的方法,但是您不是在抽象图形上调用方法,而是在具体对象中调用方法。