Autor Beitrag
mumpiz
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 19.09.17 21:26 
Hallo,

bin noch sehr neu in C# (allerdings kein Programmieranfänger).

Habe aktuell einen "Flüchtigkeitsfehler", weiß aber nicht warum er meint, dass "Class1" keine Definition für "SayHello" enthält. Die Methode SayHello wurde definiert.

Ich möchte zu Übungszwecken eine Funktion aus einer .Net Dll, geschrieben in C# aufrufen.

Das ist die Klasse aus der die DLL-Funktion SayHello aufgerufen wird:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
using System;
using System.Windows.Forms;
using MyDll;

namespace MyDllCall
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            Class1 Dll = new Class1();
            MessageBox.Show(Dll.SayHello());
        }
    }
}



Und hier der Source der DLL:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
using System;

namespace MyDll
{
    public class Class1
    {
        public String SayHello()
        {
            return "Hello from the Dll";
        }
    }
}


Und das ist die Fehlermeldung:
ausblenden Quelltext
1:
2:
3:
4:
error CS1061: "Class1" enthält keine Definition für "SayHello", und es konnte
keine SayHello-Erweiterungsmethode gefunden werden, die ein erstes Argument
vom Typ "Class1" akzeptiert (möglicherweise fehlt eine using-Direktive oder
ein Assemblyverweis).


Das ist wahrscheinlich ein peinlicher Fehler, aber ich find einfach die Lösung nicht.

Vielen Dank im Voraus


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mi 20.09.2017 um 09:29
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 19.09.17 22:02 
Ich vermute mal du hast noch eine Class1 in der Assembly zu der auch deine Form gehört. Diese sieht der Compiler zuerst und diese class1 hat keine SayHello Methode.

Falls du die nicht findest, markiere in deinem Sourcecode der Form mal class1 und drücke F12 (das ist die 'Gehe zur Definition' Funktion).

Für diesen Beitrag haben gedankt: mumpiz
mumpiz Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 19.09.17 22:05 
Ok, habe gerade den Fehler gefunden. (Arbeite zum ersten mal mit VisualStudio)

habe beide Projekte in einer Projektmappe.
Und ich dachte mit dem "Start"-Knopf in VisualStudio, wird die ganze Projektmappe neu compiliert.
Ist aber nicht so, musste ich nach Stunden herausfinden.
Ich hatte etwas an der DLL geändert (SayHello-Methode), danach weiter an dem "MyDllCall"-Projekt gearbeitet.
Demnach habe ich das "MyDll"-Projekt nie neu erstellt, sondern immer nur alleine das "MyDllCall"-Projekt.
Nun funktioniert es nach dem neu erstellen.

Danke für die Hilfe!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 19.09.17 22:22 
Eigentlich sollten die direkt abhängigen Projekte automatisch mit kompiliert werden.
Hast du eventuell nicht das MyDllCall Projekt referenziert sondern die dll Datei die von dem Projekt ausgespuckt wird direkt? Das macht einen Unterschied und sollte man besser nicht so machen.

Für diesen Beitrag haben gedankt: mumpiz
mumpiz Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 19.09.17 23:44 
Ja stimmt, ich habe nur die Dll selber referenziert, nicht das Projekt. Ach, da hätte ich auch schneller drauf kommen können, dass dann natürlich nicht das Dll-Projekt mit erstellt wird. Ist in anderen IDEs ja auch so.