Har du noen gang forsøkt å skape en lagret prosedyre på en SQL Server? Hva om den funksjonaliteten du ønsker å innlemme er ikke inne i SQL, men i Delphi prosjektet? Microsoft gir ODS (Open Data Services) som er et API for å hjelpe deg å lage en slik funksjonalitet ved å legge DLL-er til din SQL Server som inneholder utvidet lagrede Procedures.This er hvordan du gjør det .... Som en spesiell bonus, denne artikkelen også en enkel løsning for å kryptere dataene inne SQL Server bruker Extended Lagret Procedures.What trenger vi 1) opends60.dll (fra en full installasjon med utviklerverktøy for MSSQL eller MSDE) 2) MsOdsApi.pas - FORFATTER: Leonid »MC 'Belousov (www.bramc.ru/soft/) Header fil som skal brukes opends60.dll) (inkludert på slutten av artikkelen) 3) En lokal SQL Server for testing (MSDE vil gjøre fine) .Merk: For kryptografi jeg brukte komponentene finner under MIT lisens her: http: //www.cityinthesky.co.uk/cryptography.htmlSteps: 1) Lag en ny DLL.2) Lag en enhet og i bruk klausul legge den MsOdsApi unit.3) I bibliotekfilen i underkant av ther Bruker klausul legge Eksport og navnene på de funksjoner til eksport: bibliotek MyEncryptDll, bruker SysUtils, Klasser, Unit1 i 'Unit1.pas'; eksporterer xp_DoEncrypt, xp_DoDecrypt; beginend.4) I Unit fil rett under Bruker klausul avgi din funksjon referanse: funksjon xp_DoEncrypt (pSrvProc: SRV_PROC): Integer; cdecl; funksjon xp_DoDecrypt (pSrvProc: SRV_PROC): Integer; cdecl; MERKNADER: cdecl er nødvendig for ODS å kunne ringe dine funksjoner. SRV_PROC er et håndtak i den lagrede prosedyren information.5) Koden til DoEncrypt er dette: Basert på kildekoden av Leonid 'MC' Belousov (www.bramc.ru/soft/)(DoDecrypt er akkurat det samme bare med en DecryptString (s) call.function xp_Encrypt (pSrvProc: SRV_PROC): Integer; cdecl; Var jeg, sz: Integer; BTYPE: Byte; fNull: Bool, cbMaxLen, cbActualLen: ULONG; MYDATA, myanswer, MyKey: array [0..255 ] av røye, FDCP_3des: TDCP_3des; s: string; ps: pchar; begynne for i: = 0 til 255 gjør begynne MYDATA [i]: = # 0; myanswer [i]: = # 0; MyKey [i]: = # 0; ende;! hvis srv_rpcparams (pSrvProc) = 2 deretter //Sjekk om inngangsparametre er til stede ... begynne srv_paraminfo (pSrvProc, 1,bType, //La oss bruke første inndataparameterencbMaxLen,cbActualLen, //MERK: Vi antar her hva bare to parameteremyData [0],fNull); //av typen String kan sendes !!! BTYPE: = SRVVARCHAR; srv_paraminfo (pSrvProc, 2,bType,cbMaxLen,cbActualLen, myKey [0],fNull); end annet MYDATA: '' =; //Ingen inngangsparametre? Bruk standardverdi i stedet. //Krypteringskoden under kan du gjøre hva du trenger her med parameterverdier FDCP_3des: = TDCP_3des.Create (null); FDCP_3des.BlockSize: = 64; FDCP_3des.Algorithm: = '3DES'; FDCP_3des.CipherMode: = cmCBC; FDCP_3des.Id:=24; FDCP_3des.MaxKeySize: = 192; FDCP_3des.InitStr (MyKey, TDCP_sha1); s: = streng (mydata); strpcopy (myAnswer, FDCP_3des.EncryptString (s)); FDCP_3des.Burn; //OPPSETT SVAR VERDIER TIL PCHAR OG KOMME STØRRELSE s: = streng (myAnswer); sz: = lengde (s); ps: = allocmem (sz); ps: = pchar (s); //Beskriv kolonner //(Egentlig du gjør at for hver datatype og hver kolonne du ønsker å returnere). srv_describe (pSrvProc, 1, 'Value', SRV_NULLTERM, SRVVARCHAR, sz, SRVVARCHAR, sz, null); //Begynn utgang ... srv_setcoldata (pSrvProc, 1,ps [0]); srv_sendrow (pSrvProc); //Send raden. //La retur utdataparameteren (bare for eksempel). srv_senddone (pSrvProc, //slutt sende data tilbake til SQL Server: (SRV_DONE_COUNT eller SRV_DONE_MORE), 0, 1); //Sende resultater ferdigmelding. //Frigjøre Komponenten Kryptering FreeAndNil (FDCP_3des); Resultatet: = 1; //Rapporter suksess (1 = LYKKES, 0 = FAIL) ende; MERK: Det er en rekke ting du kan gjøre med ODS. Dette er bare et eksempel for Delphi. Du kan lese ODS hjelp i MSDN og engang more.6) Testing og Debugging: (Kilde Leonid 'MC' Belousov (www.bramc.ru/soft/))A) Installer SQL 7.0 /2000 på arbeidsstasjonen (eller installere Delphi på arbeidsstasjon der SQL Server er installert) .B) Registrer din Xp på SQL Server. MERKNADER: Registrer Xp som dette: bruk mester go sp_addextendedproc 'xp_DoEncrypt', 'MyEncryptDll.dll' go sp_addextendedproc 'xp_DoDecrypt', 'MyEncryptDll.dll' go Unregister Xp som dette: bruk mester go sp_dropextendedproc 'xp_DoEncrypt' go sp_dropextendedproc 'xp_DoDecrypt' go Lås opp DLL i tilfelle det fortsatt blir brukt av SQL som dette: bruk mester gå DBCC MyEncryptDll (GRATIS) GOC) I Delphi, velg fra hovedmenyen Run - > Kjør Parameters.In Vertsprogrammet angir du et banenavn til SQL Server kjørbar (sqlservr.exe). For SQL 7.0, er dette nok. For SQL 2000, i parameterfeltet angir en kommandolinje parameter "-sYOUR_SQL_NAME", der YOUR_SQL_NAME er navnet tildelt din SQL Server under installation.Set brytningspunkter i Delphi kode og kjøre prosjektet. SQL Server vil starte som en konsoll application.D) Du kan kjøre din Xp fra Query Analyzer og spor kode i Delphi. MERK: Når du utfører en utvidet lagret prosedyre gjøres slik: exec master..xp_DoEncrypt 'ValueToEncrypt', 'KeyValue' Goe) For å avslutte programmet, trykker Ctrl + Pause i konsollen SQL Server vindu .--------- ---------------------------------------------- Slutten av artikkelen. Bellow følger en enhet som kreves for ODS .------------------------------------------ ------------- MsOdsApi.pas (Kopier fra linjen nedenfor) {- Master Cluster Bibliotek - Copyright © 1996-2002 Leonid Belousov (aka Master Cluster) mailto: [email protected] www.bramc .ru /soft /- Beskrivelse: oversettelse av c-overskrifter av Microsoft Open Data Services API} enhet MsOdsApi; //------------------------- ----------------------------------- //Open Data Services header fil: srv.h //Copyright ( c) 1989, 1990, 1991, 1997 av Microsoft Corp .////Unngå dobbelt inkludering //# ifndef _ODS_SRV_H _ //_ODS_SRV_H _ //# include "windows.h" //ODS bruker pakke (4) på alle typer CPU //# pragma pakke (4) //# ifdef __cplusplus //extern "C" {//# endif //definerer modellen //# hvis! definert (FAR) //FAR langt //# endif //---- -------------------------------------------------- ------ //formater av datatyper //# hvis! definerte (DBTYPEDEFS) //Må ikke komme i konflikt med DBLIB definisjoner //# Hvis! definerte (MAXNUMERICLEN) //ikke er i konflikt med ODBC definisjoner //DBTYPEDEFSinterfaceuses Windows; skriver DBBOOL = Byte; DBBYTE = Byte; DBTINYINT = Byte; DBSMALLINT = SMALLINT; DBUSMALLINT = Word; DBINT = Longint; DBCHAR = Char; PDBCHAR = ^ DBCHAR; DBBINARY = Byte; DBBIT = Byte; DBFLT8 = Double; srv_datetime = rekord //Format for SRVDATETIME dtdays: Longint; //Antall dager siden 1/1/1900 dttime: Long; //Nummer 300th andre siden midten slutten; DBDATETIME = srv_datetime; srv_dbdatetime4 = rekord //Format for SRVDATETIM4 numdays: Word; //Antall dager siden 1/1/1900 nummins: Word; //Antall minutter sicne midnatt slutten; DBDATETIM4 = srv_dbdatetime4; srv_money = rekord //Format for SRVMONEY mnyhigh: Longint; mnylow: Long; slutt; DBMONEY = srv_money; DBFLT4 = Double; DBMONEY4 = Longint; konst MAXNUMERICDIG = 38; DEFAULTPRECISION = 19; //18 DEFAULTSCALE = 0; MAXNUMERICLEN = 16 -typen srv_dbnumeric = pakket rekord //Format for SRVNUMERIC, SRVNUMERICN, SRVDECIMAL, SRVDECIMALN presisjon: Byte; skala: Byte; logg: Byte; //1 = positiv, 0 = Negativ val: array [0..MAXNUMERICLEN-1] av Byte; //Polstret lite endian verdi end; DBNUMERIC = srv_dbnumeric; DBDECIMAL = DBNUMERIC;! //# Endif //#if definert (MAXNUMERICLEN) //# endif //#if definert (DBTYPEDEFS) //------------------ ------------------------------------------ //Konstanter brukes av APIer //Skriv Tokensconst SRV_TDS_NULL = $ 1f; SRV_TDS_TEXT = $ 23; SRV_TDS_GUID = $ 24; SRV_TDS_VARBINARY = $ 25; SRV_TDS_INTN = $ 26; SRV_TDS_VARCHAR = $ 27; SRV_TDS_BINARY = $ 2d; SRV_TDS_IMAGE = $ 22; SRV_TDS_CHAR = $ 2f; SRV_TDS_INT1 = $ 30; SRV_TDS_BIT = $ 32; SRV_TDS_INT2 = $ 34; SRV_TDS_DECIMAL = $ 37; SRV_TDS_INT4 = $ 38; SRV_TDS_DATETIM4 = $ 3a; SRV_TDS_FLT4 = $ 3b; SRV_TDS_MONEY = $ 3c; SRV_TDS_DATETIME = $ 3d; SRV_TDS_FLT8 = $ 3e; SRV_TDS_NUMERIC = $ 3f; SRV_TDS_NTEXT = $ 63; SRV_TDS_BITN = $ 68; SRV_TDS_DECIMALN = $ 6a; SRV_TDS_NUMERICN = $ 6c; SRV_TDS_FLTN = $ 6d; SRV_TDS_MONEYN = $ 6e; SRV_TDS_DATETIMN = $ 6f; SRV_TDS_MONEY4 = $ 7a; SRV_TDS_INT8 = $ 7f; //SQL 2000 og senere SRV_TDS_BIGVARBINARY = $ A5; SRV_TDS_BIGVARCHAR = $ A7; SRV_TDS_BIGBINARY = $ AD; SRV_TDS_BIGCHAR = $ AF; SRV_TDS_NVARCHAR = $ e7; SRV_TDS_NCHAR = $ ef; //Datatyper //Også: verdier av symbol parameter til srv_symbol når 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; 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; //SQL 2000 og senere SRVBIGVARBINARY = SRV_TDS_BIGVARBINARY; SRVBIGVARCHAR = SRV_TDS_BIGVARCHAR; SRVBIGBINARY = SRV_TDS_BIGBINARY; SRVBIGCHAR = SRV_TDS_BIGCHAR; SRVNVARCHAR = SRV_TDS_NVARCHAR; SRVNCHAR = SRV_TDS_NCHAR; //verdier for srv_symbol typeparameter SRV_ERROR = 0; SRV_DONE = 1; SRV_DATATYPE = 2; SRV_EVENT = 4; //verdier for srv_symbol symbol parameter, når type = SRV_ERROR SRV_ENO_OS_ERR = 0; SRV_INFO = 1; SRV_FATAL_PROCESS = 10; SRV_FATAL_SERVER = 19; //Typer av server events //Også: verdier for srv_symbol symbol parameter, når 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 klienter. Overlesset med SRV_ATTENTION_ACK SRV_SKIP = 17; SRV_TRANSMGR = 18; SRV_OLEDB = 20; SRV_INTERNAL_HANDLER = 99; SRV_PROGRAMMER_DEFINED = 100; //verdier for srv_config opsjonsparameter SRV_CONNECTIONS = 1; SRV_LOGFILE = 2; SRV_STACKSIZE = 3; SRV_REMOTE_ACCESS = 7; SRV_REMOTE_CONNECTIONS = 9; SRV_MAX_PACKETS = 10; SRV_MAXWORKINGTHREADS = 11; SRV_MINWORKINGTHREADS = 12; SRV_THREADTIMEOUT = 13; SRV_MAX_PACKETSIZE = 17; SRV_THREADPRIORITY = 18; SRV_ANSI_CODEPAGE = 19; SRV_DEFAULT_PACKETSIZE = 26; SRV_PASSTHROUGH = 27; //vlaues for srv_config verdi parameter når option = SRV_THREADPRIORITY SRV_PRIORITY_LOW = THREAD_PRIORITY_LOWEST; SRV_PRIORITY_NORMAL = THREAD_PRIORITY_NORMAL; SRV_PRIORITY_HIGH = THREAD_PRIORITY_HIGHEST; SRV_PRIORITY_CRITICAL = THREAD_PRIORITY_TIME_CRITICAL; //verdier for srv_sfield feltet parameter SRV_SERVERNAME = 0; SRV_VERSION = 6; //Lengde å indikere strengen er null terminert SRV_NULLTERM = 1; //verdier av mldType parameter til srv_sendmsg SRV_MSG_INFO = 1; SRV_MSG_ERROR = 2; //verdier av status parameter til srv_senddone //Også: verdier for symbol parametere for å srv_symbol når type = SRV_DONE SRV_DONE_FINAL = $ 0000; SRV_DONE_MORE = $ 0001; SRV_DONE_ERROR = $ 0002; SRV_DONE_COUNT = $ 0010; SRV_DONE_RPC_IN_BATCH = $ 0080; //returnerer verdier av srv_paramstatus SRV_PARAMRETURN = $ 0001; SRV_PARAMDEFAULT = $ 0002; //returnerer verdier av srv_rpcoptions SRV_RECOMPILE = $ 0001; SRV_NOMETADATA = $ 0002; //verdier av feltet parameter til srv_pfield //SRV_LANGUAGE en allerede definert ovenfor //SRV_EVENT 4 allerede definert ovenfor 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; //returverdi av SRV_TDSVERSION makro 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; //Returner verdier fra APIstype SRVRETCODE = Integer; //Lykkes eller mislykkes RETCODE = Integer; konst LYKKES = 1; //Vellykket returverdi FAIL = 0; //Mislykket returverdi SRV_DUPLICATE_HANDLER = 2; //Ekstra returverdi for srv_pre /post_handle //--------------------------------------- --------- //PreDeclare strukturer //{struct srv_server; typedef struct srv_server SRV_SERVER, struct srv_config; typedef struct srv_config SRV_CONFIG; struct srv_proc; typedef struct srv_proc SRV_PROC;} skriver SRV_SERVER = Pointer; SRV_CONFIG = Pointer; SRV_PROC = Pointer;//------------------------------------------------//------------------------------------------------//ODS makroer & APIer //beskrive og sender et resultat setfunction srv_describe (srvproc: SRV_PROC; colnumber: Integer; kolonne: PCHAR; namelen: Integer; desttype, destlen, srctype, srclen: Integer; srcData: Pointer): Integer; cdecl; funksjon srv_setutype (srvproc: SRV_PROC; kolonne: Integer; brukertype: Longint): Integer; cdecl; funksjon srv_setcoldata (srvproc: SRV_PROC; kolonne: Integer; data: Pointer): Integer; cdecl; funksjon srv_setcollen (srvproc: SRV_PROC; kolonnen, len: Integer): Integer; cdecl; funksjon srv_sendrow (srvproc: SRV_PROC): Integer; cdecl; funksjon srv_senddone (srvproc: SRV_PROC, status, curcmd: Word, teller: Longint): Integer; cdecl; //Dealing med utvidet Prosedyre parametersfunction srv_rpcparams (srvproc: SRV_PROC): Integer; cdecl; funksjon srv_paraminfo (srvproc: SRV_PROC; n: Integer; pbType: PByte; pcbMaxLen, pcbActualLen: Pulong; pbData: PByte; pfNull: PBOOL): Integer; cdecl; funksjon srv_paramsetoutput (srvproc: SRV_PROC; n: Integer; pbData: PByte; cbLen: ULONG; fNull: BOOL): Integer; cdecl; funksjon srv_paramdata (srvproc: SRV_PROC; n: Integer): Pointer; cdecl; funksjon srv_paramlen (srvproc: SRV_PROC; n: Integer): Integer; cdecl; funksjon srv_parammaxlen (srvproc: SRV_PROC; n: Integer): Integer; cdecl; funksjon srv_paramtype (srvproc: SRV_PROC; n: Integer): Integer; cdecl; funksjon srv_paramset (srvproc: SRV_PROC; n: Integer; data: Pointer; int: Integer): Integer; cdecl; funksjon srv_paramname (srvproc: SRV_PROC; n: Integer; Var len: Integer): PChar; cdecl; funksjon srv_paramnumber (srvproc: SRV_PROC; name: PChar; namelen: Integer): Integer; cdecl;//--------------------------------------------------------------//--------------------------------------------------------------//Resten av disse API-er er fortsatt støttes, i SQL Server 7.0, //men støttes kanskje ikke etter at SQL Server 7.0 //makroer {SRV_GETCONFIG (a) srv_getconfig (a) SRV_GETSERVER (a) srv_getserver (a) SRV_GOT_ATTENTION (a) srv_got_attention (a) SRV_EVENTDATA (a) srv_eventdata (a) SRV_IODEAD (a) srv_iodead (a) SRV_TDSVERSION (a) srv_tdsversion (a)} funksjon srv_getconfig (server: SRV_SERVER): SRV_CONFIG; cdecl; funksjon srv_getserver (srvproc: SRV_PROC): SRV_SERVER; cdecl; funksjon srv_got_attention (srvproc: SRV_PROC): Bool; cdecl; funksjon srv_eventdata (srvproc: SRV_PROC): Pointer; cdecl; //Memoryfunction srv_alloc (ulSize: Longint): Pointer; cdecl; funksjon srv_bmove (fra: Pointer, pto: Pointer, teller: Longint): Integer; cdecl; funksjon srv_bzero (plassering: Pointer, teller: Longint): Integer; cdecl; funksjon srv_free (PTR: Pointer): Integer; cdecl; funksjon srv_config_fn (config: SRV_CONFIG; alternativ: Longint, verdi: PChar; valuelen: Integer): Integer; cdecl; funksjon srv_config_alloc: SRV_CONFIG; cdecl; funksjon srv_convert (srvproc: SRV_PROC; srctype: Integer; src: Pointer; srclen: DBINT; desttype: Integer; dest: Pointer; destlen: DBINT): Integer; cdecl {int (* srv_errhandle (int (* handler) (SRV_SERVER * server, SRV_PROC * srvproc, int srverror, BYTE alvorlighetsgrad, BYTE staten, int oserrnum, char * errtext, int errtextlen, char * oserrtext, int oserrtextlen))) (SRV_SERVER * server, SRV_PROC * srvproc, int srverror, BYTE alvorlighetsgrad, BYTE staten, int oserrnum, char * errtext, int errtextlen, char * oserrtext, int oserrtextlen);} funksjon srv_event_fn (srvproc: SRV_PROC; event: Integer; data: PByte): Integer; cdecl; funksjon srv_getuserdata (srvproc: SRV_PROC): Pointer; cdecl; funksjon srv_getbindtoken (srvproc: SRV_PROC; token_buf: PChar): Integer; cdecl; funksjon srv_getdtcxact (srvproc: SRV_PROC; ppv: Pointer): Integer; cdecl; //typedef int (* Event) (void *) -typen Event = Pointer; funksjon srv_handle (server: SRV_SERVER, int: Longint, handler: Event): Event; cdecl; funksjon srv_impersonate_client (srvproc: SRV_PROC): Integer; cdecl; funksjon srv_init (config: SRV_CONFIG; connectname: PChar; namelen: Integer): SRV_SERVER; cdecl; funksjon srv_iodead (srvproc: SRV_PROC): Bool; cdecl; funksjon srv_langcpy (srvproc: SRV_PROC, starte, nbytes: Longint; buffer: PChar): Longint; cdecl; funksjon srv_langlen (srvproc: SRV_PROC): Longint; cdecl; funksjon srv_langptr (srvproc: SRV_PROC): Pointer; cdecl; funksjon srv_log (server: SRV_SERVER, datostemple: Bool, msg: PChar; msglen: Integer): Integer; cdecl; funksjon srv_paramstatus (srvproc: SRV_PROC; n: Integer): Integer; cdecl; funksjon srv_pfield (srvproc: SRV_PROC; felt: Integer; len: PInteger): PChar; cdecl; funksjon srv_returnval (srvproc: SRV_PROC; value_name: PDBCHAR; len: Integer; status: Byte; iType, maxlen, datalen: DBINT, verdi: PByte): Integer; cdecl; funksjon srv_revert_to_self (srvproc: SRV_PROC): Integer; cdecl; funksjon srv_rpcdb (srvproc: SRV_PROC; len: PInteger): PChar; cdecl; funksjon srv_rpcname (srvproc: SRV_PROC; len: PInteger): PChar; cdecl; funksjon srv_rpcnumber (srvproc: SRV_PROC): Integer; cdecl; funksjons srv_rpcoptions (srvproc: SRV_PROC): Word; cdecl; funksjon srv_rpcowner (srvproc: SRV_PROC; len: PInteger): PChar; cdecl; funksjon srv_run (server: SRV_SERVER): Integer; cdecl; funksjon srv_sendmsg (srvproc: SRV_PROC; mldType: Integer; msgnum: DBINT; msgClass, tilstand: DBTINYINT; rpcname: PChar; rpcnamelen: Integer; linenum: Word, msg: PChar; msglen: Integer): Integer; cdecl; funksjon srv_ansi_sendmsg (srvproc: SRV_PROC; mldType: Integer; msgnum: DBINT; msgClass, tilstand: DBTINYINT; rpcname: PChar; rpcnamelen: Integer; linenum: Word, msg: PChar; msglen: Integer): Integer; cdecl; funksjon srv_sendstatus (srvproc: SRV_PROC, status: Longint): Integer; cdecl; funksjon srv_setuserdata (srvproc: SRV_PROC; PTR: Pointer): Integer; cdecl; funksjon srv_sfield (server: SRV_SERVER, felt: Integer; len: PInteger): PChar; cdecl; funksjon srv_symbol (iType, symbol: Integer; len: PInteger): PChar; cdecl; funksjon srv_tdsversion (srvproc: SRV_PROC): Integer; cdecl; funksjon srv_writebuf (srvproc: SRV_PROC; PTR: Pointer, teller: Word): Integer; cdecl; funksjon srv_willconvert (srctype, desttype: Integer): Bool; cdecl; prosedyre srv_ackattention (srvproc: SRV_PROC); cdecl; funksjon srv_terminatethread (srvproc: SRV_PROC): Integer; cdecl; funksjons srv_sendstatistics (srvproc: SRV_PROC): Integer; cdecl; funksjons srv_clearstatistics (srvproc: SRV_PROC): Integer; cdecl; funksjon srv_setevent (server: SRV_SERVER, event: Integer): Integer; cdecl; funksjon srv_message_handler (srvproc: SRV_PROC; Errornum: Integer; alvorlighetsgrad, tilstand: Byte; oserrnum: Integer; errtext: PChar; errtextlen: Integer; oserrtext: PChar; oserrtextlen: Integer): Integer; cdecl; funksjon srv_pre_handle (server: SRV_SERVER, srvproc: SRV_PROC; event: Longint, handler: Event, fjern: Bool): Integer; cdecl; funksjon srv_post_handle (server: SRV_SERVER, srvproc: SRV_PROC; event: Longint, handler: Event, fjern: Bool): Integer; cdecl; funksjon srv_post_completion_queue (srvproc: SRV_PROC; inbuf: PChar; inbuflen: PChar): Integer; cdecl; funksjon srv_IgnoreAnsiToOem (srvproc: SRV_PROC; BTF: BOOL): Integer; cdecl; //# ifdef __cplusplus //} //# endif //# pragma pakke () const SS_MAJOR_VERSION = 7; SS_MINOR_VERSION = 00; SS_LEVEL_VERSION = 0000; SS_MINIMUM_VERSION = '7.00.00.0000'; ODS_VERSION = ((SS_MAJOR_VERSION SHL 24) eller (SS_MINOR_VERSION SHL 16)); //# endif //_ ODS_SRV_H _ ////////////////////////////////////////////////////////////////////Forslag til gjennomføring av __GetXpVersion ////__ declspec (dllexport) ULONG __GetXpVersion () //{//returnerer ODS_VERSION; //} //////////////////////////////////////////////////////////////////implementationconst sLibName = 'Opends60.DLL'; funksjon srv_describe; ekstern sLibName navnet 'srv_describe'; funksjon srv_setutype; ekstern sLibName navnet 'srv_setutype'; funksjon srv_setcoldata; ekstern sLibName navnet 'srv_setcoldata'; funksjon srv_setcollen; ekstern sLibName navnet 'srv_setcollen'; funksjon srv_sendrow; ekstern sLibName navnet 'srv_sendrow'; funksjon srv_senddone; ekstern sLibName navnet 'srv_senddone'; //Dealing med utvidet Prosedyre parametersfunction srv_rpcparams; ekstern sLibName navnet 'srv_rpcparams'; funksjon srv_paraminfo; ekstern sLibName navnet 'srv_paraminfo'; funksjon srv_paramsetoutput; ekstern sLibName navnet 'srv_paramsetoutput'; funksjon srv_paramdata; ekstern sLibName navnet 'srv_paramdata'; funksjon srv_paramlen; ekstern sLibName navnet 'srv_paramlen'; funksjon srv_parammaxlen; ekstern sLibName navnet 'srv_parammaxlen'; funksjon srv_paramtype; ekstern sLibName navnet 'srv_paramtype'; funksjon srv_paramset; ekstern sLibName navnet 'srv_paramset'; funksjon srv_paramname; ekstern sLibName navnet 'srv_paramname'; funksjon srv_paramnumber; ekstern sLibName navnet 'srv_paramnumber'; //----------------------------------------- --------------------- //Resten av disse API-er er fortsatt støttes, i SQL Server 7.0, //men støttes kanskje ikke etter at SQL Server 7.0function srv_getconfig; ekstern sLibName navnet 'srv_getconfig'; funksjon srv_getserver; ekstern sLibName navnet 'srv_getserver'; funksjon srv_got_attention; ekstern sLibName navnet 'srv_got_attention'; funksjon srv_eventdata; ekstern sLibName navnet 'srv_eventdata'; //Memoryfunction srv_alloc; ekstern sLibName navnet 'srv_alloc'; funksjon srv_bmove; ekstern sLibName navnet 'srv_bmove'; funksjon srv_bzero; ekstern sLibName navnet 'srv_bzero'; funksjon srv_free; ekstern sLibName navnet 'srv_free'; funksjon srv_config_fn; ekstern sLibName navnet 'srv_config'; funksjon srv_config_alloc; ekstern sLibName navnet 'srv_config_alloc'; funksjon srv_convert; ekstern sLibName navnet 'srv_convert'; funksjon srv_event_fn; ekstern sLibName navnet 'srv_event'; funksjon srv_getuserdata; ekstern sLibName navnet 'srv_getuserdata'; funksjon srv_getbindtoken; ekstern sLibName navnet 'srv_getbindtoken'; funksjon srv_getdtcxact; ekstern sLibName navnet 'srv_getdtcxact'; funksjon srv_handle; ekstern sLibName navnet 'srv_handle'; funksjon srv_impersonate_client; ekstern sLibName navnet 'srv_impersonate_client'; funksjon srv_init; ekstern sLibName navnet 'srv_init'; funksjon srv_iodead; ekstern sLibName navnet 'srv_iodead'; funksjon srv_langcpy; ekstern sLibName navnet 'srv_langcpy'; funksjon srv_langlen; ekstern sLibName navnet 'srv_langlen'; funksjon srv_langptr; ekstern sLibName navnet 'srv_langptr'; funksjon srv_log; ekstern sLibName navnet 'srv_log'; funksjon srv_paramstatus; ekstern sLibName navnet 'srv_paramstatus'; funksjon srv_pfield; ekstern sLibName navnet 'srv_pfield'; funksjon srv_returnval; ekstern sLibName navnet 'srv_returnval'; funksjon srv_revert_to_self; ekstern sLibName navnet 'srv_revert_to_self'; funksjon srv_rpcdb; ekstern sLibName navnet 'srv_rpcdb'; funksjon srv_rpcname; ekstern sLibName navnet 'srv_rpcname'; funksjon srv_rpcnumber; ekstern sLibName navnet 'srv_rpcnumber'; funksjons srv_rpcoptions; ekstern sLibName navn 'srv_rpcoptions'; funksjon srv_rpcowner; ekstern sLibName navnet 'srv_rpcowner'; funksjon srv_run; ekstern sLibName navnet 'srv_run'; funksjon srv_sendmsg; ekstern sLibName navnet 'srv_sendmsg'; funksjon srv_ansi_sendmsg; ekstern sLibName navnet 'srv_ansi_sendmsg'; funksjon srv_sendstatus; ekstern sLibName navnet 'srv_sendstatus'; funksjon srv_setuserdata; ekstern sLibName navnet 'srv_setuserdata'; funksjon srv_sfield; ekstern sLibName navnet 'srv_sfield'; funksjon srv_symbol; ekstern sLibName navnet 'srv_symbol'; funksjon srv_tdsversion; ekstern sLibName navnet 'srv_tdsversion'; funksjon srv_writebuf; ekstern sLibName navnet 'srv_writebuf'; funksjon srv_willconvert; ekstern sLibName navnet 'srv_willconvert'; prosedyre srv_ackattention; ekstern sLibName navnet 'srv_ackattention'; funksjon srv_terminatethread; ekstern sLibName navnet 'srv_terminatethread'; funksjons srv_sendstatistics; ekstern sLibName navn 'srv_sendstatistics'; funksjons srv_clearstatistics; ekstern sLibName navn 'srv_clearstatistics'; funksjon srv_setevent; ekstern sLibName navnet 'srv_setevent'; funksjon srv_message_handler; ekstern sLibName navnet 'srv_message_handler'; funksjon srv_pre_handle; ekstern sLibName navnet 'srv_pre_handle'; funksjon srv_post_handle; ekstern sLibName navnet 'srv_post_handle'; funksjon srv_post_completion_queue; ekstern sLibName navnet 'srv_post_completion_queue'; funksjon srv_IgnoreAnsiToOem; ekstern sLibName navnet 'srv_IgnoreAnsiToOem.'; utgangen Anmeldelser