Files
2022-10-26 12:25:11 +08:00

433 lines
19 KiB
Plaintext

//////////////////////////////////////////////////////////////////////////
// sqlres.idl
//
// description: IDL file for VB Conflict Resolver type library.
// adapted from sqlres.h
// author: jimraf 10DEC1998
//
// 30APR1999 Added GetDestinationOwnerName() to IReplRowChange
// 10MAY1999 Added INTERACTIVE_RESOLVER_INFO struct
//////////////////////////////////////////////////////////////////////////
//#include <olectl.h>
// This file will be processed by the MIDL tool to
// produce the type library (sqlres.tlb) and marshalling code.
import "oaidl.idl";
//import "ocidl.idl";
import "unknwn.idl";
#ifdef GENVBTYPELIB
#define LPUNICODESTR wchar_t*
#define INTEGERTYPE long
#define BOOLTYPE REPOLE_BOOL
#define PGUIDTYPE REPLGUID*
#define SQLDATATYPE_TYPE REPOLE_SQL_DATATYPE
#else
#define LPUNICODESTR LPWSTR
#define INTEGERTYPE DWORD
#define BOOLTYPE BOOL
#define PGUIDTYPE LPGUID
#define SQLDATATYPE_TYPE long
#endif
//////////////////////////////////////////////////////////////////////////
// enumerated constants
//////////////////////////////////////////////////////////////////////////
//
// enum REPOLE_SQL_DATATYPE
//
// this is just an enum I made out of ODBC constants.
// UNKNOWN_TYPE is bogus, and will/should never be returned by a call
// to GetColumnDatatype()
//
typedef [v1_enum] enum {
REPOLEType_SQL_UNKNOWN_TYPE = 0,
REPOLEType_SQL_CHAR = 1,
REPOLEType_SQL_NUMERIC = 2,
REPOLEType_SQL_DECIMAL = 3,
REPOLEType_SQL_INTEGER = 4,
REPOLEType_SQL_SMALLINT = 5,
REPOLEType_SQL_FLOAT = 6,
REPOLEType_SQL_REAL = 7,
REPOLEType_SQL_DOUBLE = 8,
REPOLEType_SQL_DATETIME = 9,
REPOLEType_SQL_VARCHAR = 12,
REPOLEType_SQL_DATE = 9,
REPOLEType_SQL_INTERVAL = 10,
REPOLEType_SQL_TIME = 10,
REPOLEType_SQL_TIMESTAMP = 11,
REPOLEType_SQL_LONGVARCHAR = -1,
REPOLEType_SQL_BINARY = -2,
REPOLEType_SQL_VARBINARY = -3,
REPOLEType_SQL_LONGVARBINARY = -4,
REPOLEType_SQL_BIGINT = -5,
REPOLEType_SQL_TINYINT = -6,
REPOLEType_SQL_BIT = -7,
REPOLEType_SQL_GUID = -11
} REPOLE_SQL_DATATYPE;
typedef [v1_enum] enum {
REPOLEDataSource_Native = 0x0000,
REPOLEDataSource_ODBC = 0x0001,
REPOLEDataSource_Jet = 0x0002,
REPOLEDataSource_OLEDB = 0x0003,
REPOLEDataSource_Exchange = 0x0004,
REPOLEDataSource_Oracle = 0x0005,
REPOLEDataSource_DB2Universal = 0x0006,
REPOLEDataSource_SSCE = 0x0007,
REPOLEDataSource_XML = 0x0008
} REPOLE_DATASOURCE_TYPE;
typedef [v1_enum] enum {
REPOLESecurity_Min = 0,
REPOLESecurity_Normal = 0,
REPOLESecurity_Integrated = 1,
REPOLESecurity_Mixed = 2,
REPOLESecurity_Max = 2,
REPOLESecurity_Invalid = -1
} REPOLE_SECURITY_TYPE;
typedef enum {
METADATA_TYPE_Missing = 0x0000,
METADATA_TYPE_Tombstone = 0x0001,
METADATA_TYPE_Contents = 0x0002,
METADATA_TYPE_ContentsDeferred = 0x0003, // This means row exists, but isn't in contents yet
METADATA_TYPE_Reserved = 0x0004, // Reserved for future use
METADATA_TYPE_PartialDelete = 0x0005, // Tombstone indicates row no longer belongs at partial replica
METADATA_TYPE_SystemDelete = 0x0006 // Tombstone indicates situations like dupkey/dupindex violation
} METADATA_TYPE;
typedef [v1_enum] enum {
REPOLEChange_SubscriberInsert = 0x00000001,
REPOLEChange_PublisherInsert = 0x00010000,
REPOLEChange_SubscriberDelete_NoConflict = 0x00000002,
REPOLEChange_PublisherDelete_NoConflict = 0x00020000,
REPOLEChange_SubscriberSystemDelete = 0x00000004,
REPOLEChange_PublisherSystemDelete = 0x00040000,
REPOLEChange_SubscriberDelete_Conflict = 0x00000008,
REPOLEChange_PublisherDelete_Conflict = 0x00080000,
REPOLEChange_SubscriberRemoveFromPartial = 0x00000010,
REPOLEChange_PublisherRemoveFromPartial = 0x00100000,
REPOLEChange_SubscriberUpdate_NoConflict = 0x00000020,
REPOLEChange_PublisherUpdate_NoConflict = 0x00200000,
REPOLEChange_SubscriberUpdate_ConflictWithDelete = 0x00000040,
REPOLEChange_PublisherUpdate_ConflictWithDelete = 0x00400000,
REPOLEChange_SubscriberUpdate_ConflictColTrack = 0x00000080,
REPOLEChange_PublisherUpdate_ConflictColTrack = 0x00800000,
REPOLEChange_SubscriberUpdate_ConflictNoColTrack = 0x00000100,
REPOLEChange_PublisherUpdate_ConflictNoColTrack = 0x01000000,
REPOLEChange_UploadInsertFailed = 0x00000200,
REPOLEChange_DownloadInsertFailed = 0x02000000,
REPOLEChange_UploadDeleteFailed = 0x00000400,
REPOLEChange_DownloadDeleteFailed = 0x04000000,
REPOLEChange_UploadUpdateFailed = 0x00000800,
REPOLEChange_DownloadUpdateFailed = 0x08000000,
REPOLEUpdateConflicts = (REPOLEChange_SubscriberUpdate_ConflictColTrack
| REPOLEChange_PublisherUpdate_ConflictColTrack
| REPOLEChange_SubscriberUpdate_ConflictNoColTrack
| REPOLEChange_PublisherUpdate_ConflictNoColTrack),
REPOLEAllConflicts = (REPOLEChange_SubscriberDelete_Conflict
| REPOLEChange_PublisherDelete_Conflict | REPOLEChange_SubscriberUpdate_ConflictWithDelete
| REPOLEChange_PublisherUpdate_ConflictWithDelete | REPOLEUpdateConflicts),
REPOLEAllErrors = (REPOLEChange_UploadInsertFailed | REPOLEChange_DownloadInsertFailed
| REPOLEChange_UploadDeleteFailed | REPOLEChange_DownloadDeleteFailed
| REPOLEChange_UploadUpdateFailed | REPOLEChange_DownloadUpdateFailed),
REPOLEAllNonConflicts = (REPOLEChange_SubscriberInsert | REPOLEChange_PublisherInsert
| REPOLEChange_SubscriberDelete_NoConflict | REPOLEChange_PublisherDelete_NoConflict
| REPOLEChange_SubscriberSystemDelete | REPOLEChange_PublisherSystemDelete
| REPOLEChange_SubscriberRemoveFromPartial | REPOLEChange_SubscriberUpdate_NoConflict
| REPOLEChange_PublisherUpdate_NoConflict),
REPOLEAllChanges = (REPOLEAllConflicts | REPOLEAllErrors | REPOLEAllNonConflicts)
} REPOLE_CHANGE_TYPE;
typedef [v1_enum] enum {
REPOLEConflict_Min = 1,
REPOLEConflict_UpdateConflict = 1,
REPOLEConflict_ColumnUpdateConflict = 2,
REPOLEConflict_UpdateDeleteWinsConflict = 3,
REPOLEConflict_UpdateWinsDeleteConflict = 4,
REPOLEConflict_UploadInsertFailed = 5,
REPOLEConflict_DownloadInsertFailed = 6,
REPOLEConflict_UploadDeleteFailed = 7,
REPOLEConflict_DownloadDeleteFailed = 8,
REPOLEConflict_UploadUpdateFailed = 9,
REPOLEConflict_DownloadUpdateFailed = 10,
REPOLEConflict_ResolutionDone = 11,
REPOLEConflict_Max = 11
} REPOLE_CONFLICT_TYPE;
typedef [v1_enum] enum {
REPOLEColumn_NotUpdated = 0x0001, // No updates to column or data values match
REPOLEColumn_UpdatedNoConflict = 0x0002, // Column updated at src, no column level conflict
REPOLEColumn_UpdatedWithConflict = 0x0003, // Column updated at src, conflicts with change at destination
REPOLEColumn_DifferNoTrack = 0x0004 // No column tracking info, data values are different
} REPOLE_COLSTATUS_TYPE;
typedef [v1_enum] enum {
REPOLEPriority_Source = 0x0001, // The source has the higher priority
REPOLEPriority_Destination = 0x0002, // The destination has the higher priority
REPOLEPriority_Equal = 0x0003 // Source and destination have equal priority
} REPOLE_PRIORITY_TYPE;
typedef [v1_enum] enum {
REPOLEColumnAttribute_Updatable = 0x0001,
REPOLEColumnAttribute_Identity = 0x0002
} REPOLE_COLUMN_ATTRIBUTES;
typedef [v1_enum] enum {
REPOLEExtErrorNoneOrNotSpecified = 0x00000000, // all errors we do not address specifically
REPOLEExtErrorDupKey = 0x00000001, // SQL error 2627
REPOLEExtErrorDupUniqueIndex = 0x00000002 // SQL error 2601
} REPOLE_EXTENDEDERROR_TYPE;
//
// enum REPOLE_BOOL
//
// another hack enum. ensures that proper values for true & false are enforced.
//
typedef [v1_enum] enum {
REPOLEBool_FALSE = 0,
REPOLEBool_TRUE = 1
} REPOLE_BOOL;
//////////////////////////////////////////////////////////////////////////
// REPLGUID type. Defining this ensures that people coding a resolver
// in VB will use the correct definition of a GUID. I've seen some
// bad ones.
//////////////////////////////////////////////////////////////////////////
typedef struct REPLGUID {
long Data1;
short Data2;
short Data3;
unsigned char Data4[8];
} REPLGUID;
//////////////////////////////////////////////////////////////////////////
// interface IConnectionInfo
//
// this interface is implemented by Microsoft. The definition is included
// here only so it appears in the type library & can be used in VB.
//////////////////////////////////////////////////////////////////////////
[
object,
uuid(37E95A52-1CA3-11d0-A11B-00AA003E4672),
helpstring("IConnectionInfo interface"),
pointer_default(unique)
]
interface IConnectionInfo : IUnknown
{
HRESULT GetConnectName ([out, string, size_is(cbConnectName)] LPUNICODESTR ConnectName, INTEGERTYPE cbConnectName);
HRESULT GetServerName ([out, string, size_is(cbServerName)] LPUNICODESTR ServerName, INTEGERTYPE cbServerName);
HRESULT GetHostName ([out, string, size_is(cbHostName)] LPUNICODESTR HostName, INTEGERTYPE cbHostName);
HRESULT GetServerRole ([out, string, size_is(cbServerRole)] LPUNICODESTR ServerRole, INTEGERTYPE cbServerRole);
HRESULT GetInternetAddress ([out, string, size_is(cbInternetAddress)] LPUNICODESTR InternetAddress, INTEGERTYPE cbInternetAddress);
HRESULT GetInternetNetwork ([out, string, size_is(cbInternetNetwork)] LPUNICODESTR InternetNetwork, INTEGERTYPE cbInternetNetwork);
HRESULT GetDatabase ([out, string, size_is(cbDatabase)] LPUNICODESTR Database, INTEGERTYPE cbDatabase);
HRESULT GetDatabaseStatus ([out] long *plDatabaseStatus);
HRESULT GetDatasourcePath ([out, string, size_is(cbDatasourcePath)] LPUNICODESTR DatasourcePath, INTEGERTYPE cbDatasourcePath);
HRESULT GetDataSourceType ([out] REPOLE_DATASOURCE_TYPE* pRetValue);
HRESULT GetSecurityMode ([out] REPOLE_SECURITY_TYPE* pRetValue);
HRESULT GetLogin ([out, string, size_is(cbLogin)] LPUNICODESTR Login, INTEGERTYPE cbLogin);
HRESULT GetPassword ([out, string, size_is(cbPassword)] LPUNICODESTR Password, INTEGERTYPE cbPassword);
HRESULT GetODBCEnvironmentHandle ([out] long* phenv);
HRESULT GetLoginTimeout ([out] long *plLoginTimeout);
HRESULT GetQueryTimeout ([out] long *plQueryTimeout);
HRESULT GetPacketSize ([out] unsigned long *pusPacketSize);
HRESULT GetApplicationName ([out, string, size_is(cbApplicationName)] LPUNICODESTR ApplicationName, INTEGERTYPE cbApplicationName);
HRESULT GetProviderName ([out, string, size_is(cbProviderName)] LPUNICODESTR ProviderName, INTEGERTYPE cbProviderName);
HRESULT GetDatasource ([out, string, size_is(cbDatasource)] LPUNICODESTR Datasource, INTEGERTYPE cbDatasource);
HRESULT GetLocation ([out, string, size_is(cbLocation)] LPUNICODESTR Location, INTEGERTYPE cbLocation);
HRESULT GetProviderString ([out, string, size_is(cbProviderString)] LPUNICODESTR ProviderString, INTEGERTYPE cbProviderString);
HRESULT GetCatalog ([out, string, size_is(cbCatalog)] LPUNICODESTR Catalog, INTEGERTYPE cbCatalog);
#ifdef GENVBTYPELIB
HRESULT GetDBCreatedThisSession ([out] long *pbDBCreatedThisSession);
#else
HRESULT GetDBCreatedThisSession ([out] BOOL *pbDBCreatedThisSession);
#endif
HRESULT SetConnectName([in] LPCWSTR ConnectName);
HRESULT SetServerName([in] LPCWSTR ServerName);
HRESULT SetHostName([in] LPCWSTR HostName);
HRESULT SetServerRole([in] LPCWSTR ServerRole);
HRESULT SetInternetAddress([in] LPCWSTR InternetAddress);
HRESULT SetInternetNetwork([in] LPCWSTR InternetNetwork);
HRESULT SetDatabase([in] LPCWSTR Database);
HRESULT SetDatabaseStatus([in] LONG lDatabaseStatus);
HRESULT SetDatasourcePath([in] LPCWSTR DatasourcePath);
HRESULT SetDataSourceType([in] REPOLE_DATASOURCE_TYPE DataSourceType);
HRESULT SetSecurityMode([in] REPOLE_SECURITY_TYPE SecurityMode);
HRESULT SetLogin([in] LPCWSTR Login);
HRESULT SetPassword([in] LPCWSTR Password);
HRESULT SetODBCEnvironmentHandle([in] long henv);
HRESULT SetLoginTimeout([in] LONG lLoginTimeout);
HRESULT SetQueryTimeout([in] LONG lQueryTimeout);
HRESULT SetPacketSize([in] unsigned long usPacketSize);
HRESULT SetApplicationName([in] LPCWSTR ApplicationName);
HRESULT SetProviderName([in] LPCWSTR ProviderName);
HRESULT SetDatasource([in] LPCWSTR Datasource);
HRESULT SetLocation([in] LPCWSTR Location);
HRESULT SetProviderString([in] LPCWSTR ProviderString);
HRESULT SetCatalog([in] LPCWSTR Catalog);
#ifdef GENVBTYPELIB
HRESULT SetDBCreatedThisSession([in] long bDBCreatedThisSession);
#else
HRESULT SetDBCreatedThisSession([in] BOOL bDBCreatedThisSession);
#endif
HRESULT SetBcpBatchSize([in] LONG lBcpBatchSize);
HRESULT GetBcpBatchSize([out] LONG * plBcpBatchSize);
#ifdef GENVBTYPELIB
HRESULT GetWaitServerResponse([out] long *pbWaitingForResponse, [out] INTEGERTYPE *pdwWaitingSinceTickCount);
HRESULT SetWaitServerResponse([in] long bWaitingForResponse, [in] INTEGERTYPE dwWaitingSinceTickCount);
HRESULT GetUseInprocLoader([out] long *pbUseInprocLoader);
HRESULT SetUseInprocLoader([in] long bUseInprocLoader);
#else
HRESULT GetWaitServerResponse([out] BOOL *pbWaitingForResponse, [out] INTEGERTYPE *pdwWaitingSinceTickCount);
HRESULT SetWaitServerResponse([in] BOOL bWaitingForResponse, [in] INTEGERTYPE dwWaitingSinceTickCount);
HRESULT GetUseInprocLoader([out] BOOL *pbUseInprocLoader);
HRESULT SetUseInprocLoader([in] BOOL bUseInprocLoader);
#endif
HRESULT SetCodePage([in] LONG lCodePage);
HRESULT GetCodePage([out] LONG * plCodePage);
HRESULT SetLCID([in] LONG lLCID);
HRESULT GetLCID([out] LONG * plLCID);
HRESULT SetComparisonStyle([in] LONG lComparisonStyle);
HRESULT GetComparisonStyle([out] LONG * plComparisonStyle);
HRESULT SetNumDeadlockRetries([in] LONG lNumDeadlockRetries);
HRESULT GetNumDeadlockRetries([out] LONG * plNumDeadlockRetries);
HRESULT SetMajorVersion(LONG lMajorVersion);
HRESULT GetMajorVersion(LONG *plMajorVersion);
HRESULT SetMinorVersion(LONG lMinorVersion);
HRESULT GetMinorVersion(LONG *plMinorVersion);
};
//////////////////////////////////////////////////////////////////////////
// interface IReplRowChange
//
// this interface is implemented by Microsoft. The definition is included
// here only so it appears in the type library & can be used in VB.
//////////////////////////////////////////////////////////////////////////
[
object,
uuid(FC2F91C2-1CA2-11d0-A11B-00AA003E4672),
helpstring("IReplRowChange interface"),
pointer_default(unique)
]
interface IReplRowChange : IUnknown
{
HRESULT GetTableName ([out, string, size_is(cbTableName)] LPUNICODESTR pTableName, INTEGERTYPE cbTableName );
HRESULT GetRowIdentifier ([out] PGUIDTYPE pRowGuid );
HRESULT GetResolverProcedureName ([out, string, size_is(cbResolverProcedureName)] LPUNICODESTR pResolverProcedureName, INTEGERTYPE cbResolverProcedureName );
HRESULT GetNumColumns ([out] INTEGERTYPE *pdwColumnCount );
HRESULT GetChangeType ([out] REPOLE_CHANGE_TYPE *pChangeType);
HRESULT GetColumnStatus (INTEGERTYPE ColumnId, [out] REPOLE_COLSTATUS_TYPE *pColStatus);
HRESULT GetColumnName (INTEGERTYPE ColumnId, [out, string, size_is(cbColumnName)] LPUNICODESTR pColumnName, INTEGERTYPE cbColumnName);
HRESULT GetColumnDatatype (INTEGERTYPE ColumnId, [out] SQLDATATYPE_TYPE * plDataType);
#ifdef GENVBTYPELIB
HRESULT GetSourceColumnValue (INTEGERTYPE ColumnId, [out] VARIANT *pvBuffer, [in] INTEGERTYPE cbBufferMax, [out] INTEGERTYPE *pcbBufferActual);
HRESULT GetDestinationColumnValue (INTEGERTYPE ColumnId, [out] VARIANT *pvBuffer, [in] INTEGERTYPE cbBufferMax, [out] INTEGERTYPE *pcbBufferActual);
#else
[local] HRESULT GetSourceColumnValue (INTEGERTYPE ColumnId, [out] void *pvBuffer, [in] INTEGERTYPE bBufferMax, [out] INTEGERTYPE *pcbBufferActual);
[call_as(GetSourceColumnValue)] HRESULT RemoteGetSourceColumnValue (INTEGERTYPE ColumnId, [out] VARIANT *pvBuffer, [in] INTEGERTYPE cbBufferMax, [out] INTEGERTYPE *pcbBufferActual);
[local] HRESULT GetDestinationColumnValue (INTEGERTYPE ColumnId, [out] void *pvBuffer, [in] INTEGERTYPE cbBufferMax, [out] INTEGERTYPE *pcbBufferActual);
[call_as(GetDestinationColumnValue)] HRESULT RemoteGetDestinationColumnValue (INTEGERTYPE ColumnId, [out] VARIANT *pvBuffer, [in] INTEGERTYPE cbBufferMax, [out] INTEGERTYPE *pcbBufferActual);
#endif
HRESULT GetPriorityWinner ([out] REPOLE_PRIORITY_TYPE* pPriorityWinner);
HRESULT GetSourceConnectionInfo ([out] IConnectionInfo **ppSourceConnectionInfo, [out] BOOLTYPE *pfIsPublisher);
HRESULT GetDestinationConnectionInfo ([out] IConnectionInfo **ppDestinationConnectionInfo, [out] BOOLTYPE *pfIsPublisher);
HRESULT DeleteRow ();
HRESULT CopyRowFromSource ();
HRESULT CopyColumnFromSource (INTEGERTYPE ColumnId);
HRESULT ForceRememberChange();
#ifdef GENVBTYPELIB
HRESULT SetColumn (INTEGERTYPE ColumnId, [in] VARIANT *pvBuffer, INTEGERTYPE cbBuffer);
#else
[local] HRESULT SetColumn (INTEGERTYPE ColumnId, [in] void *pvBuffer, INTEGERTYPE cbBuffer);
[call_as(SetColumn)] HRESULT RemoteSetColumn (INTEGERTYPE ColumnId, [in] VARIANT *pvBuffer, INTEGERTYPE cbBuffer);
#endif
HRESULT UpdateRow ();
HRESULT InsertRow ();
HRESULT LogConflict ([in] BOOLTYPE bLogSourceConflict, [in] REPOLE_CONFLICT_TYPE ConflictType, [in] BOOLTYPE bOnlyLogIfUpdater, [in, string, optional, defaultvalue("")] BSTR pszConflictMessage, [in, optional, defaultvalue(FALSE)] BOOLTYPE bLogConflictOnUpload);
HRESULT LogError ([in] REPOLE_CHANGE_TYPE ChangeType, [in, string, optional, defaultvalue("")] BSTR pszErrorMessage);
HRESULT GetErrorInfo ([out] INTEGERTYPE *pErrCode, [string] LPUNICODESTR pErrText);
HRESULT DoDummyUpdate ([in] BOOLTYPE fUpLineage, [in] BOOLTYPE fAtPublisher);
HRESULT GetTableOwnerName ([out, string, size_is(cbOwnerName)] LPUNICODESTR pOwnerName, INTEGERTYPE cbOwnerName);
HRESULT GetRowGuidColName ([out, string, size_is(cbRowGuidColName)] LPUNICODESTR pRowGuidColName, INTEGERTYPE cbRowGuidColName);
HRESULT GetDestinationOwnerName([out, string, size_is(cbDestName)] LPUNICODESTR pDestOwnerName, INTEGERTYPE cbDestName);
HRESULT GetColumnAttributes (INTEGERTYPE ColumnId, [out] REPOLE_COLUMN_ATTRIBUTES* plColumnAttributes);
HRESULT GetExtendedError ([out] REPOLE_EXTENDEDERROR_TYPE* pExtError);
HRESULT SetExtendedError ([in] REPOLE_EXTENDEDERROR_TYPE ExtError);
};
//////////////////////////////////////////////////////////////////////////
// interface ICustomResolver
//
// this is the interface that needs to be implemented by ISVs.
//////////////////////////////////////////////////////////////////////////
[
object,
uuid(FC2F91C1-1CA2-11d0-A11B-00AA003E4672),
helpstring("ICustomResolver interface"),
pointer_default(unique)
]
interface ICustomResolver : IUnknown
{
#ifdef GENVBTYPELIB
HRESULT Reconcile ([in] IReplRowChange *pRowChange, INTEGERTYPE dwFlags, [in] IReplRowChange *pvReserved );
#else
[local] HRESULT Reconcile ([in] IReplRowChange *pRowChange, INTEGERTYPE dwFlags, [in] void *pvReserved );
[call_as(Reconcile)] HRESULT RemoteReconcile ([in] IReplRowChange *pRowChange, INTEGERTYPE dwFlags, [in] IReplRowChange *pvReserved );
#endif
HRESULT GetHandledStates ([in, out] INTEGERTYPE *ResolverBm );
};
//////////////////////////////////////////////////////////////////////////
// type library definition
//////////////////////////////////////////////////////////////////////////
[
uuid(16469B60-92F0-11d2-A8DC-00C04F9FC436),
version(7.0),
helpstring("Microsoft SQL Replication Conflict Resolver Library")
]
library SQLResolver
{
importlib ("stdole32.tlb");
[
uuid(16469B61-92F0-11d2-A8DC-00C04F9FC436),
helpstring("Microsoft SQL Conflict Resolver"),
]
coclass IVBCustomResolver
{
[default] interface ICustomResolver;
}
};