Anwendung beendet sich, warum?

Von: , Frage gestellt am Di, 11. Jul 2006

Hallo zusammen,
ich habe ne kleine Anwendung in C# geschrieben diese beendet sich einfach so nach einer gewissen Zeit ca.10-15 Sekunden von selbst, nach dem sie eine externe DLL genutzt hat(erstellt in Visual Prolog 6.2 (freeversion)).
Nur weiss ich einfach nicht warum, im Ereignisprotokoll von Windows ist kein Vermerk dazu zufinden und sonst kommt es auch zu keinem Fehler, leider kann ich es nicht mit der DLL Debuggen.

Bin für sämtlich Ideen offen...

mfg Rayk
System:
Windows XP Prof. SP2
Framework 2.0
Anwendung erstellt in MS Visual Studio 2005
DLL's Erstellt in Visual Prolog 6.2 (Personal Edition)

4 Antworten zu dieser Frage

  1. Antwort von nach 12 Stunden 1 hilfreich
    Re: Anwendung beendet sich, warum?

    Hallo zusammen,
    ich habe ne kleine Anwendung in C# geschrieben diese beendet
    sich einfach so nach einer gewissen Zeit ca.10-15 Sekunden von
    selbst, nach dem sie eine externe DLL genutzt hat(erstellt in
    Visual Prolog 6.2 (freeversion)).
    Hallo
    Dann hat wohl diese dll schuld. Verzichte doch mal ganz auf das Laden und Benutzen dieser dll, dann weißt du es genau. Ich denke mir, eine Nachricht and das Main-Window, das es geschlossen werden soll, oder ein Eingriff in die Task-Liste wird gemacht. Vielleicht findet mehr in der dll statt, als dir bekannt ist.
    Wenn eine Anwendung halbwegs systemgerecht geschlossen wird, entsteht auch keine Windows Meldung(oder irgendwas im Log-file). Ein Programm müßte dafür schon eine protection fault oder ähnlich auslösen.
    Hab ich was übersehen?

    MfG

  2. Antwort von nach 19 Stunden 0 hilfreich
    Re: Anwendung beendet sich, warum?

    Hallo!

    Wie benutzt Du denn die externe DLL? Vermutlich per P/Invoke, oder?
    Oder enthält die DLL COM-Objekte?
    Im ersten Fall ist halt die korrekte Deklaration der verwendeten Funktionen essenziell - wenn man hier etwas falsch macht, dann können die seltsamsten Effekte entstehen, inklusive nicht fangbaren Exceptions...
    Im zweiten Fall gab es mal unter .NET 1.0 (nicht sicher, ob es mit 1.1/2.0 noch so ist) den Effekt, dass COM-Objekte fälschlicherweise freigegeben wurden, nachdem sie ca. 5 Minuten nicht benutzt wurden. Aber nachdem die Zeit bei Dir ja <<5Min. ist, glaube ich nicht, dass das der Grund sein könnte.

    Gruß,
    Martin

    • Antwort von nach 2 Tagen 0 hilfreich
      Re^2: Anwendung beendet sich, warum?

      Hallo leider ist die DLL kein COM Objekt, ich wüsste auch nicht wie ich mit der Personal Edition von Visual Prolog 6.2 so etwas bewerkstellige.
      Ich lade die wenn man das so nennen darf die DLL dynamisch ein.
      Hier mein Aufruf:

      [DllImport("TypeMissmatch.dll")]
      [return: MarshalAs(UnmanagedType.I4)]
      static extern int typpruefung();

      int a = typpruefung();
      if (a > 0)
      {
      MessageBox.Show("Im Modul TypeMissmatch (Prologkern) sind Fehler aufgetreten.\nDer Fehler ist in Zeile " + a.ToString() + " der ");
      }

      Ich glaube auch der Aufruf Korrekt umgesetzt ist, da mir die DLL die entsprechend benötigten Daten liefert. Wenn ich die DLL nicht nutze beendet sich Seltsamerweise meine Anwendung nicht von selbst. Aber leiderkann ich auf die Nutzung nich verzichten, weil es eine Vorgabe war den eigentlichen Kern der Anwendung in Prolog zu verfassen.

      Wie gesagt ich bin für alle Ideen zur Problemlösung offen!

      • Antwort von nach 3 Tagen 0 hilfreich
        Re^3: Anwendung beendet sich, warum?

        Hmmm, die Deklaration an sich ist OK, wenn Deine Funktion auch tatsächlich einen 32bit Integer zurückliefert (übrigens ist das [return:...] hier überflüssig). U.U. könnte es auch noch an der Aufrufkonvention liegen, in der Deine Funktion in der DLL definiert ist. Hierfür gibt es beim DllImportAttribute die Eigenschaft CallingConvention.

        Du könntest außerdem den Aufruf an die Funktion typpruefung mal in ein try/catch kapseln, ob hier vielleicht eine Exception geworfen wird, wobei es bei Verwendung von nicht verwaltetem Code auch schon mal Fehler gegeben haben soll, die sich nicht fangen liessen...

        Gruß,
        Martin [Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!