[C#] Auf DLL Funktionen zugreifen.

Hallo,

wenn ich mein Programm starte, dann kommt folgende Fehlermeldung (siehe Anhang).
Code:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices; 
//using vektoren;

namespace Programm{
    public class SteuerelementeForm : System.Windows.Forms.Form
    {
         [DllImport("vektoren.dll")]
         extern static void vektoradditionMenu_Click(object sender, EventArgs e);
         [DllImport("vektoren.dll")]
         extern static void spitzeberechnenMenu_Click(object sender, EventArgs e);
         [DllImport("vektoren.dll")]
         extern static void mittelp(object sender, EventArgs e);
         
        private MainMenu mainMenu;
        private MenuItem vektoradditionMenu, vektoren;
        private MenuItem spitzeberechnenMenu, mittelpunkt_Menu;
        private MenuItem beendenMenu, gleichungen;
        private MenuItem helpMenu, ungleichungen, gleichungen2;
        
        public SteuerelementeForm()
        {
             Name = "VektorForm";
             Text = "Mathe v2.0"; //Titel Text
             Font = new Font("Arial", 9F, (FontStyle.Bold), GraphicsUnit.Point, ((System.Byte)(0))); //Schriftart
             FormBorderStyle = FormBorderStyle.FixedDialog;
             Location = new Point(0,0);
             Size = new Size(500,300);
             Komponenten();
         }
         private void Komponenten() // Menü initialisieren
         {
             mainMenu = new MainMenu();
             vektoren = new MenuItem();
             vektoradditionMenu = new MenuItem();
             spitzeberechnenMenu = new MenuItem();
             gleichungen2 = new MenuItem();
             ungleichungen = new MenuItem();
             gleichungen = new MenuItem();
             beendenMenu = new MenuItem();
             helpMenu = new MenuItem();
             mittelpunkt_Menu = new MenuItem();
             
             vektoren.Index = 0;
             vektoren.Text = "Vektoren";  
             gleichungen.Index = 1;
             gleichungen.Text = "Gleichungen";
             
             gleichungen2.Index = 0;
             gleichungen2.Text = "Gleichungen";
             ungleichungen.Index = 1;
             ungleichungen.Text = "Ungleichungen";
             
             mittelpunkt_Menu.Index = 2;
             mittelpunkt_Menu.Text = "Mittelpunkt";
             mittelpunkt_Menu.Click += new EventHandler(mittelp);
             
             helpMenu.Index = 3;
             helpMenu.Text = "?";
             helpMenu.Click += new EventHandler(help_click);
             
             beendenMenu.Index = 2;
             beendenMenu.Text = "Beenden";
             beendenMenu.Click += new EventHandler(beendenMenu_Click);
             
             spitzeberechnenMenu.Index = 1;
             spitzeberechnenMenu.Text = "Punkt berechnen";
             spitzeberechnenMenu.Click += new EventHandler(spitzeberechnenMenu_Click);     
             
             vektoradditionMenu.Index = 0;
             vektoradditionMenu.Text = "Vektoraddition";
             vektoradditionMenu.Click += new EventHandler(vektoradditionMenu_Click);
             
             mainMenu.MenuItems.Add(vektoren);
             vektoren.MenuItems.Add(vektoradditionMenu);
             vektoren.MenuItems.Add(spitzeberechnenMenu);
             vektoren.MenuItems.Add(mittelpunkt_Menu);
             mainMenu.MenuItems.Add(gleichungen);
             gleichungen.MenuItems.Add(gleichungen2);
             gleichungen.MenuItems.Add(ungleichungen);
             mainMenu.MenuItems.Add(beendenMenu);
             mainMenu.MenuItems.Add(helpMenu);
             
             Menu = mainMenu;
         }
         public static void Main() // Hauptteil ("Main") des Programms
         {
              Application.Run(new SteuerelementeForm()); // Fenster initialisieren
         }
         private void beendenMenu_Click(object sender, EventArgs e){ // Wenn auf Beenden geklickt wurde
             Close(); // dann schließe Fenster
         }
         private void help_click(object sender, EventArgs e){
             MessageBox.Show("Ein Programm für Vektoren und Gleichungen.\nGeschrieben in C# \n© by Markus Büttner, 2010");
         }
    }
}
Die Dll:
Code:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace vektoren{
public class vektoren{
		private TextBox v1x_koo, v1y_koo;
		private TextBox v2x_koo, v2y_koo;
		private TextBox ergebnis, ergebn_y;
		private TextBox px, py, p2x, p2y, mx, my;
		private TextBox v11_koo, v12_koo;
		private TextBox erg_spz1, erg_spz2;
		private Label p, p2;
		private Label v11, v12;
		private Label v1x,v1y;
		private Label v2x,v2y;
		private Label erg_x, erg_y;
		private Button ergebns, spitze;
		private CheckBox gegenvektor;
		private Label m;
		
		public void vektoradditionMenu_Click(object sender, EventArgs e){ // Wenn man Vektoren addieren will
		 	ergebns.Controls.Remove(ergebns);
		 	px.Controls.Remove(px);
		 	py.Controls.Remove(py);
		 	v1x = new Label();
		 	v1y = new Label();
		 	v2x = new Label();
		 	v2y = new Label();
		 	erg_x = new Label();
		 	erg_y = new Label();
		 	v1x_koo = new TextBox();
		 	v1y_koo = new TextBox();
		 	v2x_koo = new TextBox();
		 	v2y_koo = new TextBox();
		 	ergebnis = new TextBox();
		 	ergebn_y = new TextBox();
		 	ergebns = new Button();
		 	
		 	v1x_koo.Controls.Add(v1x_koo);
			v1y_koo.Controls.Add(v1y_koo);
			v1x.Controls.Add(v1x);
			v1y.Controls.Add(v1y);
		 	
		 	v1x.Name = "v1";
		 	v1x.Text = "Vektor 1 (x): ";
		 	v1x.Location = new Point(8,10);
		 	v1x.Size = new Size(120,20);
		 	v1y.Name = "v1";
		 	v1y.Text = "Vektor 1 (y): ";
		 	v1y.Location = new Point(8,40);
			v1y.Size = new Size(120,20);
		 	
		 	v2x.Name = "v2";
		 	v2x.Text = "Vektor 2 (x): ";
		 	v2x.Location = new Point(200,10);
		 	v2x.Size = new Size(120,20);
		 	v2y.Name = "v2";
		 	v2y.Text = "Vektor 2 (y): ";
		 	v2y.Location = new Point(200,40);
		 	v2y.Size = new Size(120,20);
			 	
			erg_x.Name = "ergebnis";
		 	erg_x.Text = "Ergebnis (x)";
		 	erg_x.Location = new Point(10,100);
		 	erg_x.Size = new Size(120,20);
		 	erg_y.Name = "ergebnis";
		 	erg_y.Text = "Ergebnis (y)";
		 	erg_y.Location = new Point(10,130);
		 	erg_y.Size = new Size(120,20);			 
				 	
		 	v1x_koo.Name = "Vektor1_x";
		 	v1x_koo.Text = "";
		 	v1x_koo.Location = new Point(90, 8);
		 	v1x_koo.Size = new Size(90,20);
		 	v1y_koo.Name = "Vektor1_y";
		 	v1y_koo.Text = "";
		 	v1y_koo.Location = new Point(90, 38);
		 	v1y_koo.Size = new Size(90,20);
					 	
		 	v2x_koo.Name = "Vektor2_x";
		 	v2x_koo.Text = "";
		 	v2x_koo.Location = new Point(280, 8);
		 	v2x_koo.Size = new Size(90,20);
		 	v2y_koo.Name = "v2";
		 	v2y_koo.Text = "";
		 	v2y_koo.Location = new Point(280, 38);
		 	v2y_koo.Size = new Size(90,20);
		 	
		 	ergebnis.Name = "Ergebnis";
		 	ergebnis.Text = "";
		 	ergebnis.Location = new Point(90,98);
		 	ergebnis.Size = new Size(90,20);
		 	ergebnis.Enabled = false;
		 	ergebn_y.Name = "Ergebnis";
		 	ergebn_y.Text = "";
		 	ergebn_y.Location = new Point(90,128);
		 	ergebn_y.Size = new Size(90,20);
		 	ergebn_y.Enabled = false;
		 	
		 	ergebns.Name = "Berechnen";
		 	ergebns.Text = "&Berechnen";
		 	ergebns.Location = new Point(200,98);
		 	ergebns.Size = new Size(90,20);
		 	ergebns.Click += new EventHandler(ergebns_click);
		 	
		 	p.Controls.Remove(p);
		 	p2.Controls.Remove(p2);
		 	v11.Controls.Remove(v11);
		 	v12.Controls.Remove(v12);
		 	px.Controls.Remove(px);
		 	py.Controls.Remove(py);
		 	v11_koo.Controls.Remove(v11_koo);
		 	v12_koo.Controls.Remove(v12_koo);
		 	erg_spz1.Controls.Remove(erg_spz1);
		 	erg_spz2.Controls.Remove(erg_spz2);
		 	spitze.Controls.Remove(spitze);
		 	gegenvektor.Controls.Remove(gegenvektor);
		 	p2y.Controls.Remove(p2y);
		 	p2x.Controls.Remove(p2x);
		 	
			v2x_koo.Controls.Add(v2x_koo);
			v2y_koo.Controls.Add(v2y_koo);
			ergebnis.Controls.Add(ergebnis);
			ergebn_y.Controls.Add(ergebn_y);
			ergebns.Controls.Add(ergebns);
			v2x.Controls.Add(v2x);
			v2y.Controls.Add(v2y);
			erg_x.Controls.Add(erg_x);
		 	erg_y.Controls.Add(erg_y);
		 }
		 public void spitzeberechnenMenu_Click(object sender, EventArgs e){ // Wenn man einen Punkt vom Vektor berechnen will
		 	p.Controls.Remove(p);
		 	p2.Controls.Remove(p2);
		 	ergebns.Controls.Remove(ergebns);
		 	px.Controls.Remove(px);
		 	py.Controls.Remove(py);
		 	p = new Label();
		 	p2 = new Label();
		 	v11 = new Label();
		 	v12 = new Label();
		 	px = new TextBox();
		 	py = new TextBox();
		 	v11_koo = new TextBox();
		 	v12_koo = new TextBox();
		 	erg_spz1 = new TextBox();
		 	erg_spz2 = new TextBox();
		 	spitze = new Button();
		 	gegenvektor = new CheckBox();
		 	
		 	p.Name = "P";
		 	p.Text = "Punkt P (             |              )";
		 	p.Location = new Point(10,10);
		 	p.Size = new Size(350,20);
		 	p2.Name = "P2";
		 	p2.Text = "Punkt P'(             |              )";
		 	p2.Location = new Point(200,10);
		 	p2.Size = new Size(200,20);
		 	
		 	px.Name = "Px";
		 	px.Text = "";
		 	px.Location = new Point(65,8);
		 	px.Size = new Size(35,20);
		 	py.Name = "Py";
		 	py.Text = "";
		 	py.Location = new Point(110,8);
		 	py.Size = new Size(35,20);
		 	
		 	v11.Name = "V";
		 	v11.Text = "Vektor 1 (x)";
		 	v11.Location = new Point(10,40);
		 	v11.Size = new Size(100, 20);
		 	v12.Name = "V";
		 	v12.Text = "Vektor 1 (y)";
		 	v12.Location = new Point(10,70);
		 	v12.Size = new Size(100, 20);
		 	
		 	v11_koo.Name = "V11";
		 	v11_koo.Text = "";
		 	v11_koo.Location = new Point(90,38);
		 	v11_koo.Size = new Size(55,20);
		 	v12_koo.Name = "V12";
		 	v12_koo.Text = "";
		 	v12_koo.Location = new Point(90,68);
		 	v12_koo.Size = new Size(55, 20);
		 	
		 	erg_spz1.Name = "erg";
		 	erg_spz1.Text = "";
		 	erg_spz1.Location = new Point(255,8);
		 	erg_spz1.Size = new Size(35,20);
		 	erg_spz1.Enabled = false;
		 	erg_spz2.Name = "erg";
		 	erg_spz2.Text = "";
		 	erg_spz2.Location = new Point(300,8);
		 	erg_spz2.Size = new Size(35,20);
		 	erg_spz2.Enabled = false;
		 	
		 	spitze.Name = "Berechnen";
		 	spitze.Text = "B&erechnen";
		 	spitze.Location = new Point(200,68);
		 	spitze.Size = new Size(100,20);
		 	spitze.Click += new EventHandler(spitze_berechnen);
		 	
		 	gegenvektor.Name = "gegenv";
		 	gegenvektor.Text = "Gegenvektor";
		 	gegenvektor.Location = new Point(200,38);
		 	
		 	v2x_koo.Controls.Remove(v2x_koo);
		 	v2y_koo.Controls.Remove(v2y_koo);
			ergebnis.Controls.Remove(ergebnis);
			ergebn_y.Controls.Remove(ergebn_y);
			ergebns.Controls.Remove(ergebns);
			v2x.Controls.Remove(v2x);
			v2y.Controls.Remove(v2y);
			erg_x.Controls.Remove(erg_x);
		 	erg_y.Controls.Remove(erg_y);
		 	v1x_koo.Controls.Remove(v1x_koo);
			v1y_koo.Controls.Remove(v1y_koo);
			v1x.Controls.Remove(v1x);
			v1y.Controls.Remove(v1y);
			p2x.Controls.Remove(p2x);
			p2y.Controls.Remove(p2y);
			m.Controls.Remove(m);
			
			erg_spz1.Controls.Add(erg_spz1);
			erg_spz2.Controls.Add(erg_spz2);
		 	p2.Controls.Add(p2);
		 	px.Controls.Add(px);
		 	py.Controls.Add(py);
		 	v11_koo.Controls.Add(v11_koo);
		 	v12_koo.Controls.Add(v12_koo);
		 	p.Controls.Add(p);
		 	v11.Controls.Add(v11);
		 	v12.Controls.Add(v12);
		 	spitze.Controls.Add(spitze);
		 	gegenvektor.Controls.Add(gegenvektor);
		 }
		 public void mittelp(object sender, EventArgs e){
			 v2x_koo.Controls.Remove(v2x_koo);
			 v2y_koo.Controls.Remove(v2y_koo);
			 ergebnis.Controls.Remove(ergebnis);
		   ergebn_y.Controls.Remove(ergebn_y);
		   ergebns.Controls.Remove(ergebns);
		 	 v2x.Controls.Remove(v2x);
		 	 v2y.Controls.Remove(v2y);
		 	 erg_x.Controls.Remove(erg_x);
		 	 erg_y.Controls.Remove(erg_y);
		 	 v1x_koo.Controls.Remove(v1x_koo);
		 	 v1y_koo.Controls.Remove(v1y_koo);
		 	 v1x.Controls.Remove(v1x);
			 v1y.Controls.Remove(v1y);
		 	 p.Controls.Remove(p);
		 	 p2.Controls.Remove(p2);
		 	 v11.Controls.Remove(v11);
		 	 v12.Controls.Remove(v12);
		 	 px.Controls.Remove(px);
		 	 py.Controls.Remove(py);
		 	 v11_koo.Controls.Remove(v11_koo);
		 	 v12_koo.Controls.Remove(v12_koo);
		 	 erg_spz1.Controls.Remove(erg_spz1);
		 	 erg_spz2.Controls.Remove(erg_spz2);
		 	 spitze.Controls.Remove(spitze);
		 	 gegenvektor.Controls.Remove(gegenvektor);
		 	 
		 	 m = new Label();
		 	 p = new Label();
		 	 p2 = new Label();
		 	 mx = new TextBox();
		 	 my = new TextBox();
		 	 px = new TextBox();
		 	 py = new TextBox();
		 	 p2x = new TextBox();
		 	 p2y = new TextBox();
		 	 ergebns = new Button();
		 	 
		 	 p.Name = "p";
		 	 p.Text = "P (               |               )";
		 	 p.Location = new Point(10,10);
		 	 p.Size = new Size(190,20);
		 	 p2.Name = "P'";
		 	 p2.Text = "P'(               |               )";
		 	 p2.Location = new Point(10,40);
		 	 p2.Size = new Size(190,20);
		 	 m.Name = "M";
		 	 m.Text = "M ( x | y )";
		 	 m.Location = new Point(200,40);
		 	 m.Size = new Size(100,20);
		 	 
		 	 px.Name = "P";
		 	 px.Text = "";
		 	 px.Location = new Point(30,8);
		 	 px.Size = new Size(40,20);
		 	 py.Name="P";
		 	 py.Text = "";
		 	 py.Location = new Point(80,8);
		 	 py.Size = new Size(40,20);
		 	 p2x.Name = "P2";
		 	 p2x.Text = "";
		 	 p2x.Location = new Point(30,38);
		 	 p2x.Size = new Size(40,20);
		 	 p2y.Name = "P2";
		 	 p2y.Text = "";
		 	 p2y.Location = new Point(80,38);
		 	 p2y.Size = new Size(40,20);
		 	 
		 	 ergebns.Name = "Ergebnis";
		 	 ergebns.Text = "Berechnen";
		 	 ergebns.Location = new Point(200,8);
		 	 ergebns.Click += new EventHandler(mittelpunkt);
		 	 
		 	 px.Controls.Add(px);
		 	 py.Controls.Add(py);
		 	 p2x.Controls.Add(p2x);
		 	 p2y.Controls.Add(p2y);
		 	 p.Controls.Add(p);
		 	 m.Controls.Add(m);
		 	 p2.Controls.Add(p2);
		 	 ergebns.Controls.Add(ergebns);
		 }
		 private void ergebns_click(object sender, EventArgs e){ // Wenn die Vektoraddition ausgeführt werden soll
		 	try{
		 		string v1_x = v1x_koo.Text;string v1_y = v1y_koo.Text;
		 		string v2_x = v2x_koo.Text;string v2_y = v2y_koo.Text;
		 		decimal v1x = Convert.ToDecimal(v1_x);decimal v1y = Convert.ToDecimal(v1_y);
		 		decimal v2x = Convert.ToDecimal(v2_x);decimal v2y = Convert.ToDecimal(v2_y);
		 		decimal x = 0;decimal y = 0;
		 	
		 		x = (v1x + v2x);
		 		y = (v1y + v2y);
		 	
		 		ergebnis.Text = x.ToString();
		 		ergebn_y.Text = y.ToString();
		 	}catch (Exception ex){
		 		MessageBox.Show(ex.Message);
		 	}
		 }
		 private void spitze_berechnen(object sender, EventArgs e){ // Wenn ein Punkt berechnet werden soll
		 	try{
		 		Console.Write("Berechne Punkt ...\n");
		 		decimal p_x = Convert.ToDecimal(px.Text), p_y = Convert.ToDecimal(py.Text);
		 		decimal v_x = Convert.ToDecimal(v11_koo.Text), v_y = Convert.ToDecimal(v12_koo.Text);
		 		decimal x2, y2;
		 		
		 		if(gegenvektor.Checked == true){
		 			x2 = p_x - v_x;
		 			y2 = p_y - v_y;
		 		}else{
		 			x2 = v_x + p_x;
		 			y2 = v_y + p_y;
		 		}
		 		
		 		erg_spz1.Text = x2.ToString();
		 		erg_spz2.Text = y2.ToString();
		 	}catch (Exception ex){
		 		MessageBox.Show(ex.Message);
		 	}
		 }
		 private void mittelpunkt(object sender, EventArgs e){
		 	try{
		 		decimal p_x = Convert.ToDecimal(px.Text);decimal p_y = Convert.ToDecimal(py.Text);
		 		decimal p2_x = Convert.ToDecimal(p2x.Text);decimal p2_y = Convert.ToDecimal(p2y.Text);
		 		decimal m_x, m_y;
		 		
		 		m_x = (p_x + p2_x)/2;
		 		m_y = (p_y + p2_y)/2;
		 		
		 		m.Text = "M( " + m_x.ToString() + " | " + m_y.ToString() + " )";
		 	}catch (Exception ex){
		 		MessageBox.Show(ex.Message);
		 	}
		 }
}
}
 
Warum bindest Du eine in C# geschrieben Lib mit DllImport ein? DllImport ist für Unmanaged Libs gedacht. Du kannst doch einfach eine Referenz auf die Dll zu deinem Projekt hinzufügen.
 
Warum bindest Du eine in C# geschrieben Lib mit DllImport ein? DllImport ist für Unmanaged Libs gedacht. Du kannst doch einfach eine Referenz auf die Dll zu deinem Projekt hinzufügen.
Bei dem Compileraufruf
Code:
csc /t:winexe /r:q:\c#\eigene\vektoren\vektoren.dll q:\c#\eigene\vektoren\main.cs
folgende Fehlermeldungen kommen:
Code:
The name "mittelp" does not exists in the current context
The name "spitzeberechnenMenu_Click" does not exists in the current context
The name "vektoradditionMenu_Click" does not exists in the current context
 
Das [Namespace].[Class].[Method] war nur ein Beispiel, Deine Methode ist nicht statisch, deshalb kommt es zu diesem Fehler. Du müsstest also eine neue Instanz erstellen. Also z.B. vektoren.vektoren vek = new vektoren.vektoren(); und danach kannste auf Deine Methode zugreifen.

Du kannst ja nicht auf eine Methode zugreifen welche zwar public ist aber nicht statisch.
 
Zurück
Oben