Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Перевод ODS API MS SQL 2000 на Delphi (написание extended stored procedures)

01.01.2007
{ **** UBPFD *********** by delphibase.endimus.com ****
>> перевод ODS API mssql2000 на Delphi (написание extended stored procedures)
 
перевод (как я понял, один из многих) заголовочных файлов
ODS API mssql2000
на object pascal.... для успешной работы необходима opends60.dll...
выполнен с помощью утилиты c2p, её комментарии я оставил...
часть функций, помеченные как устаревшие, не были переведены...
имхо перевод не лишен недостатков, поэтому используйте as is...
добавлю, что у меня всё работает... :)
 
Зависимости: windows
Автор:       wicked, wilk@ua.fm, ICQ:92356239, Тернополь
Copyright:   (1) Microsoft (srv.h), (2) Oleg Bulychov, (3) wicked aka Andy Wilk
Дата:        15 ноября 2002 г.
***************************************************** }
 
{*********************************}
{ Generated by c2pas32 v0.9b }
{ (c) 2001 Oleg Bulychov }
{ Gladiators Software }
{ http://www.astonshell.com/ }
{*********************************}
{(c) 2002 corrections by andy wilk }
 
unit srv_h
;
 
interface
 
uses windows
;
 
//------------------------------------------------------------
// Open Data Services header file: srv.h
// Copyright (c) 1989, 1990, 1991, 1997 by Microsoft Corp.
//
// Avoid double inclusion
 
// ODS uses pack(4) on all CPU types
{$A+ }
 
// define model
 
//dll name
const
  opends_dll
= 'opends60.dll';
 
 
//------------------------------------------------------------
 
// Formats of data types
type
  DBBOOL
= boolean;
  DBBYTE
= byte;
  DBTINYINT
= byte;
  DBSMALLINT
= smallint;
  DBUSMALLINT
= word;
  DBINT
= integer;
  DBCHAR
= char;
  pDBCHAR
= ^DBCHAR;
  DBBINARY
= byte;
  DBBIT
= byte;
  DBFLT8
= double;
  pinteger
= ^integer;
  USHORT
= word;
 
  srv_datetime
= record // Format for SRVDATETIME
    dtdays
: integer; // number of days since 1/1/1900
    dttime
: UINT; // number 300th second since mid
 
end;
  DBDATETIME
= srv_datetime;
 
  srv_money
= record // Format for SRVMONEY
    mnyhigh
: integer;
    mnylow
: UINT;
 
end;
  DBMONEY
= srv_money;
 
  DBFLT4
= single;
  DBMONEY4
= integer;
 
  dbdatetime4
= record // Format for SRVDATETIM4
    numdays
: word; // number of days since 1/1/1900
    nummins
: word; // number of minutes sicne midnight
 
end;
  DBDATETIM4
= dbdatetime4;
 
const
  MAXNUMERICLEN
= 16;
type
  dbnumeric
= record // Format for SRVNUMERIC,SRVNUMERICN,SRVDECIMAL,SRVDECIMALN
    precision
: BYTE;
    scale
: BYTE;
    sign
: BYTE;
    val
: array[0..Pred(MAXNUMERICLEN)] of BYTE;
 
end;
 
//DBNUMERIC = dbnumeric;
  DBDECIMAL
= DBNUMERIC;
 
 
//------------------------------------------------------------
 
// Constants used by APIs
 
// Type Tokens
const
  SRV_TDS_NULL
= {!!!a type cast? =>} {BYTE(} $1F;
  SRV_TDS_TEXT
= {!!!a type cast? =>} {BYTE(} $23;
  SRV_TDS_GUID
= {!!!a type cast? =>} {BYTE(} $24;
  SRV_TDS_VARBINARY
= {!!!a type cast? =>} {BYTE(} $25;
  SRV_TDS_INTN
= {!!!a type cast? =>} {BYTE(} $26;
  SRV_TDS_VARCHAR
= {!!!a type cast? =>} {BYTE(} $27;
  SRV_TDS_BINARY
= {!!!a type cast? =>} {BYTE(} $2D;
  SRV_TDS_IMAGE
= {!!!a type cast? =>} {BYTE(} $22;
  SRV_TDS_CHAR
= {!!!a type cast? =>} {BYTE(} $2F;
  SRV_TDS_INT1
= {!!!a type cast? =>} {BYTE(} $30;
  SRV_TDS_BIT
= {!!!a type cast? =>} {BYTE(} $32;
  SRV_TDS_INT2
= {!!!a type cast? =>} {BYTE(} $34;
  SRV_TDS_DECIMAL
= {!!!a type cast? =>} {BYTE(} $37;
  SRV_TDS_INT4
= {!!!a type cast? =>} {BYTE(} $38;
  SRV_TDS_DATETIM4
= {!!!a type cast? =>} {BYTE(} $3A;
  SRV_TDS_FLT4
= {!!!a type cast? =>} {BYTE(} $3B;
  SRV_TDS_MONEY
= {!!!a type cast? =>} {BYTE(} $3C;
  SRV_TDS_DATETIME
= {!!!a type cast? =>} {BYTE(} $3D;
  SRV_TDS_FLT8
= {!!!a type cast? =>} {BYTE(} $3E;
  SRV_TDS_NUMERIC
= {!!!a type cast? =>} {BYTE(} $3F;
  SRV_TDS_SSVARIANT
= {!!!a type cast? =>} {BYTE(} $62;
  SRV_TDS_NTEXT
= {!!!a type cast? =>} {BYTE(} $63;
  SRV_TDS_BITN
= {!!!a type cast? =>} {BYTE(} $68;
  SRV_TDS_DECIMALN
= {!!!a type cast? =>} {BYTE(} $6A;
  SRV_TDS_NUMERICN
= {!!!a type cast? =>} {BYTE(} $6C;
  SRV_TDS_FLTN
= {!!!a type cast? =>} {BYTE(} $6D;
  SRV_TDS_MONEYN
= {!!!a type cast? =>} {BYTE(} $6E;
  SRV_TDS_DATETIMN
= {!!!a type cast? =>} {BYTE(} $6F;
  SRV_TDS_MONEY4
= {!!!a type cast? =>} {BYTE(} $7A;
  SRV_TDS_INT8
= {!!!a type cast? =>} {BYTE(} $7F;
  SRV_TDS_BIGVARBINARY
= {!!!a type cast? =>} {BYTE(} $A5;
  SRV_TDS_BIGVARCHAR
= {!!!a type cast? =>} {BYTE(} $A7;
  SRV_TDS_BIGBINARY
= {!!!a type cast? =>} {BYTE(} $AD;
  SRV_TDS_BIGCHAR
= {!!!a type cast? =>} {BYTE(} $AF;
  SRV_TDS_NVARCHAR
= {!!!a type cast? =>} {BYTE(} $E7;
  SRV_TDS_NCHAR
= {!!!a type cast? =>} {BYTE(} $EF;
 
 
// Datatypes
 
// Also: values of symbol parameter to srv_symbol when type = SRV_DATATYPE
  SRVNULL
= SRV_TDS_NULL;
  SRVTEXT
= SRV_TDS_TEXT;
  SRVGUID
= SRV_TDS_GUID;
  SRVVARBINARY
= SRV_TDS_VARBINARY;
  SRVINTN
= SRV_TDS_INTN;
  SRVVARCHAR
= SRV_TDS_VARCHAR;
  SRVBINARY
= SRV_TDS_BINARY;
  SRVIMAGE
= SRV_TDS_IMAGE;
  SRVCHAR
= SRV_TDS_CHAR;
  SRVINT1
= SRV_TDS_INT1;
  SRVBIT
= SRV_TDS_BIT;
  SRVINT2
= SRV_TDS_INT2;
  SRVDECIMAL
= SRV_TDS_DECIMAL;
  SRVINT4
= SRV_TDS_INT4;
  SRVDATETIM4
= SRV_TDS_DATETIM4;
  SRVFLT4
= SRV_TDS_FLT4;
  SRVMONEY
= SRV_TDS_MONEY;
  SRVDATETIME
= SRV_TDS_DATETIME;
  SRVFLT8
= SRV_TDS_FLT8;
  SRVNUMERIC
= SRV_TDS_NUMERIC;
  SRVSSVARIANT
= SRV_TDS_SSVARIANT;
  SRVNTEXT
= SRV_TDS_NTEXT;
  SRVBITN
= SRV_TDS_BITN;
  SRVDECIMALN
= SRV_TDS_DECIMALN;
  SRVNUMERICN
= SRV_TDS_NUMERICN;
  SRVFLTN
= SRV_TDS_FLTN;
  SRVMONEYN
= SRV_TDS_MONEYN;
  SRVDATETIMN
= SRV_TDS_DATETIMN;
  SRVMONEY4
= SRV_TDS_MONEY4;
  SRVINT8
= SRV_TDS_INT8;
  SRVBIGVARBINARY
= SRV_TDS_BIGVARBINARY;
  SRVBIGVARCHAR
= SRV_TDS_BIGVARCHAR;
  SRVBIGBINARY
= SRV_TDS_BIGBINARY;
  SRVBIGCHAR
= SRV_TDS_BIGCHAR;
  SRVNVARCHAR
= SRV_TDS_NVARCHAR;
  SRVNCHAR
= SRV_TDS_NCHAR;
 
 
// values for srv_symbol type parameter
  SRV_ERROR
= 0;
  SRV_DONE
= 1;
  SRV_DATATYPE
= 2;
  SRV_EVENT
= 4;
 
 
// values for srv_symbol symbol parameter, when type = SRV_ERROR
  SRV_ENO_OS_ERR
= 0;
  SRV_INFO
= 1;
  SRV_FATAL_PROCESS
= 10;
  SRV_FATAL_SERVER
= 19;
 
 
// Types of server events
 
// Also: values for srv_symbol symbol parameter, when type = SRV_EVENT
  SRV_CONTINUE
= 0;
  SRV_LANGUAGE
= 1;
  SRV_CONNECT
= 2;
  SRV_RPC
= 3;
  SRV_RESTART
= 4;
  SRV_DISCONNECT
= 5;
  SRV_ATTENTION
= 6;
  SRV_SLEEP
= 7;
  SRV_START
= 8;
  SRV_STOP
= 9;
  SRV_EXIT
= 10;
  SRV_CANCEL
= 11;
  SRV_SETUP
= 12;
  SRV_CLOSE
= 13;
  SRV_PRACK
= 14;
  SRV_PRERROR
= 15;
  SRV_ATTENTION_ACK
= 16;
  SRV_CONNECT_V7
= 16;
 
// TDS type for TDS 7 clients. Overloaded with SRV_ATTENTION_ACK
  SRV_SKIP
= 17;
  SRV_TRANSMGR
= 18;
  SRV_PRELOGIN
= 19;
  SRV_OLEDB
= 20;
  SRV_INTERNAL_HANDLER
= 99;
  SRV_PROGRAMMER_DEFINED
= 100;
 
 
// values for srv_sfield field parameter
  SRV_SERVERNAME
= 0;
  SRV_VERSION
= 6;
 
 
// Length to indicate string is null terminated
  SRV_NULLTERM
= -1;
 
 
// values of msgtype parameter to srv_sendmsg
  SRV_MSG_INFO
= 1;
  SRV_MSG_ERROR
= 2;
 
 
// values of status parameter to srv_senddone
 
// Also: values for symbol parameters to srv_symbol when type = SRV_DONE
  SRV_DONE_FINAL
= {!!!a type cast? =>} {USHORT(} $0000;
  SRV_DONE_MORE
= {!!!a type cast? =>} {USHORT(} $0001;
  SRV_DONE_ERROR
= {!!!a type cast? =>} {USHORT(} $0002;
  SRV_DONE_COUNT
= {!!!a type cast? =>} {USHORT(} $0010;
  SRV_DONE_RPC_IN_BATCH
= {!!!a type cast? =>} {USHORT(} $0080;
 
 
// return values of srv_paramstatus
  SRV_PARAMRETURN
= $0001;
  SRV_PARAMDEFAULT
= $0002;
  SRV_PARAMSORTORDER
= $0004;
 
// This is sent by clients in RPC, unset in processRPC
// return values of srv_rpcoptions
  SRV_RECOMPILE
= $0001;
  SRV_NOMETADATA
= $0002;
 
 
// values of field parameter to srv_pfield
 
//#define SRV_LANGUAGE 1 already defined above
 
//#define SRV_EVENT 4 already defined above
  SRV_SPID
= 10;
  SRV_NETSPID
= 11;
  SRV_TYPE
= 12;
  SRV_STATUS
= 13;
  SRV_RMTSERVER
= 14;
  SRV_HOST
= 15;
  SRV_USER
= 16;
  SRV_PWD
= 17;
  SRV_CPID
= 18;
  SRV_APPLNAME
= 19;
  SRV_TDS
= 20;
  SRV_CLIB
= 21;
  SRV_LIBVERS
= 22;
  SRV_ROWSENT
= 23;
  SRV_BCPFLAG
= 24;
  SRV_NATLANG
= 25;
  SRV_PIPEHANDLE
= 26;
  SRV_NETWORK_MODULE
= 27;
  SRV_NETWORK_VERSION
= 28;
  SRV_NETWORK_CONNECTION
= 29;
  SRV_LSECURE
= 30;
  SRV_SAXP
= 31;
  SRV_UNICODE_USER
= 33;
  SRV_UNICODE_PWD
= 35;
  SRV_SPROC_CODEPAGE
= 36;
  SRV_MSGLCID
= 37;
  SRV_INSTANCENAME
= 38;
  SRV_HASHPWD
= 39;
 
 
// return value of SRV_TDSVERSION macro
  SRV_TDS_NONE
= 0;
  SRV_TDS_2_0
= 1;
  SRV_TDS_3_4
= 2;
  SRV_TDS_4_2
= 3;
  SRV_TDS_6_0
= 4;
  SRV_TDS_7_0
= 5;
 
 
// Return values from APIs
type
  SRVRETCODE
= integer; // SUCCEED or FAIL
 
 
//{$ifndef ODBCVER}
  RETCODE
= integer;
 
//{$endif}
 
 
//{$if !defined( SUCCEED )}
const
  _SUCCEED
= 1; // Successful return value
 
//{$endif}
 
 
//{$if !defined( FAIL )}
  _FAIL
= 0; // Unsuccessful return value
 
//{$endif}
 
  SRV_DUPLICATE_HANDLER
= 2; // additional return value for srv_pre/post_handle
 
//------------------------------------------------
 
//PreDeclare structures
 
//
type
  srv_server
= record
 
end;
  pSRV_SERVER
= ^srv_server;
 
  srv_config
= record
 
end;
  pSRV_CONFIG
= ^srv_config;
 
  srv_proc
= record
 
end;
  pSRV_PROC
= ^srv_proc;
 
 
//------------------------------------------------
 
//------------------------------------------------
 
// ODS MACROs & APIs
 
// Describing and sending a result set
 
function srv_describe(srvproc: pSRV_PROC;
  colnumber
: integer;
  column_name
: pchar;
  namelen
: integer;
  desttype
: integer;
  destlen
: integer;
  srctype
: integer;
  srclen
: integer;
  srcdata
: pointer): integer; cdecl; external opends_dll name 'srv_describe';
 
function srv_setutype(srvproc: pSRV_PROC; column: integer; usertype: integer):
  integer
; cdecl; external opends_dll name 'srv_setutype';
 
function srv_setcoldata(srvproc: pSRV_PROC; column: integer; data: pinteger):
  integer
; cdecl; external opends_dll name 'srv_setcoldata';
 
function srv_setcollen(srvproc: pSRV_PROC; column: integer; len: integer):
  integer
; cdecl; external opends_dll name 'srv_setcollen';
 
function srv_sendrow(srvproc: pSRV_PROC): integer; cdecl; external opends_dll
name
'srv_sendrow';
 
function srv_senddone(srvproc: pSRV_PROC; status: USHORT; curcmd: USHORT; count:
  integer
): integer; cdecl; external opends_dll name 'srv_senddone';
 
// Dealing with Extended Procedure parameters
 
function srv_rpcparams(srvproc: pSRV_PROC): integer; cdecl; external opends_dll
name
'srv_rpcparams';
 
function srv_paraminfo(srvproc: pSRV_PROC;
  n
: integer;
 
var pbType: integer;
 
var pcbMaxLen: integer;
 
var pcbActualLen: integer;
  pbData
: pointer;
 
var pfNull: byte): integer; cdecl; external opends_dll name 'srv_paraminfo';
 
function srv_paramsetoutput(srvproc: pSRV_PROC;
  n
: integer;
  pbData
: pointer;
  cbLen
: integer;
  fNull
: boolean): integer; cdecl; external opends_dll name
'srv_paramsetoutput';
 
//procedure srv_paramdata{!!!3 unknown typedef}; cdecl; external opends_dll name 'srv_paramdata';
 
//function srv_paramlen{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_paramlen';
 
//function srv_parammaxlen{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_parammaxlen';
 
//function srv_paramtype{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_paramtype';
 
//function srv_paramset{!!!3 unknown typedef}: integer; cdecl; external opends_dll name 'srv_paramset';
 
function srv_paramname(srvproc: pSRV_PROC;
  n
: integer;
  len
: integer): pchar; cdecl; external opends_dll name 'srv_paramname';
 
function srv_paramnumber(srvproc: pSRV_PROC;
  name
: pchar;
  namelen
: integer): integer; cdecl; external opends_dll name 'srv_paramnumber';
 
//--------------------------------------------------------------
//--------------------------------------------------------------
// The rest of these APIs are still supported, in SQL Server 7.0,
// but may not be supported after SQL Server 7.0
// MACROs
 
//function SRV_GETSERVER(a: integer): integer; {<= !!!6 unknown macro}
 
//function SRV_GOT_ATTENTION(a: integer): integer; {<= !!!6 unknown macro}
 
//function SRV_TDSVERSION(a: integer): integer; {<= !!!6 unknown macro}
 
//function srv_getserver(srvproc: pSRV_PROC): pSRV_SERVER; cdecl; external opends_dll name 'srv_getserver';
 
//function srv_got_attention(srvproc: pSRV_PROC): boolean; cdecl; external opends_dll name 'srv_got_attention';
 
// Memory
 
//function srv_alloc(ulSize: integer): pointer; cdecl; external opends_dll name 'srv_alloc';
 
//function srv_bmove(from: pinteger; to: pinteger; count: integer): integer; cdecl; external opends_dll name 'srv_bmove';
 
//function srv_bzero(location: pinteger; count: integer): integer; cdecl; external opends_dll name 'srv_bzero';
 
//function srv_free(ptr: pinteger): integer; cdecl; external opends_dll name 'srv_free';
 
function srv_convert(srvproc: pSRV_PROC;
  srctype
: integer;
  src
: pointer;
  srclen
: DBINT;
  desttype
: integer;
  dest
: pointer;
  destlen
: DBINT): integer; cdecl; external opends_dll name 'srv_convert';
 
function srv_getuserdata(srvproc: pSRV_PROC): pointer; cdecl; external opends_dll
name
'srv_getuserdata';
 
function srv_getbindtoken(srvproc: pSRV_PROC; token_buf: pchar): integer; cdecl;
external opends_dll name
'srv_getbindtoken';
 
//function srv_getdtcxact(srvproc: pSRV_PROC; {!!!3 unknown typedef}): integer; cdecl; external opends_dll name 'srv_getdtcxact';
 
type
 
EventHandler = function(p: pointer): integer;
 
 
//function srv_impersonate_client(srvproc: pSRV_PROC): integer; cdecl; external opends_dll name 'srv_impersonate_client';
 
 
//function srv_langcpy(srvproc: pSRV_PROC; start: integer; nbytes: integer; buffer: pchar): integer; cdecl; external opends_dll name 'srv_langcpy';
 
 
//function srv_langlen(srvproc: pSRV_PROC): integer; cdecl; external opends_dll name 'srv_langlen';
 
 
//function srv_langptr(srvproc: pSRV_PROC): pointer; cdecl; external opends_dll name 'srv_langptr';
 
 
//function srv_log(server: pSRV_SERVER; datestamp: BOOL; msg: pchar; msglen: integer): integer; cdecl; external opends_dll name 'srv_log';
 
function srv_paramstatus(srvproc: pSRV_PROC;
  n
: integer): integer; cdecl; external opends_dll name 'srv_paramstatus';
 
function srv_pfieldex(srvproc: pSRV_PROC; field: integer; len: pinteger):
  pointer
; cdecl; external opends_dll name 'srv_pfieldex';
 
function srv_pfield(srvproc: pSRV_PROC; field: integer; len: pinteger): pchar;
cdecl
; external opends_dll name 'srv_pfield';
 
function srv_returnval(srvproc: pSRV_PROC; valuename: pchar; len: integer;
  status
: BYTE; _type: integer; maxlen: integer; datalen: integer; value:
  pinteger
): integer; cdecl; external opends_dll name 'srv_returnval';
 
function srv_revert_to_self(srvproc: pSRV_PROC): integer; cdecl; external
opends_dll name
'srv_revert_to_self';
 
function srv_rpcdb(srvproc: pSRV_PROC; len: pinteger): pchar; cdecl; external
opends_dll name
'srv_rpcdb';
 
function srv_rpcname(srvproc: pSRV_PROC; len: pinteger): pchar; cdecl; external
opends_dll name
'srv_rpcname';
 
function srv_rpcnumber(srvproc: pSRV_PROC): integer; cdecl; external opends_dll
name
'srv_rpcnumber';
 
function srv_rpcoptions(srvproc: pSRV_PROC): USHORT; cdecl; external opends_dll
name
'srv_rpcoptions';
 
function srv_rpcowner(srvproc: pSRV_PROC; len: pinteger): pchar; cdecl; external
opends_dll name
'srv_rpcowner';
 
// message text
 
function srv_wsendmsg(srvproc: pSRV_PROC;
  msgnum
: integer;
  msgclass
: BYTE;
  msg
: pwidestring;
  msglen
: integer): integer; cdecl; external opends_dll name 'srv_wsendmsg';
 
function srv_sendmsg(srvproc: pSRV_PROC;
  msgtype
: integer;
  msgnum
: integer;
  msgclass
: BYTE;
  state
: BYTE;
  rpcname
: pchar;
  rpcnamelen
: integer;
  linenum
: USHORT;
  msg
: pchar;
  msglen
: integer): integer; cdecl; external opends_dll name 'srv_sendmsg';
 
function srv_sendstatus(srvproc: pSRV_PROC; status: integer): integer; cdecl;
external opends_dll name
'srv_sendstatus';
 
function srv_setuserdata(srvproc: pSRV_PROC; _ptr: pointer): integer; cdecl;
external opends_dll name
'srv_setuserdata';
 
function srv_sfield(server: pSRV_SERVER; field: integer; len: pinteger): pchar;
cdecl
; external opends_dll name 'srv_sfield';
 
function srv_symbol(_type: integer; symbol: integer; len: pinteger): pchar;
cdecl
; external opends_dll name 'srv_symbol';
 
function srv_tdsversion(srvproc: pSRV_PROC): integer; cdecl; external opends_dll
name
'srv_tdsversion';
 
function srv_willconvert(srctype: integer; desttype: integer): BOOL; cdecl;
external opends_dll name
'srv_willconvert';
 
function srv_terminatethread(srvproc: pSRV_PROC): integer; cdecl; external
opends_dll name
'srv_terminatethread';
 
function srv_sendstatistics(srvproc: pSRV_PROC): integer; cdecl; external
opends_dll name
'srv_sendstatistics';
 
function srv_clearstatistics(srvproc: pSRV_PROC): integer; cdecl; external
opends_dll name
'srv_clearstatistics';
 
function srv_message_handler(srvproc: pSRV_PROC;
  errornum
: integer;
  severity
: BYTE;
  state
: BYTE;
  oserrnum
: integer;
  errtext
: pchar;
  errtextlen
: integer;
  oserrtext
: pchar;
  oserrtextlen
: integer): integer; cdecl; external opends_dll name
'srv_message_handler';
 
function srv_pre_handle(server: pSRV_SERVER; srvproc: pSRV_PROC; event: integer;
  handler
: EventHandler; remove: boolean): integer; cdecl; external opends_dll
    name
'srv_pre_handle';
 
function srv_post_handle(server: pSRV_SERVER; srvproc: pSRV_PROC; event:
  integer
; handler: EventHandler; remove: boolean): integer; cdecl; external
opends_dll name
'srv_post_handle';
 
function srv_IgnoreAnsiToOem(srvproc: pSRV_PROC; bTF: boolean): integer; cdecl;
external opends_dll name
'srv_IgnoreAnsiToOem';
 
{!!!1 => pragma pack()}
 
const
  SS_MAJOR_VERSION
= 7;
  SS_MINOR_VERSION
= 0;
  SS_LEVEL_VERSION
= 0;
  SS_MINIMUM_VERSION
= '7.00.00.0000';
  ODS_VERSION
= ((SS_MAJOR_VERSION shl 24) or (SS_MINOR_VERSION shl 16));
 
 
//_ODS_SRV_H_
 
//////////////////////////////////////////////////////////////////
 
// Suggested implementation of __GetXpVersion
 
//
 
//__declspec(dllexport) ULONG __GetXpVersion()
 
// {
 
// return ODS_VERSION;
 
// }
 
//////////////////////////////////////////////////////////////////
 
implementation
 
end.