Blame view

Vrh.iScheduler/SqlServerTypes/Loader.cs 1.66 KB
025ff22a   Schwirg László   Vrh.Web.Reportin ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  using System;
  using System.IO;
  using System.Runtime.InteropServices;
  
  namespace SqlServerTypes
  {
      /// <summary>
      /// Utility methods related to CLR Types for SQL Server 
      /// </summary>
      internal class Utilities
      {
          [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
          private static extern IntPtr LoadLibrary(string libname);
  
          /// <summary>
          /// Loads the required native assemblies for the current architecture (x86 or x64)
          /// </summary>
          /// <param name="rootApplicationPath">
          /// Root path of the current application. Use Server.MapPath(".") for ASP.NET applications
          /// and AppDomain.CurrentDomain.BaseDirectory for desktop applications.
          /// </param>
          public static void LoadNativeAssemblies(string rootApplicationPath)
          {
              var nativeBinaryPath = IntPtr.Size > 4
                  ? Path.Combine(rootApplicationPath, @"SqlServerTypes\x64\")
                  : Path.Combine(rootApplicationPath, @"SqlServerTypes\x86\");
  
              LoadNativeAssembly(nativeBinaryPath, "msvcr100.dll");
              LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial110.dll");
          }
  
          private static void LoadNativeAssembly(string nativeBinaryPath, string assemblyName)
          {
              var path = Path.Combine(nativeBinaryPath, assemblyName);
              var ptr = LoadLibrary(path);
              if (ptr == IntPtr.Zero)
              {
                  throw new Exception(string.Format(
                      "Error loading {0} (ErrorCode: {1})",
                      assemblyName,
                      Marshal.GetLastWin32Error()));
              }
          }
      }
  }