1.懒加载:
object obj = null;
System.Type oType = System.Type.GetTypeFromProgID("U8Login.clsLogin"); //动态加载U8Login.dll下的clsLogin类
obj = System.Activator.CreateInstance(oType); //实例化
动态引用的好处是不分版本,可以在任意支持CO调用的U8版本下使用。直接引用则要区分版本,例如直接引用12.5的Login程序是不能在13.0的u8上直接运行,需要重新引用之后再进行编译
u8的dll即使是同名,也有很多版本,在C#里调用vb类库程序会自动生成一个interop版本的dll供C#调用,这里就会衍生出很多比较麻烦的问题,最头疼的就是依赖项。举个简单的例子,我们开发中需要使用到A类库,但是A类库又调用了B类库和C类库的方法,所以我们调用的时候B和C也要添加到运行环境中去,如果B和C又各自有依赖项的话,那么就需要一层层的把所有依赖项找出来。所以在C#直接调用会因为依赖项出现很多问题。
目前的解决方法有两种,一种是反射,另一种就是使用vb再封装一层代码之后用C#调用。本文主要讲第一种方式。
2.InvokeMember
System.Type oType = System.Type.GetTypeFromProgID("U8Login.clsLogin"); //获取clsLogin的实例化
String conStr = oType.InvokeMember("UfDbName", System.Reflection.BindingFlags.GetProperty, null, u8login, null).ToString(); //通过反射获取登录之后login对象中的UfDbName,即是数据库连接串,用于获取数据库单据表结构生成xml格式。因为CO的方法参数都是DOMDocument类型,所以我们还需要多做一步,首先建造实体Model接收接口传入的json数据,在将实体的数据传入Document中,作为CO方法的参数,通过调用类库中的方法达到操作单据的目的(增删改查,审核/弃审)
CO中已经包含了的单据的基本校验,例如部门在系统中不存在、数量控制等。额外的控制可以通过 login对象获取数据库连接至对应的账套进行操作
手机扫一扫
移动阅读更方便
你可能感兴趣的文章