`
xqf222
  • 浏览: 128900 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

非常不错的C#动态调用DLL代码

 
阅读更多

一、新建一调用工程项目和一个要测试的类项目,首先设计好测试的类以及函数,然后编译生成对应的类名.DLL文件。然后复制到调用工程项目的BIN目录下。

二、在调用工程项目中新建一WINFORM窗体,工具箱中拉一个按钮到窗体,然后在按钮事件中写调用代码

//调用办法
private void button1_Click(object sender, EventArgs e)
{

//调用办法
DllManager myDllManager = new DllManager();
//输出结果
Console.Write(myDllManager.Invoke("你的DLL文件名.dll","命名空间名称","类名","函数名",null));
// 卸载 DLL
myDllManager.UnLoadDll();
}

三、动态调用DLL的类文件如下:

//添加引用
using System.IO;
using System.Reflection;

public class DllManager
{

private static Assembly MyAssembly;// 记录要导入的程序集

/// <summary>
/// 调用指定DLL中的指定类的指定函数
/// </summary>
/// <param name="lpFileName">DLL文件名或者路径</param>
/// <param name="Namespace">DLL中的命名空间</param>
/// <param name="ClassName">中的命名空间中的类</param>
/// <param name="lpProcName">类中的方法</param>
/// <param name="ObjArray_Parameter">方法参数</param>
/// <returns></returns>
public object Invoke(string lpFileName, string Namespace, string ClassName, string lpProcName, object[] ObjArray_Parameter)
{

try
{// 判断 MyAssembly 是否为空或 MyAssembly 的命名空间不等于要调用方法的命名空间,如果条件为真,就用 Assembly.Load 加载所需 DLL 作为程序集

if (MyAssembly == null || MyAssembly.GetName().Name != Namespace)

MyAssembly = Assembly.Load(LoadDll(lpFileName));

Type[] type = MyAssembly.GetTypes();

foreach (Type t in type)
{

if (t.Namespace == Namespace && t.Name == ClassName)
{

MethodInfo m = t.GetMethod(lpProcName);

if (m != null)
{// 调用并返回

object o = Activator.CreateInstance(t);

return m.Invoke(o, ObjArray_Parameter);

}

else

System.Windows.Forms.MessageBox.Show(" 装载出错 !");

}

}

}

catch (System.NullReferenceException e)
{

System.Windows.Forms.MessageBox.Show(e.Message);

}

return (object)0;

}
/// <summary>
/// 加载DLL文件
/// </summary>
/// <param name="lpFileName">DLL文件名或者路径</param>
/// <returns></returns>
private byte[] LoadDll(string lpFileName)
{

Assembly NowAssembly = Assembly.GetEntryAssembly();

Stream fs = null;

try
{// 尝试读取资源中的 DLL

fs = NowAssembly.GetManifestResourceStream(NowAssembly.GetName().Name + "." + lpFileName);

}

finally
{// 如果资源没有所需的 DLL ,就查看硬盘上有没有,有的话就读取

if (fs == null && !File.Exists(lpFileName)) throw (new Exception(" 找不到文件 :" + lpFileName));

else if (fs == null && File.Exists(lpFileName))
{

FileStream Fs = new FileStream(lpFileName, FileMode.Open);

fs = (Stream)Fs;

}

}

byte[] buffer = new byte[(int)fs.Length];

fs.Read(buffer, 0, buffer.Length);

fs.Close();

return buffer; // 以 byte[] 返回读到的 DLL

}


public void UnLoadDll()
{
// 使 MyAssembly 指空
MyAssembly = null;

}
}

//上述代码是网站搜集的。已经测试过自己的数据库操作DLL文件。没有问题,希望能方便到大家。

分享到:
评论

相关推荐

    C#动态调用DLL并对目标函数传递参数

    总结起来,C#动态调用DLL并传递参数是一个涉及反射、委托和类型转换的过程,对于需要在运行时根据条件选择功能或处理不固定接口的情况非常有用。熟练掌握这一技巧,可以极大地增强代码的灵活性和适应性。

    bartender 10.0 C#动态调用DLL

    在.NET框架下,C#可以使用`System.Reflection`命名空间的类,如`Assembly`和`Type`,来动态加载和调用DLL中的方法。这种方法允许程序在运行时决定要执行哪个特定的DLL功能,增强了代码的灵活性。 1. **加载DLL**:...

    C#动态调用Dll中的方法

    本主题将深入探讨如何利用C#的反射特性来动态调用DLL(动态链接库)中的方法。首先,我们需要了解什么是DLL以及它在程序中的作用。 DLL(Dynamic Link Library)是Windows操作系统中的一个共享库,它包含了一组可...

    C#动态调用Dll的研究

    ### C#动态调用DLL的研究 #### 一、引言 在软件开发中,动态链接库(DLL)是非常重要的组成部分,特别是在.NET框架下利用C#进行编程时。本文旨在探讨如何将一个动态链接库(DLL)作为一个资源嵌入到可执行文件中,...

    C#程序实现动态调用DLL的实例

    本文将深入探讨如何在C#程序中实现动态调用DLL的实例,以便于开发者在需要使用非托管代码或者第三方库时能够灵活应对。 首先,我们需要了解DLL(动态链接库)的概念。DLL是一种包含可由多个程序同时使用的函数和...

    C#程序实现动态调用DLL

    ### C#程序实现动态调用DLL的关键知识点 #### 一、动态链接库(DLL)概述 **1. 动态链接库定义** - **概念**:动态链接库(Dynamic Link Library,简称DLL),是在Windows操作系统中最核心的技术之一。DLL是一种...

    C#调用C++的动态库Dll示例(含UsbLibDotNet使用)

    1.C#调用C++封装的动态库dll 2.结构体含union共同体的C++转C#示例 3.C#结构体指针的调用演示 4.C#读取USB数据设备的示例 5.C#动态调用C++dll库示例 6.C#静态调用C++dll库示例 注意:UsbLibDotNet使用时候需要先安装...

    C#调用C++动态DLL

    4. **调用DLL函数**:现在,你可以创建一个委托类型的实例,并用它来调用DLL中的函数。例如,如果你有一个名为`MyFunction`的C++函数,你可以这样做: ```csharp [DllImport("myDLL.dll", CallingConvention = ...

    Electron 调用C# 动态库DLL

    总的来说,`Electron 调用C# 动态库DLL`这个主题涉及到的技术栈包括Electron桌面应用开发、Node.js环境下的C#调用、Vue.js前端框架(如果`vue.config.js`的存在表明了项目使用Vue.js)、以及Babel的代码转换。...

    JS调用c#编写的DLL 源代码

    本文将详细讲解如何通过JS调用由C#编写的DLL(动态链接库),并涵盖源代码创建、DLL生成、注册以及JS调用DLL的两种方法。 首先,我们创建C#类库项目。在Visual Studio中,选择“新建项目”-&gt; “类库(C#)”,项目...

    C#Winform动态调用C++和C#的Dll

    以上步骤完成后,你就可以在C# Winform应用中安全地动态调用DLL了,而这些DLL已经被嵌入到EXE中,无需担心DLL文件丢失的问题。 在开发过程中,注意解决命名空间和类名的冲突,以及正确地传递参数和返回值。另外,...

    C#动态载入的DLL,并调用成员方法(提供非接口及接口调用两种方式)

    C#动态载入DLL,DLL中类方法调用,及采用接口方式调用DLL的类方法和获取类成员属性。含示例代码及程序运行截图。

    c#调用dll示例

    C#调用DLL(动态链接库)的示例就是这样的一个场景,它允许C#代码利用C++编写的底层库,从而结合了C#的易用性和C++的高效性。 在C++中创建DLL文件通常涉及以下步骤: 1. 定义导出函数:在C++源文件中,使用`__...

    C#开发和调用DLL动态库的程序Demo

    二、调用DLL动态库 1. 添加引用:在另一个C#项目中,如果要使用上述创建的DLL,首先需要添加对该DLL的引用。右键点击项目,选择"添加引用",在"浏览"选项卡中找到`MathOperations.dll`,点击"确定"。 2. 引入命名...

    delphi动态调用Dll

    9. **跨语言兼容性**:动态调用DLL使得Delphi程序能够与使用其他语言(如C++、C#或VB.NET)编写的DLL交互,因为这些语言都支持stdcall调用约定。 10. **优化和性能**:虽然动态调用提供了灵活性,但也有性能开销,...

    VC++ 和 C# 互相调用 DLL 的 全部可行方法

    对于C#调用VC++生成的非托管DLL,情况相对简单,因为非托管DLL可以直接被任何支持DLL导入的语言调用。但是,当C#需要调用托管的VC++ DLL时,需要使用PInvoke(Platform Invoke)或者C++/CLI来创建一个桥接层,使C#...

    C#调用C++DLL动态库.rar_C#调用C++DLL动态库_c++dll动态库_c++开发动态库

    C#调用C++ DLL时可能会遇到异常,例如找不到DLL或函数,或者参数不匹配。因此,需要适当的错误处理机制,例如使用`try-catch`块。 7. **平台兼容性**: 跨平台开发时,需要注意C++ DLL是否适用于目标平台(如x86...

    c#调用c++DLL,dll有二维数组

    在C#中调用C++编写的动态链接库(DLL)是一项常见的跨语言编程任务,尤其是在需要利用C++的高效性能或已有的C++代码库时。本篇将详细讲解如何在C#中调用一个包含二维数组的C++DLL。 首先,我们需要了解C#与C++之间...

    C#调用QT的dll方法

    五、C#调用dll方法 要在C#中调用dll方法,我们可以使用DllImport特性。例如: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime....

    C#调用C++DLL实例代码

    然而,有时我们可能需要调用一些已经用C++编写的DLL动态链接库,因为这些库可能包含一些高性能或特定平台的原生代码。本篇文章将详细探讨如何在C#中调用C++的DLL,并通过一个实例代码进行演示。 首先,我们需要了解...

Global site tag (gtag.js) - Google Analytics