动态加载程序集并创建其类型的变量

时间:2010-02-22 10:17:25

标签: c# dll excel-interop

我正在尝试动态加载程序集并创建其类型的变量:

Assembly Ass= Assembly.LoadFrom(@"d:\abc\microsoft.office.interop.excel.dll");
foreach(Type Excel Assembly.Gettypes())
{
    // here now  Type contains
    // Excel.nameSpace="microsoft.officce.interop.excel"

    // now i need to creae an variable of  type "Excel"

    microsoft.officce.interop.excel.applicationClass excel= null;
    // something like this 
    //Here  Excel is my nameSpace
    Excel.officce.interop.excel.applicationClass excel= null
}

我正在处理这个过去2天的任何帮助我如何声明我的Excel类型的变量(这是我需要创建的类型)

任何帮助都会很棒 谢谢

2 个答案:

答案 0 :(得分:2)

我不确定这适用于该程序集,但一般情况下,您可以通过从程序集中获取类型然后使用Activator.CreateInstance创建实例来执行此操作:

Type type = assembly.GetType("MyType");

object instanceOfMyType = Activator.CreateInstance(type);

您需要知道要创建的类型的名称('Excel.Application'?)

如果你知道它的路径,你也可以直接从dll获取类型:

Activator.CreateInstance(assmblyFileName, typeName) 

我不确定这会对这个程序集起作用,因为这是一个COM互操作程序集,所以我认为你可能必须使用COM来访问它,但它可能会。

编辑:

您可能更好地使用记录的方法来执行此操作:

Target Office Applications Through Primary Interop Assemblies应该是一个开始的好地方

答案 1 :(得分:0)

为什么不添加对程序集的引用?乍一看,你有一个拼写错误,你在microsoft.officce.interop拼写办公室2 c,这可能是你复制和粘贴代码的原因。

以下是我如何使用excel COM:

using Excel = Microsoft.Office.Interop.Excel;
Excel.Application excelApp = new Excel.ApplicationClass();

编辑:

此外,我可以看到你有命名空间问题。由于以前注释掉Excel命名空间,因此命名空间Excel不存在,因此以下内容本身应该可以正常工作。

Microsoft.Office.Interop.Excel.ApplicationClass excel = null;

没有:

Excel.officce.interop.excel.applicationClass excel= null