在动态引用DLL-A中,当参数是个实体,而实体的属性在另一个DLL-B中。。我们需要得到A这个实体并将其赋值,并将赋值的实体传人DLL-A的方法中。

  string strPath = HttpContext.Current.Server.MapPath("/开放式DLL");
                DirectoryInfo df = new DirectoryInfo(strPath);
                System.IO.FileInfo[] fr = df.GetFiles();
                    foreach (System.IO.FileInfo f in fr)
                {
                    if (f.Name.EndsWith("CNKI_Mngr.dll"))
                    {
                        System.Reflection.Assembly Mngrass = System.Reflection.Assembly.LoadFrom(f.FullName);//加载程序集

                        Type cnkiStructtp = Mngrass.GetType("CNKI_Mngr.UserStruct");//获取程序集中的实体对象
                        Type cnkiBasetp = Mngrass.GetType("CNKI_Mngr.UserBaseInfo");
                        Type cnkiComtp = Mngrass.GetType("CNKI_Mngr.UserComInfo");
                        object obj1 = System.Activator.CreateInstance(cnkiStructtp);//创建实例
                        object obj2 = System.Activator.CreateInstance(cnkiBasetp);
                        object obj3 = System.Activator.CreateInstance(cnkiComtp);
                        FieldInfo[] BaseInfo = cnkiBasetp.GetFields();//获取创建的实例的所有属性
                        FieldInfo[] ComInfo = cnkiComtp.GetFields();
                        FieldInfo[] StructInfo = cnkiStructtp.GetFields();

                        BaseInfo[1].SetValue(obj2, enty.UserName);//对指定的属性就行赋值
                        BaseInfo[11].SetValue(obj2, enty.RealName);
                        BaseInfo[5].SetValue(obj2, enty.PassWord);
                        BaseInfo[13].SetValue(obj2, enty.Department);

                        ComInfo[2].SetValue(obj3, enty.EMail);
                        ComInfo[9].SetValue(obj3, enty.Phone);

                        StructInfo[0].SetValue(obj1, obj2);
                        StructInfo[1].SetValue(obj1, obj3);

                        foreach (System.IO.FileInfo item in fr)
                        {
                            if (item.Name.EndsWith("Grid30Register.dll"))
                            {
                                System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom(item.FullName);
                                Type tp = ass.GetType("Grid30Register.CreateOperateClass");
                                MethodInfo meth = tp.GetMethod("PersonLibRegister");
                                object obj = System.Activator.CreateInstance(tp, new object[] { GridConfig.UserServerIP, GridConfig.UserServerIP, GridConfig.UserServerIP,
                                KbaseConfig.ServerIP, KbaseConfig.ServerUserName, KbaseConfig.ServerPsw, "", GridConfig.Language });
                                ReStr = meth.Invoke(obj, new object[] { us }).ToString();
                            }
                        }

                    }
时间: 2024-10-31 07:41:37

在动态引用DLL-A中,当参数是个实体,而实体的属性在另一个DLL-B中。。我们需要得到A这个实体并将其赋值,并将赋值的实体传人DLL-A的方法中。的相关文章

编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish 和Dog,定义主类E,在其main方法中分别创建其对象并测试对象的特性。

package animal; public class Animal { //成员属性 private String kind; public String getKind() { return kind; } public void setKind(String kind) { this.kind = kind; } //成员方法 public void eat() { } public void sleep() { } } package animal; public class Fish

.NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也不禁地对编译器内部到底为我们做了哪些事儿而感到好奇?于是,我们就借助反编译神器,去看看编译器到底做了啥事!其实本篇中很多都不算新语法,对于很多人来说可能都是接触了很久了,这里主要是针对.NET的老版本来说,是一个“相对”的新语法. /* 新语法索引 */ 1.自动属性 Auto-Implemente

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

C语言中可变参数的函数(三个点,“...”)

C语言中可变参数的函数(三个点,"...") 本文主要介绍va_start和va_end的使用及原理. 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解. 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表 void foo(...); void foo(parm_list,...); 这种方式和我们以前认识的不大

jQuery 获取url中的参数

//获取url中的参数 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象 var r = window.location.search.substr(1).match(reg); //匹配目标参数 if (r != null) return unescape(r[2]); retur

在MessageBox的Show方法中如何无限使用参数值?

今天发现在show方法中不能使用花括号的方式使用多个可变参数,经过查询得出结果.在show方法中是不存在花括号的方式使用参数的.在Console.WriteLine中是存在的,如下: 那么在show方法中真的不存在像Console中的参数吗?不是的,在string类中有一个方法叫Format,这个方法是将字符串中的格式项替换为两个指定对象的字符串表示形式. 代码如下: 小记一下,以免以后忘记.

C#,动态加载DLL,通过反射,调用参数,方法,窗体

.net中常会用到动态加载DLL,而DLL中可能包含各种参数.方法.窗体,如何来调用动态加载这些参数.方法.窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间 (1)   AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器 (2)   Assembly:程序集类 (3)   Module:模块类 (4)   Type:使用反射得到类型信息的最核心的类 他们之间是一种从属关系,也就是说,一个AppDomain可以

WPF中静态引用资源与动态引用资源的区别

WPF中静态引用资源与动态引用资源的区别 WPF中引用资源分为静态引用与动态引用,两者的区别在哪里呢?我们通过一个小的例子来理解. 点击“Update”按钮,第2个按钮的文字会变成“更上一层楼”,而第1个按钮的文字没有变化. 原因是第1个按钮文字用的是静态引用资源,而第2个按钮文字用的是动态引用资源. 前台代码: <Window x:Class="PersonalLearning.StaticDynamicResourceDemo"        xmlns="http

JNA调用Delphi7的DLL传递接收中文参数的方法

项目要写个DLL调用硬件,因为人力资源的原因只能用Delphi7开发,结果发现传递中文有点问题,研究了一番后解决,其实很简单,关键是使用system.pas下的编码解码方法.以下在本机测试通过. 环境: Win7 64位旗舰版 JDK1.6 x86 MyEclipse8.6 Delphi7 Delphi代码: library Project2; uses SysUtils, Dialogs; {$R *.res} function testDLL(sInput: PChar):PChar; st

python中函数参数的引用方式

值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过"传引用"来传递对象.如果函数收到的是一个不可变对象(比如数字.字符或者元组)的引用,就不能直接修改原始对象--相当于通过"传值