专注于GIS,服务于平民.

数据处理/应用系统/数据挖掘/知识管理

使用接口在EXE之间通信

//定义接口

 

using System;
using System.Collections.Generic;
using System.Text;

namespace GisOaCall
{
    public enum GisErrorCode
    {
        E_SUCCESS = 0,
        E_NOT_IMP,
        E_UNKNOWN = 9999
    };
    public interface IGisForOa
    {
        GisErrorCode PositionByCaseId(string strCaseId);
    }
}

 

 

using System;
using System.Collections.Generic;
using System.Text;
using GisOaCall;

namespace OaGisCall
{
    /********************************************************
     * 错误码表:由开发人员在实际编码过程中补全设计
     *
     * ******************************************************/
    public enum ErrorCode
    {
        E_SUCCESS=0,
        E_NOT_IMP,
        E_UNKNOWN=9999
    };

    /*********************************************************
     * 定义OA提供给GIS的接口
     * *******************************************************/
    public interface IOaForGis
    {
        ErrorCode FindCaseItemByCaseId(string CaseId);
        void SetCallerInstance(IGisForOa gfo);

        void NotifyGisInstanceQuit();//GIS系统退出时给OA系统通知
    }
}

 

 

//实现一方的接口

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OaGisCall;
using System.Reflection;
using System.Configuration;
using TestInvokeOaGisCall.Properties;
using GisOaCall;

namespace TestInvokeOaGisCall
{
    public partial class Form1 : Form,IGisForOa
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IOaForGis iofg;
            iofg = InterfaceFactory.GetInterfaceInstance();
            iofg.FindCaseItemByCaseId("你好,我是秋香!!");
            IGisForOa gfo = this;
            iofg.SetCallerInstance(gfo);
        }

        public GisErrorCode PositionByCaseId(string strCaseId)
        {
            label1.Text = "被调用回来了,地块案件受理编号:" + strCaseId;
            return GisErrorCode.E_SUCCESS;
        }
    }
}

 

//实现另一个接口

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OaGisCall;
using GisOaCall;

namespace TestOaGisCall
{
    public partial class TestOaGisCall : Form,IOaForGis
    {
        private IGisForOa gfo = null;
        public TestOaGisCall()
        {
            InitializeComponent();
        }

        public ErrorCode FindCaseItemByCaseId(string CaseId)
        {
            //MessageBox.Show(CaseId.ToString(),"我是被调用的");
            //if(this.WindowState===WindowState.)
            this.Show();
            label1.Text = "我是被调用的,你传过来的参数是:" + CaseId;

            return ErrorCode.E_SUCCESS;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (null == gfo)
            {
                MessageBox.Show("坏蛋,人家还没有把接口伸过来,调什么调?");
            }
            else gfo.PositionByCaseId("abc123");
        }

        public void SetCallerInstance(IGisForOa gfo)
        {
            this.gfo = gfo;
        }
    }
}

 

//得到接口的工厂类

using System;
using System.Collections.Generic;
using System.Text;
using TestInvokeOaGisCall.Properties;
using OaGisCall;
using System.Reflection;

namespace TestInvokeOaGisCall
{
    class InterfaceFactory
    {
        static IOaForGis iofg = null;
        private static readonly string DAL_NAME = Settings.Default.DllFileName;
        private static readonly string CLS_NAME = Settings.Default.ClassName;

        public static IOaForGis GetInterfaceInstance()
        {
            if (null == iofg)
            {

               //使用反射,把动态链接库装载进内存,并得到这个接口。
                iofg = (IOaForGis)Assembly.Load(DAL_NAME).CreateInstance(CLS_NAME);
            }
            return iofg;
        }
       
    }
}

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="TestInvokeOaGisCall.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <TestInvokeOaGisCall.Properties.Settings>
            <setting name="DllFileName" serializeAs="String">
                <value>TestOaGisCall2</value>
            </setting>
            <setting name="ClassName" serializeAs="String">
                <value>TestOaGisCall2.TestOaCallGis</value>
            </setting>
        </TestInvokeOaGisCall.Properties.Settings>
    </userSettings>
</configuration>

 

 

posted on 2008-09-17 14:07  老低调  阅读(914)  评论(0)    收藏  举报

导航