0

VS 2010 を使用しています。C# クラスを作成して DLL にコンパイルし、Windows フォーム プロジェクトを追加して DLL をテストしました。ソリューション エクスプローラーの TestApp プロジェクトに DLL への参照を追加しました。どちらのプロジェクトもエラーなしでコンパイルされます。しかし、TestApp を実行すると、dll のメソッドを呼び出すと NullReferenceException が発生します。エラーは、オブジェクトのインスタンスがないことを示しています。これは、呼び出されているメソッドであると私は理解しています。

私が行ったことはすべて、インターネットで見つけた他の 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
        }
    }
}
4

2 に答える 2

3

frmMain_Loadフォームの読み込み時にメソッドが呼び出されていないようです。

コードをコピーして貼り付けただけですか?メソッドをイベントのイベント ハンドラーとして登録するには、それだけでは不十分Loadです。

  • Loadデザイナーでフォームをダブルクリックすると、フォームのイベントに新しいハンドラーを追加できます。次に、メソッドの本体を編集できます。
  • または、イベントを処理する既存のメソッドを選択することもできます。これを行うには、デザイナーでフォームをクリックし、プロパティに移動してイベントを選択し、 を検索Loadして、ドロップダウン リストからメソッドを選択します。

WinForms デザイナーで Load イベントにハンドラーを追加する

于 2012-05-14T22:35:21.067 に答える
0

これを試して:

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

アレイを初期化するために以前の実装が気に入っているかどうかはわかりません。

于 2012-05-14T22:49:54.043 に答える