博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转载]如何动态调用DLL中类的方法以及属性
阅读量:2450 次
发布时间:2019-05-10

本文共 2131 字,大约阅读时间需要 7 分钟。

C#中可以通过Assembly来动态加载DLL,然后由它创建类型,接着通过类型的InvokeMember方法来调用DLL中类的方法以及属性。

为了方便说明一下的方法,先说明一下DLL的代码,大致如下:

using System;

namespace clsTestDll

{

///

/// Summary description for TestDll.

///

public class TestDll

{

private string strName;

public TestDll()

{

//

// TODO: Add constructor logic here

//

strName = "";

}

public string GetValue( int nCount )

{

return string.Format( "Count is {0}!", nCount );

}

public static string GetNewValue( int nCount )

{

return string.Format( "New count is {0}!", nCount );

}

public string Name

{

get{ return strName;}

set{ strName = value;}

}

}

}

大致的步骤如下:

首先加载DLL,具体如下:

// Load assembly from dll file

Assembly assembly = Assembly.LoadFrom( "clsTestDll.dll");

其次,用加载的assembly来定义指定的类型,例如:

// Create new type

Type t = assembly.GetType( "clsTestDll.TestDll");

然后就可以通过新建的类型来调用类的方法。

如果是类的静态方法,可以直接调用,如:

// Call static member function by name

string strReturn = (string) t.InvokeMember("GetNewValue",

BindingFlags.DeclaredOnly |

BindingFlags.Public |

BindingFlags.Static | BindingFlags.InvokeMethod,

null,

null,

new object[]{ 12 } );

如果是类的非静态方法或属性,则需要通过类型,先生成类的对象,如:

// Create new object of specific class name

Object obj = t.InvokeMember(

null,

BindingFlags.DeclaredOnly |

BindingFlags.Public | BindingFlags.NonPublic |

BindingFlags.Instance | BindingFlags.CreateInstance,

null,

null,

null );

接着,就可以通过“obj”对象来进行调用了,如:

// Call member function by name

strReturn = (string) t.InvokeMember("GetValue",

BindingFlags.DeclaredOnly |

BindingFlags.Public | BindingFlags.NonPublic |

BindingFlags.Instance | BindingFlags.InvokeMethod,

null,

obj,

new object[]{ 12 } );

// Set class property

t.InvokeMember("Name",

BindingFlags.DeclaredOnly |

BindingFlags.Public | BindingFlags.NonPublic |

BindingFlags.Instance | BindingFlags.SetProperty,

null,

obj,

new Object[] {"Test"} );

// Get class property

strReturn = (string) t.InvokeMember("Name",

BindingFlags.DeclaredOnly |

BindingFlags.Public | BindingFlags.NonPublic |

BindingFlags.Instance | BindingFlags.GetProperty,

null,

obj,

null);

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130565/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130565/

你可能感兴趣的文章
sql server表分区_SQL Server中的FORCESCAN和分区表
查看>>
SQL Server中的STRING_SPLIT函数
查看>>
在SQLPackage实用工具中探索操作和任务
查看>>
如何自动执行SQL Server数据库还原
查看>>
亚马逊技能开发入门_Amazon QuickSight入门
查看>>
SQL Server Reporting Services最佳做法
查看>>
SQL FILESTREAM和SQL Server全文搜索
查看>>
SQL Server 2019中的轻量级性能分析
查看>>
学习MySQL:使用SELECT语句从MySQL服务器查询数据
查看>>
sql聚簇索引和非聚簇索引_使用SQL CREATE INDEX创建聚簇和非聚簇索引
查看>>
如何在SQL Server中索引外键列
查看>>
mysql 如何对表排序_学习MySQL:对表中的数据进行排序和过滤
查看>>
sql azure 语法_将SQL工作负载迁移到Microsoft Azure:规划迁移
查看>>
5000_500
查看>>
同步等待 异步等待_异步等待
查看>>
designmode_designMode
查看>>
api代理提取_提取API
查看>>
php 锚点_使用PHP分配锚点ID
查看>>
css 相同的css属性_CSS属性,内容和L10N
查看>>
v视差 u视差_视差SEO难题
查看>>