CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

反射问题,在线等

楼主yaojinl(梦帆的风)2005-07-03 11:42:14 在 .NET技术 / C# 提问

我想问一下,反射一般是用来获取一个程序集或者类中的成员信息的,并且可以用invoke调用它,但是我现在想知道的是:当你知道了一个动态链接库的某个成员后,能否得到它来之哪个类,并且能否通过它得到它所在的动态链接库名。这样我就可以得到所有的信息了。  
  问题点数:50、回复次数:8Top

1 楼renyu732(Sysinfo)回复于 2005-07-03 11:48:32 得分 0

那就用MSIL   汇编程序   (Ilasm.exe)Top

2 楼renyu732(Sysinfo)回复于 2005-07-03 11:48:44 得分 10

MSIL   汇编程序从   MSIL   汇编语言生成可移植可执行的   (PE)   文件。可以运行结果可执行文件(该文件包含   MSIL   和所需的元数据)以确定   MSIL   是否按预期执行。  
  ilasm   [options]   filename   [[options]filename...]  
  参数说明  
  filename.il   源文件的名称。该文件包含元数据声明指令和符号化   MSIL   指令。可以提供多个源文件参数,以便用   Ilasm.exe   生成一个   PE   文件。  
  选项说明  
  /alignment=integer将   FileAlignment   设置为由   NT   Optional   标题中的   integer   指定的值。如果在文件中指定了   .alignment   IL   指令,则此选项将重写它。  
  /base=integer将   ImageBase   设置为由   NT   Optional   标题中的   integer   指定的值。如果在文件指定了   .imagebase   IL   指令,则此选项将重写它。  
  /clock为指定的   .il   源文件测量并报告下列编译时间(以毫秒为单位):    
  总运行时间    
  执行后面的所有特定操作所花费的总时间。    
  启动    
  加载并打开文件。    
  分析    
  发出   MD    
  发出元数据。    
  定义引用解析    
  解析对文件中的定义的引用。    
  修正和链接    
  CEE   文件生成    
  在内存中生成文件映像。    
  PE   文件写入    
  将映像写入   PE   文件。    
  /debug包括调试信息(局部变量名和参数名以及行号)。  
  /dll生成   .dll   文件作为输出。  
  /exe生成可执行文件作为输出。这是默认值。  
  /flags=integer将   ImageFlags   设置为由公共语言运行库标题中的   integer   指定的值。如果在文件中指定了   .corflags   IL   指令,则此选项将重写它。有关   integer   的有效值的列表,请参见   CorHdr.h   中的   COMIMAGE_FLAGS。  
  /key:keyFile使用   keyFile   中包含的私钥编译具有强签名的   filename。  
  /key:@keySource使用在   keySource   中生成的私钥编译具有强签名的   filename。  
  /listing在标准输出上生成列表文件。如果省略此选项,则不生成列表文件。  
  /nologo取消显示   Microsoft   启动标题。  
  /output:file.ext指定输出文件名和扩展名。默认情况下,输出文件名与第一个源文件名相同。默认扩展名为   .exe。如果指定   /dll   选项,则默认扩展名为   .dll。    
  注意       指定   /output:myfile.dll   并不会设置   /dll   选项。如果不指定   /dll,则会生成名为   myfile.dll   的可执行文件。  
  /quiet指定安静模式;不报告程序集进度。  
  /resource:file.res在生成的   .exe   或   .dll   文件中包括   *.res   格式的指定资源文件。使用   /resource   选项只能指定一个   .res   文件。  
  /subsystem=integer将   subsystem   设置为由   NT   Optional   标题中的   integer   指定的值。如果在文件中指定了   .subsystem   IL   指令,则此命令将重写它。有关   integer   的有效值的列表,请参见   winnt.h   中的   IMAGE_SUBSYSTEM。  
  /?显示此工具的命令语法和选项。  
   
  注意       Ilasm.exe   的所有选项都不区分大小写,并且根据前三个字母识别。例如,/lis   等效于   /listing   而   /res:myresfile.res   等效于   /resource:myresfile.res。指定参数的选项接受用冒号   (:)   或等号   (=)   作为选项和参数之间的分隔符。例如,/output:file.ext   等效于   /output=file.ext。  
  备注  
  MSIL   汇编程序有助于工具供应商设计和实现   MSIL   生成器。通过使用   Ilasm.exe,工具和编译器开发人员可以专注于生成   MSIL   和元数据,而无需考虑以   PE   文件格式发出   MSIL。  
  与面向运行库的其他编译器(如   C#   和   Visual   Basic   .NET)类似,Ilasm.exe   不产生中间对象文件,并且不需要链接阶段即可形成   PE   文件。  
  MSIL   汇编程序可以表达以运行库为目标的编程语言的所有现有元数据和   MSIL   功能。这使得用上面任何编程语言编写的托管代码都可以在   MSIL   汇编程序中充分表达并且可以用   Ilasm.exe   编译。  
  可以将   Ilasm.exe   同它的伙伴工具   Ildasm.exe   一起使用。Ildasm.exe   采用包含   MSIL   代码的   PE   文件并创建相应的文本文件作为   Ilasm.exe   的输入。这很有用,例如当编译用并非支持所有运行库元数据属性的编程语言编写的代码时。通过   Ildasm.exe   编译该代码并运行输出后,可以手动编辑结果   MSIL   文本文件以添加缺少的属性。然后可以通过   Ilasm.exe   运行此文本文件以生成最终的可执行文件。  
  也可以使用此方法从最初由不同的编译器生成的数个   PE   文件生成一个   PE   文件。  
  注意       目前,无法对包含嵌入的本机代码的   PE   文件(例如,由   Visual   C++   .NET   生成的   PE   文件)使用此技术。  
  为使   Ildasm.exe   和   Ilasm.exe   的这种组合使用尽可能准确,此汇编程序不执行某些简单的优化,即不推断是使用短格式指令还是使用长格式指令。例如,此工具不会尝试确定它是否可以用短编码替换长编码,这些长编码可能是在   MSIL   源中编写的,也可能是由其他编译器发出的。如果需要短编码,则必须显式编写该格式。但是,此汇编程序在可能的情况下,还是会检查是否有超出范围的条件。  
  注意       Ildasm.exe   只对磁盘上的文件进行操作。它不对安装在全局程序集缓存中的文件进行操作。  
  示例  
  下面的命令对   MSIL   文件   myTestFile.il   进行汇编并产生可执行文件   myTestFile.exe。  
  ilasm   myTestFile  
  下面的命令对   MSIL   文件   myTestFile.il   进行汇编并产生   .dll   文件   myTestFile.dll。  
  ilasm   myTestFile   /dll    
  下面的命令对   MSIL   文件   myTestFile.il   进行汇编并产生   .dll   文件   myNewTestFile.dll。  
  ilasm   myTestFile   /dll   /output:myNewTestFile.dll  
  Top

3 楼Sunmast(速马@Redmond, WA)回复于 2005-07-03 11:49:48 得分 40

>>>   能否得到它来之哪个类  
  MemberInfo.DeclaringType  
   
  >>>   并且能否通过它得到它所在的动态链接库名  
  Type.Assembly.FullNameTop

4 楼mixiaobo(星星只我心)回复于 2005-07-03 11:51:26 得分 0

对反射的应用是从程序集--->到模块----->类型---->方法\属性等,层层往下发现的,当你都知道了这个库的成员,当然之前应该已经知道了库名的Top

5 楼JzeroBiao(先知)回复于 2005-07-03 12:16:29 得分 0

学习...Top

6 楼yaojinl(梦帆的风)回复于 2005-07-03 12:21:54 得分 0

我不想用Ilasm.exe,因为我要在程序中简单的实现。  
  >>>   能否得到它来之哪个类  
  MemberInfo.DeclaringType  
   
  >>>   并且能否通过它得到它所在的动态链接库名  
  Type.Assembly.FullName  
  我试试这个行不行。Top

7 楼yaojinl(梦帆的风)回复于 2005-07-03 13:57:12 得分 0

好像不行啊,你能仔细点讲讲吗  
  Top

8 楼yaojinl(梦帆的风)回复于 2005-07-03 16:40:42 得分 0

我已经知道了。谢谢。  
  Top

相关问题

  • 为什么消息没有办法反射呀!在线等待
  • 怎么用反射调用一个重载过的方法。。。。。在线等。。。。
  • 关于反射动态中数据类型的问题,在线等...
  • 如何利用反射获取一个带OUT参数的函数?<在线等,解决立即结贴>
  • 反射
  • [C#2005反射] 如何在C#2005中调用反射来动态实例化类型
  • C#2005反射] 如何在C#2005中调用反射来动态实例化类型
  • 请高手帮帮忙!如和用反射调用类的一个方法的同时建立线程,让这个方法在新线程里运行?
  • 反射到底有什么用,大家都在什么情况下用到反射?
  • 反射是做什么用的,在什么情况下用

关键词

  • .net
  • 文件
  • 选项
  • 指令
  • 编译器
  • 执行
  • 编译
  • 编码
  • 汇编
  • 代码

得分解答快速导航

  • 帖主:yaojinl
  • renyu732
  • Sunmast

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo