我的代码如下:string filePath=Application.StartupPath +dllFileName ;
try
{

      Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName); 
System.Reflection.MethodInfo method = type.GetMethod("getInstance");

MessageBox.Show (frmClient.Text );
frmClient =(Form) method.Invoke(null,null );          frmClient.Dock=DockStyle.Fill ;
    frmClient.FormBorderStyle =FormBorderStyle.None ;
frmClient.TopLevel =false;
frmClient.WindowState=FormWindowState.Maximized ;
panelRight.Controls.Clear ();
panelRight.Controls.Add (frmClient);
frmClient.Show();
                
return true;
}
其中frmClient是定义的一个全局的变量。我用上面的方式初始化这个变量后在这个方法中使用它可以,但是在另一个方法中则出现未将对象引用设置到对象实例。调用的方法如下:private void CleareControlText(string dllFileName,string typeName)
{
string filePath=Application.StartupPath +dllFileName ;
Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName); 
System.Reflection.MethodInfo method = type.GetMethod("CleareControlText");
method.Invoke (frmClient,null);

}
可method.Invoke (frmClient,null);这句放在上个方法的后面就可正常调用。

解决方案 »

  1.   

    全局的变量?c#里没有这个说法  估计是static
    它是常住内存的  所有类均可引用 使用前当然必须赋值
      

  2.   

    如果你先调用第一个方法,再调用第二个方法肯定没有问题。
    所以你应该在当前类的构造函数中初始化frmClient对象,这样就不会出错了。
      

  3.   

    想实现这样的功能该如何解决呢。我的功能是首先显示dll中的窗口,然后调用dll的中定义的一个方法清除这个窗口中控件的内容。