⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devart.sdac.oledbintf.pas

📁 devent UniDAC 2.003 include sources
💻 PAS
📖 第 1 页 / 共 4 页
字号:

  [ComImport, GuidAttribute('0c733a67-2a1c-11ce-ade5-00aa0044773d'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  IErrorRecords = interface
    [PreserveSig]
    function (* [local] *) AddErrorRecord(
            (* [in] *) const pErrorInfo: ERRORINFO;
            (* [in] *) dwLookupID: DWORD;
            (* [in] *) const pdispparams: DISPPARAMS;
            [In, MarshalAs(UnmanagedType.IUnknown)]
            (* [in] *) const punkCustomError: IUnknown;
            (* [in] *) dwDynamicErrorID: DWORD): HResult;

    [PreserveSig]
    function (* [local] *) GetBasicErrorInfo(
            (* [in] *) ulRecordNum: ULONG;
            (* [out] *) out pErrorInfo: ERRORINFO): HResult;

    [PreserveSig]
    function (* [local] *) GetCustomErrorObject(
            (* [in] *) ulRecordNum: ULONG;
            [In, MarshalAs(UnmanagedType.LPStruct)]
            (* [in] *) const riid: TGUID;
            [Out, MarshalAs(UnmanagedType.IUnknown)]
            (* [iid_is][out] *) out ppObject: IUnknown): HResult;

    [PreserveSig]
    function (* [local] *) GetErrorInfo(
            (* [in] *) ulRecordNum: ULONG;
            (* [in] *) lcid: LCID;
            (* [out] *)
            [Out, MarshalAs(UnmanagedType.IUnknown)]
            out ppErrorInfo: IErrorInfo): HResult;

    [PreserveSig]
    function (* [local] *) GetErrorParameters(
            (* [in] *) ulRecordNum: ULONG;
            (* [out] *) out pdispparams: DISPPARAMS): HResult;

    [PreserveSig]
    function (* [local] *) GetRecordCount(
            (* [out] *) out pcRecords: ULONG): HResult;
  end;
  {$EXTERNALSYM IErrorRecords}

// the structure returned by  ISQLServerErrorInfo::GetSQLServerInfo
  [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Auto)]
  SSERRORINFO = record
    [MarshalAs(UnmanagedType.LPWStr)]
    pwszMessage: PWideChar;
    [MarshalAs(UnmanagedType.LPWStr)]
    pwszServer: PWideChar;
    [MarshalAs(UnmanagedType.LPWStr)]
    pwszProcedure: PWideChar;
    lNative: integer;
    bState: BYTE;
    bClass: BYTE;
    wLineNumber: WORD;
  end;
  PSSERRORINFO = IntPtr;

  [ComImport, GuidAttribute('5CF4CA12-EF21-11d0-97E7-00C04FC2AD98'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  ISQLServerErrorInfo = interface
    [PreserveSig]
    function GetErrorInfo(
            (* [out] *) out ppErrorInfo: PSSERRORINFO;
            (* [out] *) out ppStringsBuffer: IntPtr{PWideChar}): HResult;
  end;

  /// WARINING - in 64bit OSes DBBKMARK is int64
  DBBKMARK = integer;

  [ComImport, GuidAttribute('0c733a30-2a1c-11ce-ade5-00aa0044773d'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  ISequentialStream = interface
    [PreserveSig]
    function Read(
      pv: IntPtr;
      cb: Longint;
      pcbRead: PLongint): HResult;
    [PreserveSig]
    function Write(
      pv: IntPtr;
      cb: Longint;
      pcbWritten: PLongint): HResult;
  end;

function GetErrorInfo(dwReserved: Longint; out errinfo: IErrorInfo): HResult;
function CoGetMalloc(dwMemContext: Longint; out malloc: IMalloc): HResult;

// Multi Language support
type
  [ComImport, GuidAttribute('275c23e3-3747-11d0-9fea-00aa003f8646'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  IEnumCodePage = interface
    [PreserveSig]
    function Clone(
      [Out, MarshalAs(UnmanagedType.IUnknown)]
      out ppEnum: IEnumCodePage): HResult;
    [PreserveSig]
    function Next(
      celt: ULONG;
      [Out, MarshalAs(UnmanagedType.LPStruct)]
      var rgelt: MIMECPINFO;
      var pceltFetched: ULONG): HResult;
    [PreserveSig]
    function Reset: HResult;
    [PreserveSig]
    function Skip(celt: ULONG): HResult;
  end;

  [ComImport, GuidAttribute('3dc39d1d-c030-11d0-b81b-00c04fc9b31f'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  IEnumRfc1766 = interface
    [PreserveSig]
    function Clone(
      [Out, MarshalAs(UnmanagedType.IUnknown)]
      out ppEnum: IEnumRfc1766): HResult;
    [PreserveSig]
    function Next(
      celt: ULONG;
      [Out, MarshalAs(UnmanagedType.LPStruct)]
      var rgelt: RFC1766INFO;
      var pceltFetched: ULONG): HResult;
    [PreserveSig]
    function Reset: HResult;
    [PreserveSig]
    function Skip(celt: ULONG): HResult;
  end;
  
  [ComImport, GuidAttribute('D66D6F98-CDAA-11D0-B822-00C04FC9B31F'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  IMLangConvertCharset = interface
    [PreserveSig]
    function Initialize(
      uiSrcCodePage: UINT;
      uiDstCodePage: UINT;
      dwProperty: DWORD): HResult;
    [PreserveSig]
    function GetSourceCodePage(
      var puiSrcCodePage: UINT): HResult;
    [PreserveSig]
    function GetDestinationCodePage(
      var puiDstCodePage: UINT): HResult;
    [PreserveSig]
    function GetProperty(
      var pdwProperty: DWORD): HResult;
    [PreserveSig]
    function DoConversion(
      pSrcStr: IntPtr;
      var pcSrcSize: UINT;
      pDstStr: IntPtr;
      var pcDstSize: UINT): HResult;
    [PreserveSig]
    function DoConversionToUnicode(
      pSrcStr: PChar;
      var pcSrcSize: UINT;
      [MarshalAs(UnmanagedType.LPWStr)]
      pDstStr: PWideChar;
      var pcDstSize: UINT): HResult;
    [PreserveSig]
    function DoConversionFromUnicode(
      [MarshalAs(UnmanagedType.LPWStr)]
      pSrcStr: PWideChar;
      var pcSrcSize: UINT;
      [MarshalAs(UnmanagedType.LPStr)]
      pDstStr: PChar;
      var pcDstSize: UINT): HResult;
  end;

  [ComImport, GuidAttribute('275C23E1-3747-11D0-9FEA-00AA003F8646'), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
  IMultiLanguage = interface
    [PreserveSig]
    function GetNumberOfCodePageInfo(
      var pcCodePage: UINT): HResult;
    [PreserveSig]
    function GetCodePageInfo(
      uiCodePage: UINT;
      [Out, MarshalAs(UnmanagedType.Struct)]
      var pCodePageInfo: MIMECPINFO): HResult;
    [PreserveSig]
    function GetFamilyCodePage(
      uiCodePage: UINT;
      var puiFamilyCodePage: UINT): HResult;
    [PreserveSig]
    function EnumCodePages(
      grfFlags: DWORD;
      [Out, MarshalAs(UnmanagedType.IUnknown)]
      out ppEnumCodePage: IEnumCodePage): HResult;
    [PreserveSig]
    function GetCharsetInfo(
      [MarshalAs(UnmanagedType.LPWStr)]
      Charset: PWideChar;
      [Out, MarshalAs(UnmanagedType.Struct)]
      var pCharsetInfo: MIMECSETINFO): HResult;
    [PreserveSig]
    function IsConvertible(
      dwSrcEncoding: DWORD;
      dwDstEncoding: DWORD): HResult;
    [PreserveSig]
    function ConvertString(
      var pdwMode: DWORD;
      dwSrcEncoding: DWORD;
      dwDstEncoding: DWORD;
      pSrcStr: IntPtr;
      var pcSrcSize: UINT;
      pDstStr: IntPtr;
      var pcDstSize: UINT): HResult;
    [PreserveSig]
    function ConvertStringToUnicode(
      var pdwMode: DWORD;
      dwEncoding: DWORD;
      pSrcStr: PChar;
      var pcSrcSize: UINT;
      pDstStr: PWideChar;
      var pcDstSize: UINT): HResult;
    [PreserveSig]
    function ConvertStringFromUnicode(
      var pdwMode: DWORD;
      dwEncoding: DWORD;
      [MarshalAs(UnmanagedType.LPWStr)]
      pSrcStr: PWideChar;
      var pcSrcSize: UINT;
      pDstStr: PChar;
      var pcDstSize: UINT): HResult;
    [PreserveSig]
    function ConvertStringReset: HResult;
    [PreserveSig]
    function GetRfc1766FromLcid(
      Locale: LCID;
      [Out, MarshalAs(UnmanagedType.LPWStr)]
      var pbstrRfc1766: WideChar): HResult;
    [PreserveSig]
    function EnumRfc1766(
      [Out, MarshalAs(UnmanagedType.IUnknown)]
      out ppEnumRfc1766: IEnumRfc1766): HResult;
    [PreserveSig]
    function GetRfc1766Info(
      Locale: LCID;
      [Out, MarshalAs(UnmanagedType.Struct)]
      var pRfc1766Info: RFC1766INFO): HResult;
    [PreserveSig]
    function CreateConvertCharset(
      uiSrcCodePage: UINT;
      uiDstCodePage: UINT;
      dwProperty: DWORD;
      [Out, MarshalAs(UnmanagedType.IUnknown)]
      out ppMLangConvertCharset: IMLangConvertCharset): HResult;
  end;
  
implementation

uses
  SysUtils;

(*
procedure SetOleVariant(pValue: POleVariant; const Value: OleVariant);
var
  Temp: TBytes;
begin
  SetLength(Temp, 16);
  Marshal.Copy(pValue, Temp, 0, 16);
  Temp[0] := 1;
  Marshal.GetNativeVariantForObject(TObject(Value), pValue);
  Marshal.Copy(pValue, Temp, 0, 16);
  Temp[0] := 2;
end;
*)

{ PDBProp }

function PDBProp.GetdwPropertyID: DBPROPID;
begin
  Result := DBPROPID(Marshal.ReadInt32(Ptr, 0));
end;

procedure PDBProp.SetdwPropertyID(Value: DBPROPID);
begin
  Marshal.WriteInt32(Ptr, 0, Integer(Value));
end;

function PDBProp.GetdwOptions: DBPROPOPTIONS;
begin
  Result := DBPROPID(Marshal.ReadInt32(Ptr, 4));
end;

procedure PDBProp.SetdwOptions(Value: DBPROPOPTIONS);
begin
  Marshal.WriteInt32(Ptr, 4, Integer(Value));
end;

function PDBProp.GetdwStatus: DBPROPSTATUS;
begin
  Result := DBPROPID(Marshal.ReadInt32(Ptr, 8));
end;

procedure PDBProp.SetdwStatus(Value: DBPROPSTATUS);
begin
  Marshal.WriteInt32(Ptr, 8, Integer(Value));
end;

function PDBProp.Getcolid: _DBID;
var
  Temp: array of byte;
begin
{$IFDEF VER8}
  SetLength(Temp, 0); //To avoid compiler warning. Delphi8 bug.
{$ENDIF}
  Marshal.Copy(IntPtr(Integer(Ptr) + 12), Temp, 0, Length(DB_NULLID));
  Result := Temp;
end;

procedure PDBProp.Setcolid(Value: _DBID);
var
  Temp: array of byte;
begin
  Temp := Value;
  Marshal.Copy(Temp, 0, IntPtr(Integer(Ptr) + 12), Length(DB_NULLID));
end;

function PDBProp.GetvValue: OleVariant;
var
  pValue: POleVariant;
begin
  pValue := IntPtr(Integer(Ptr) + 12 + 24);
  Result := GetOleVariant(pValue);
end;

procedure PDBProp.SetvValue(Value: OleVariant);
var
  pValue: POleVariant;
begin
  pValue := IntPtr(Integer(Ptr) + 12 + 24);
  SetOleVariant(pValue, Value);
end;

class operator PDBProp.Implicit(AValue: IntPtr): PDBProp;
begin
  Result.Ptr := AValue;
end;

class operator PDBProp.Implicit(AValue: PDBProp): IntPtr;
begin
  Result := AValue.Ptr;
end;

{ PDBPropSet }

class operator PDBPropSet.Implicit(AValue: IntPtr): PDBPropSet;
begin
  Result.Ptr := AValue;
end;

class operator PDBPropSet.Implicit(AValue: PDBPropSet): IntPtr;
begin
  Result := AValue.Ptr;
end;

function PDBPropSet.GetrgProperties: PDBPropArray;
begin
  Result := Marshal.ReadIntPtr(Ptr);
end;

procedure PDBPropSet.SetrgProperties(Value: PDBPropArray);
begin
  Marshal.WriteIntPtr(Ptr, Value);
end;

function PDBPropSet.GetcProperties: UINT;
begin
  Result := UINT(Marshal.ReadInt32(Ptr, 4));
end;

procedure PDBPropSet.SetcProperties(Value: UINT);
begin
  Marshal.WriteInt32(Ptr, 4, Integer(Value));
end;

function PDBPropSet.GetguidPropertySet: TGUID;
begin
  Result := TGUID(Marshal.PtrToStructure(IntPtr(Integer(Ptr) + 8), TypeOf(TGUID)));
end;

procedure PDBPropSet.SetguidPropertySet(Value: TGUID);
begin
  Marshal.StructureToPtr(TObject(Value), IntPtr(Integer(Ptr) + 8), False);
end;

const
  ole32    = 'ole32.dll';
  oleaut32 = 'oleaut32.dll';

[DllImport(oleaut32, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'GetErrorInfo')]
function GetErrorInfo(dwReserved: Longint; out errinfo: IErrorInfo): HResult; external;

[DllImport(ole32, CharSet = CharSet.Ansi, SetLastError = True, EntryPoint = 'CoGetMalloc')]
function CoGetMalloc(dwMemContext: Longint; out malloc: IMalloc): HResult; external;

initialization

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -