如何在C#中调用托管DLL文件?

时间:2011-07-26 13:19:52

标签: c# dll call external managed

我正在编写脚本语言,但我遇到了严重的问题。

我需要这样做才能用语言调用.NET DLL,但我发现在C#中没办法做到这一点。

有没有人知道如何以编程方式加载和调用.NET dll? (我不能只是添加引用所以不要这样说)

3 个答案:

答案 0 :(得分:4)

我是这样做的:

Assembly assembly = Assembly.LoadFrom(assemblyName);
System.Type type = assembly.GetType(typeName);
Object o = Activator.CreateInstance(type);
IYourType yourObj = (o as IYourType);

其中assemblyNametypeName是字符串,例如:

string assemblyName = @"C:\foo\yourDLL.dll";
string typeName = "YourCompany.YourProject.YourClass";//a fully qualified type name

然后你可以在obj上调用方法:

yourObj.DoSomething(someParameter);

当然,您可以调用的方法由您的界面IYourType ...

定义

答案 1 :(得分:2)

您可以使用Assembly.LoadFrom,从那里使用标准reflection来获取类型和方法(我假设您已经在脚本中执行此操作)。 MSDN页面(链接)上的示例显示了这一点:

Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");
// Obtain a reference to a method known to exist in assembly.
MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("Method1");
// Obtain a reference to the parameters collection of the MethodInfo instance.
ParameterInfo[] Params = Method.GetParameters();
// Display information about method parameters.
// Param = sParam1
//   Type = System.String
//   Position = 0
//   Optional=False
foreach (ParameterInfo Param in Params)
{
    Console.WriteLine("Param=" + Param.Name.ToString());
    Console.WriteLine("  Type=" + Param.ParameterType.ToString());
    Console.WriteLine("  Position=" + Param.Position.ToString());
    Console.WriteLine("  Optional=" + Param.IsOptional.ToString());
}

答案 2 :(得分:1)

听起来你需要使用Assembly.Load(Assembly.Load at MSDN)的重载之一。动态加载程序集后,可以使用System.Reflection,动态对象和/或接口/基类来访问其中的类型。