2012-05-14 99 views
0

我正在使用VS 2010.我创建了一个C#类并将其编译为一个DLL,然后向其添加了一个Windows窗体项目来测试该DLL。我在解决方案资源管理器的TestApp项目中添加了对DLL的引用。这两个项目编译没有错误。但是当我运行TestApp时,当我调用dll中的一个方法时,我得到一个NullReferenceException。该错误表示没有该对象的实例,我不介意将其作为被调用的方法。创建和使用C#DLL

我所做的一切都和我在网上找到的其他DLL例子一样。例如: http://msdn.microsoft.com/en-us/library/3707x96z(v=vs.100).aspx

http://coderock.net/how-to-create-a-dll-file-in-visual-studio-2010/

但我显然错过了一些基本的东西。

// DLL项目

namespace SLink 
{ 
    public class AmpAPI 
    { 
     public String[] ReadID(Int32 id) 
     { 
      String[] result = new string[] { "A", "B", "C", "D" }; 
      return result; 
     } 
    } 
} 

//测试应用

using SLink; 

namespace TestApp 
{ 
    public partial class frmMain : Form 
    { 
     AmpAPI amp; 

     public frmMain() 
     { 
      InitializeComponent(); 
     } 

     private void frmMain_Load(object sender, EventArgs e) 
     { 
      amp = new AmpAPI(); 
     } 

     private void btnUpdate_Click(object sender, EventArgs e) 
     { 
      String[] result = new String[] { "", "", "", "" }; 
      result = amp.ReadID(0); // <-- NullReferenceException 
     } 
    } 
} 
+0

什么是堆栈跟踪?你在调试器中看到什么? – SLaks

回答

3

它看起来像你的frmMain_Load方法不会被调用的形式加载时。

你刚刚复制并粘贴代码?这还不足以将该方法注册为Load事件的事件处理程序。

  • 通过双击设计器中的窗体,可以将新处理程序添加到窗体的Load事件中。然后你可以编辑方法的主体。
  • 或者,您可以选择现有的方法来处理事件。为此,请单击设计器中的表单,转至属性,选择事件,找到Load,然后从下拉列表中选择您的方法。

Add handler to Load event in WinForms designer

0

试试这个:

private void btnUpdate_Click(object sender, EventArgs e) 
    { 
     String[] result = amp.ReadID(0); 
    } 

不知道如果你喜欢以前实现初始化数组。