none
c#读取托管的DLL文件内容 RRS feed

  • 问题

  • 我首先用c#制作了一个DLL,其中全部都是公有的文本常量,定义如下例子:
    public const string STRING_NAME = "Bill Gates";

    现在我想在一个c#的winform里随时读取这个DLL中相应常量里的文本内容(不是引用工程,而是直接读取DLL),请问应该如何做?

    谢谢!

    2010年4月21日 7:48

答案

  • 其实与使用引用工程没有什么区别,你只要直接添加对这个 dll 的引用,然后就可以使用了,一样可以用 using 导入命名空间呀

    工程还是要编译成一个 dll 然后再被引用的呀,只是 VS 中可以通过解决方案来引用项目间接引用其生成的 dll


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月21日 8:01

全部回复

  • 你好,可参考:

    http://www.cnblogs.com/my-blog/archive/2008/11/14/1333454.html

    希望对你有帮助。

    2010年4月21日 7:54
  • 请问DllImport也可以引用托管的Dll吗?

    个人感觉这个例子与我的疑问不太相同

    望指点,谢谢

    2010年4月21日 8:00
  • 其实与使用引用工程没有什么区别,你只要直接添加对这个 dll 的引用,然后就可以使用了,一样可以用 using 导入命名空间呀

    工程还是要编译成一个 dll 然后再被引用的呀,只是 VS 中可以通过解决方案来引用项目间接引用其生成的 dll


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月21日 8:01
  • 如果不添加任何引用,指定一个磁盘上的Dll路径,之后读取可以吗?
    2010年4月21日 8:04
  • 你的 dll 其实就是类库,就是程序集,添加引用就可以了,

    不知道你为什么非要“指定一个磁盘上的Dll路径,之后读取可以吗?”,你最好说说你的实际需求

    你可以通过反射动态加载程序集 Assembly.LoadFrom 方法 http://msdn.microsoft.com/zh-cn/library/1009fa28(VS.95).aspx

    然后继续通过反射访问该程序集内的类、方法等等 ....

    注意,反射会带来性能的降低,这种方式来获取程序集的静态成员似乎得不偿失


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月21日 8:25
  • 如果不添加任何引用,指定一个磁盘上的Dll路径,之后读取可以吗?


    这种方法我试了不行,不知道你怎样?msdn提供example我没看明白中间编译成dll之后是怎样被使用的。

    http://msdn.microsoft.com/zh-cn/library/3707x96z(VS.80).aspx

    2010年4月21日 8:26
  • DllImport 用于访问非托管 dll,你的托管 dll 最佳做法是直接引用,特别是你仅仅是一个包含静态数据的 dll,不知道你具体什么特殊需求
    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月21日 8:28
  • 我现在只是想知道这种指定路径的方式能否实现

    现在我大概明白你的意思了,直接引用或者反射,很感谢你的帮助!

    2010年4月21日 8:34
  • Assembly.LoadFrom穿个文件名进去之后,你就可以通过assembly.GetTypes()来获得里面的所有类了,然后你就自己写代码搜索道你要的那个字符串常量。

    2010年4月21日 16:52
  • 你好!

         如果你dll不是.NET程序集也不是COM组件,是无法直接添加引用的!

         需要使用[DllImport]特性来是标记dll,然后再声明里面的extern 方法!


    周雪峰
    2010年4月24日 2:24
    版主