使用接口在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>
浙公网安备 33010602011771号