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)).
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)

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

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

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!

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]