zoukankan      html  css  js  c++  java
  • ArcSDE C API在.NET中的调用

     

    在.NET中调用API函数C#:
            
    using System.Runtime.InteropServices;
    [DllImport(
    "sde.dll")]//还有其他的属性可参考MSDN
    public static extern Int32 SE_connection_create(string server, string instance, string database, string username, string pwd, ref SE_ERROR error, out IntPtr pSdeConn);

    VB.NET:
            
    Imports System.Runtime.InteropServices
    <DllImport("sde.dll", SetLastError:=True, ThrowOnUnmappableChar:=True)> _
    Public Shared Function SE_connection_create(ByVal server As StringByVal instance As String,ByVal database As StringByVal username As StringByVal password As StringByRef error1 As SE_ERROR,ByRef connection As IntPtr) As Int32
    End Function

            还可以使用Declar关键字来引用API函数,这里就不介绍了。

    ArcSDE C API的声明方法
            '--------------↓声明SE_ERROR结构体↓-----------------
            
            <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
            Public Structure SE_ERROR
     
                Public sde_error As Int32
                Public ext_error As Int32
                '<MarshalAs(UnmanagedType.ByValArray, SizeConst:=512)> _
                Public err_msg1 As Char()
                '<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4096)> _
                Public err_msg2 As Char()
            End Structure
     
            '--------------↑声明SE_ERROR结构体↑-----------------


            '-------------------调用SE_connection_create函数----------------------
            '------------------连接SDE-------------------------
            '返回结果
            'SE_SUCCESS     0
            'SE_FAILURE     -1
            'SE_NO_ACCESS   -15
            'SE_SDE_NOT_STARTED     -5
            'SE_IOMGR_NOT_AVAILABLE     -101
            'SE_INVALID_DATABASE        -162
            'SE_INVALID_SERVER      -100
            'SE_INVALID_POINTER     -65
            'SE_INVALID_USER        -9
            'SE_LOGIN_NOT_ALLOWED       -8
            'SE_DBMS_DOES_NOT_SUPPORT       -1008
            'SE_NET_FAILURE     -10
            'SE_NET_TIMEOUT     -11
            'SE_SERVICE_NOT_FOUND       -102
            'SE_TASKS_EXCEEDED      -7
     
            <DllImport("sde.dll", SetLastError:=True,ThrowOnUnmappableChar:=True)> _
            Public Shared Function SE_connection_create(ByVal server As String, ByVal instance As String, _
            ByVal database As String, ByVal username As String, ByVal password As String, ByRef error1 As SE_ERROR, _
            ByRef connection As IntPtr) As Int32
            End Function


     '----------------------------调用SE_connection_free函数-------------------------
            '----------------------------释放SDE连接----------------------
            <DllImport("sde.dll", SetLastError:=True, ThrowOnUnmappableChar:=True)> _
            Public Shared Sub SE_connection_free(ByVal Byrefconnection As IntPtr)
            End Sub

     
     

    在程序中的调用
    Imports QHProject.SDE_C_API
    Imports System.Runtime.InteropServices
     
    Partial Class MapServicePage
        Inherits System.Web.UI.Page
     
        Private Shared conn As IntPtr = Nothing
        Private error1 As QHProject.SDE_C_API.SDE_C_API_Operation.SE_ERROR = Nothing
     
      
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
        End Sub
     
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim i As Int32 = SDE_C_API_Operation.SE_connection_create("CL", "5151", "sde", "sde", "clbeyond", error1, conn)
            Button1.Text = i.ToString()
     
        End Sub
     
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
            SDE_C_API_Operation.SE_connection_free(conn)
        End Sub
    End Class


    连接成功后Button的Text属性会显示为0,表示连接成功,在任务管理器中就会发现出现了一个gsrvr.ext进程。断开连接后gsrvr.exe进程就会消失。
    当然前提是要在程序中将连接字段conn声明为shared类型(C#中的Static类型)。
    需要注意的是Instance不是"esri_sde",而是端口号,一般为5151。
                                                                               2008年3月10日15:41:31


  • 相关阅读:
    二叉树
    队列
    python3使用pdfminer3k解析pdf文件
    得到手机版新闻解析
    python连接redis并插入url
    Python使用requirements.txt安装类库
    (1366, "Incorrect string value: '\xF3\xB0\x84\xBC</...' for column 'content' at row 1")
    mysql中Incorrect string value乱码问题解决方案
    mysql命令
    requests ip代理池单ip和多ip设置方式
  • 原文地址:https://www.cnblogs.com/danni5678/p/1098854.html
Copyright © 2011-2022 走看看