来自托管dll的调用方法c#

时间:2014-03-03 04:11:44

标签: c# dll

使用ILSPY我发现BV method内有bvlsFortran.dll个可用内容 但是,ILSPY表示它是CALCBV!BV enter image description here 看看是否正确我在Visual Studio中添加了作为参考,然后在main上添加: enter image description here

    ![enter image description here][3]

    Assembly SampleAssembly;
    SampleAssembly = Assembly.LoadFrom("bvlsFortran.dll");
    // Obtain a reference to a method known to exist in assembly.
    MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("CALCBV!BV");
    // 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());
    }

它是正确的,显示有关它的信息。

enter image description here 我怎么称呼这种方法? 我不能写CALCBV!BV因为编译器抱怨... 如果我在方法上写BVbvlsFortran,则无法找到它。

2 个答案:

答案 0 :(得分:1)

您可以使用要传递给该函数的参数数组在Invoke上调用Methodinfo

名称CALCBV!BV可能是混淆的结果,该dll的发布者不希望您直接调用它。

Method.Invoke( args );

答案 1 :(得分:1)

如果它是基于.Net的dll,并且您在应用程序中有任何方式引用它,为什么使用反射?请尝试直接通过bvlsFortran.BV调用该方法。