CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

在C#里怎么显式的加载DLL?

楼主visualhuman(游荡的指针)2006-03-14 14:43:49 在 .NET技术 / C# 提问

如题,就像在VC中LoadLibrary方法一样,C#应该如果做?  
  我要将一个DLL在内存中加载多次,以满足多线程的要求 问题点数:20、回复次数:12Top

1 楼WangGuangJun(雪山飞狐)回复于 2006-03-14 14:57:24 得分 10

Assembly   asm   =   Assembly.LoadFrom("MyDll.dll");  
   
  Type[]   ts   =   asm.GetTypes();  
  foreach   (Type   t   in   ts)  
  {  
  if   (t.IsClass)  
  {  
  if   (t.Name   ==   "myClassName")  
  {  
  object   obj   =   t.InvokeMember(null,  
  BindingFlags.DeclaredOnly   |   BindingFlags.Public   |   BindingFlags.NonPublic   |  
  BindingFlags.Instance   |   BindingFlags.CreateInstance,   null,   null,   null);  
  ((Form)obj).Show();  
  }  
  }  
  }Top

2 楼visualhuman(游荡的指针)回复于 2006-03-14 15:38:25 得分 0

我的DLL是Win32的API,以前是用DllImport加载的,但好像是隐式加载,都加载到了一块内存中,由于DLL涉及TCP/IP的同步通信,多线程调用事会有问题Top

3 楼kingdomgps(工作没激情)回复于 2006-03-14 15:58:22 得分 0

mark,学习,我也只知道用DllImportTop

4 楼kingdomgps(工作没激情)回复于 2006-03-14 16:01:29 得分 0

突然想到二楼的方法行啊。  
  首先自己封装WinAPI,然后再使用二楼提供的办法动态装载自己封装的DLL  
  不知道行不,哈哈Top

5 楼lidong6(立冬)回复于 2006-03-14 16:12:14 得分 0

可以,但是要先用C#封装一层(添加引用时IED会自动完成类型导入)再使用动态加载Top

6 楼visualhuman(游荡的指针)回复于 2006-03-14 17:15:16 得分 0

我试了2楼兄弟的方法,不行啊,在第一句加载时就异常了,而且我觉得Win32的API并不是面向对象的,这种方法好像不行吧Top

7 楼visualhuman(游荡的指针)回复于 2006-03-14 17:16:37 得分 0

是不是大家搞错了?我的Win32   API可不是COM组件Top

8 楼20011521()回复于 2006-03-14 18:22:00 得分 0

[DllImport("GT200.dll",CharSet=CharSet.Ansi)]Top

9 楼visualhuman(游荡的指针)回复于 2006-03-14 18:51:11 得分 0

楼上的兄弟好像没明白我的意思,我是要动态加载  
  我找到一篇文章,但是不知道如何实现  
   
          您无法指定希望   DLLImport   在运行时从何处查找文件,但是可以利用一个技巧来达到这一目的。    
   
    DllImport   调用   LoadLibrary()   来完成它的工作。如果进程中已经加载了特定的   DLL,那么即使指定的加载路径不同,LoadLibrary()   也会成功。    
   
    这意味着如果直接调用   LoadLibrary(),您就可以从任何位置加载   DLL,然后   DllImport   LoadLibrary()   将使用该   DLL。    
   
    由于这种行为,我们可以提前调用   LoadLibrary(),从而将您的调用指向其他   DLL。如果您在编写库,可以通过调用   GetModuleHandle()   来防止出现这种情况,以确保在首次调用   P/Invoke   之前没有加载该库。Top

10 楼zhzuo(秋枫)回复于 2006-03-14 20:33:25 得分 10

Assembly   assm   =   Assembly.LoadFrom("e:\\WindowsApplication.dll");  
  Type   TypeToLoad=   assm.GetType("WindowsApplication.Form1");  
   
  object   obj;  
  obj   =   Activator.CreateInstance(TypeToLoad);  
  Form   formToShow   =   null;  
  formToShow   =   (Form)obj;  
  formToShow.Show();Top

11 楼shuaizhen(object Net)回复于 2006-03-14 21:37:52 得分 0

UPTop

12 楼langmafeng(乞力马扎罗)回复于 2006-03-14 21:48:12 得分 0

用C++再包一次Top

相关问题

  • C# WinForm 如何动态加载Dll
  • 如何显式加载dll?
  • DLL显式加载不等于动态加载??!!
  • C#中,如何动态加载我的dll?
  • 动态加载DLL!!!!!!!!!!!!!!!!!!!
  • 动态加载dll
  • DLL加载错误
  • dll的加载 help
  • 如何加载dll?(隐式加载)
  • System.DllNotFoundException: 无法加载 DLL (oci.dll)。

关键词

  • c#
  • win32
  • dll
  • null
  • 加载
  • 调用
  • loadlibrary
  • dllimport
  • formtoshow
  • bindingflags

得分解答快速导航

  • 帖主:visualhuman
  • WangGuangJun
  • zhzuo

相关链接

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

广告也精彩

反馈

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