dll in c# geschrieben, probleme beim ausführen

FJK

Erfahrenes Mitglied
ich hoffe ich bin hier im richtigen Bereich.

Also ich habe folgendes problem
Ich habe in c# Visual Studio 10 Express eine dll geschrieben.

In der Klasse in der dll, habe ich eine private string Variable, in der ich je nach bedarf Statusmeldungen schreibe.
Über eine get Methode soll diese ausgelsen werden.

Wenn ich die dll in einem Test Programm einbaue und auf diesen String über die Methode zugreifen will, stürzt das Programm ab. Er zeigt mir hierbei eine Fehlermeldung das der Code nicht Verfügbar ist. Also denke ich das er mir wärend der Debug Sesion die Fehlerhafte Zeile zeigen will, was er natürlich nicht kann, weil sie in der dll steht.
Andere Methoden, in der ich etwas in den String schreibe, führt er ohne Probleme aus. Ob er hier natürlich was in den String schreibt kann ich nicht kontrollieren :D

Binde ich die dll, als Klasse ein, also die Datei Dll.cls führt er den Code aus und macht was er soll.

Ich weiß das eine dll reine Maschinensprache ist, gibt es daher keine Internen Variablen, die solange die Klasse existiert erhalten bleiben? Das kann ich mir ehrlichgesagt nicht vorstellen, aber zur Zeit weiß ich nicht woran es sonst liegen könnte.

Bei bedarf zeig ich euch gerne Code Beispiele, aber wie gesagt als Klasse hinzugefügt funktioniert es.

Außerdem benutze ich in der dll die Schnittstelle, um sie nicht jedesmal zu öffnen und zu schließen wollte ich gerne das schließen in den Destruktor setzen, aber C# und Destruktor...?
gibt es sowas noch, teilweise erlaubt er mir das ~ und machnchmal kreidet er mir das als Fehler an. Gibt es vieleicht irgendwas in der dll was aufgerufen wird wenn sie geschlossen wird?

danke
 
Hi

ich hoffe ich bin hier im richtigen Bereich.

Ja.

Also ich habe folgendes problem
Ich habe in c# Visual Studio 10 Express eine dll geschrieben.
2010?

Wenn ich die dll in einem Test Programm einbaue und auf diesen String über die Methode zugreifen will, stürzt das Programm ab. Er zeigt mir hierbei eine Fehlermeldung das der Code nicht Verfügbar ist. Also denke ich das er mir wärend der Debug Sesion die Fehlerhafte Zeile zeigen will, was er natürlich nicht kann, weil sie in der dll steht.
Andere Methoden, in der ich etwas in den String schreibe, führt er ohne Probleme aus. Ob er hier natürlich was in den String schreibt kann ich nicht kontrollieren :D
Zeig einmal einen Screenshot deines Projektmappenexplorers. Und wie lädst du die DLL?
Und am besten auch gleich den Code.

Ich weiß das eine dll reine Maschinensprache ist
Bei C#.NET nicht.
Ja bei C/C++-Dlls, .NET hat aber ein eigenes Binärformat.

Außerdem benutze ich in der dll die Schnittstelle, um sie nicht jedesmal zu öffnen und zu schließen wollte ich gerne das schließen in den Destruktor setzen, aber C# und Destruktor...?
gibt es sowas noch, teilweise erlaubt er mir das ~ und machnchmal kreidet er mir das als Fehler an. Gibt es vieleicht irgendwas in der dll was aufgerufen wird wenn sie geschlossen wird?
Es gibt einen Destruktor.
Und Finalize.
(Und teilweise Dispose).

Zeig einmal die Codestellen, die falsch sein sollen.

Gruß
 
Wenn ich die dll in einem Test Programm einbaue und auf diesen String über die Methode zugreifen will, stürzt das Programm ab. Er zeigt mir hierbei eine Fehlermeldung das der Code nicht Verfügbar ist.
Du kannst das DLL-Projekt ja noch der Solution des Testprogrammes hinzufügen. Dann wird auch der Code gefunden.

Gruß
MCoder
 
Hi,
danke für die Antworten.

ok die sache ist mir jetzt etwas peinlich, der Fehler lag bei mir selber.
Ich habe den Code natürlich im Debbuger getestet und bin mit step durchgetakert.
Als er dann die DLL aufrufen wollte, wollte er sie natürlich aufrufen, dies konnte er nicht :D
Bin eigendlich davon ausgegangen das er den Code dann überspringt, wie von einer Lib.
Hab dann gedacht das der Fehler darauf beruht das ein Fehler in der DLL liegt und der Debbuger mir diesen zeigen wollte :D

Ja 2010, gibt es noch eine andere VC Express 10 version?

ich füge die Dll, mit "Verweis Hinzufügen" hinzu, in der Projektmappe wird die dann aufgeführt.
Kann ich es noch anders einbinden, so das ich auch beim Debbugen die Codezeile mit einzelstep ausführen kann?

Zitat
Zitat von FJK Beitrag anzeigen
Ich weiß das eine dll reine Maschinensprache ist
Bei C#.NET nicht.
Ja bei C/C++-Dlls, .NET hat aber ein eigenes Binärformat.

hmm ok, kann die DLL dann trotzdem in anderen Sprachen verwendet werden?

gruß
 
Ja 2010, gibt es noch eine andere VC Express 10 version?
Nein, ich hab nur nachgefragt um sicher zu gehen.

hmm ok, kann die DLL dann trotzdem in anderen Sprachen verwendet werden?
Teilweise.
Eine C# (.NET)-DLL ist eben keine DLL im C++-Sinn-nur die Dateiendung ist gleich.
Du kannst die DLL mit allen .NET-Sprachen verwenden: C#, VB.NET, C++CLI...
Aber nicht mit C, C++ und ähnlichem.

Gruß
 
Das muss sowieso installiert sein, damit du irgendein .NET-Programm/DLL/... ausführen kannst.
Also auch für ein Hello-World-Programm in C#.

Das ist ja der große Unterschied zwischen .NET und Rest:
Ein normales C++-Programm wird beim kompilieren in Prozessorbefehle übersetzt, die direkt reingeladen und ausgeführt werden können.
Ein .NET-Programm wird beim kompilieren in ein eigenes Dateiformat übersetzt, mit dem der Prozessor nichts anfangen kann.
Dafür gibts dann das .NET-Framework: Enthält unter anderem Programme (bzw. irgendwas, das sich in Windows einbindet), die diese .NET-Dateien lesen können und dann wirklich das machen, was sie tun sollen.

Hat alles Vorteile und Nachteile, aber das ist jetzt nebensächlich.

Also: Eine .NET-DLL hat mit einer C-DLL nur das ".dll" gemeinsam - fertig.
Man kann diese Welten nicht einfach so vermischen.

Gruß
 
Das muss sowieso installiert sein, damit du irgendein .NET-Programm/DLL/... ausführen kannst.
Also auch für ein Hello-World-Programm in C#.

Das ist ja der große Unterschied zwischen .NET und Rest:
Ein normales C++-Programm wird beim kompilieren in Prozessorbefehle übersetzt, die direkt reingeladen und ausgeführt werden können.
Ein .NET-Programm wird beim kompilieren in ein eigenes Dateiformat übersetzt, mit dem der Prozessor nichts anfangen kann.
Dafür gibts dann das .NET-Framework: Enthält unter anderem Programme (bzw. irgendwas, das sich in Windows einbindet), die diese .NET-Dateien lesen können und dann wirklich das machen, was sie tun sollen.

Hat alles Vorteile und Nachteile, aber das ist jetzt nebensächlich.

Also: Eine .NET-DLL hat mit einer C-DLL nur das ".dll" gemeinsam - fertig.
Man kann diese Welten nicht einfach so vermischen.

Gruß


ja das ist klar,
meine Frage zielte eher darauf ab wie man teiles seines C# Codes auch in anderesn Sprachen nutzen kann, also abseits von C# und .net.
gibt es den eine Möglichkeit ein Code in C# so zu "verpacken" das man ihn auch in c++ nutzen kann?
Meine überlegungen dachten da an eine dll, aber das schein ja jetzt hinfällig.
 
Zuletzt bearbeitet:
Möglich ist das schon: C++CLI lässt .NET-Zeug und natives C/C++ gemischt zu.
Du kannst dir also in C++CLI eine DLL schreiben, die in C/C++-Art Funktionen anbietet, die wiederum C#-Methoden aufrufen.
Diese natürlich auch irgendwo verfügbar = noch eine DLL.

Gruß
 
wenn ich dafür schon c++ nutzen muss, wäre es doch einfacher eine c++ dll zu schreiben, oder kann eine c++ dll auch nicht in c# genutzt werden?
 

Neue Beiträge

Zurück