c# AccessViolation an div. Stellen

  • hi,

    ich programmiere gerade für unseren Kunden eine kleine Anwendung, die Mails als EML speichert.

    Wenn ich nun allerdings gem. Hilfe die Methode

    Code
    PrivateDeclareFunctionDVEmlFromMailItemLib"dvapi32.dll"Alias"DVEmlFromMailItem" (oMailItemAsDvApi32.MailItem, PathAsStringBuilder) AsLong

    aufrufe ernte ich bei 90% der EMails folgende Exception:

    System.AccessViolationException: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.

    Hat jemand eine Idee wie ich das verhindern kann? Hatte schon einen Thread gefunden, bei dem die Ursache war, dass der Code einer Console lief. Das kann ich sogar bestätigen. Aber das Problem tritt auch auf wenns als Windows-Forms-Exe läuft.

    Nachtrag: Die AccessViolation tritt auf beim For Each item As object in Archive.AllItems, oder Archive.Archives immer wieder auf.

    Einmal editiert, zuletzt von juerchen (15. Juli 2013 um 14:54)

  • Hallo,
    da Du ja schon einige EML Dateien erzeugt bekommst, scheint dein Code grundsätzlich korrekt zu sein. Um die Funktion ohne Probleme benutzen zu können, musst Du folgendes sicherstellen:
    - handelt es sich um den zu exportierenden Eintrag aus dem David Archive wirklich um eine Mail (Bei Fax, Voice, Kontakten, Kalendereinträgen, u.s.w. kommt es zum Fehler)
    - sind bei Mails noch alle dazugehörigen Files vorhanden sind (Wenn externe Virenscanner ggf. Anhänge gelöscht haben kommt es auch zum Fehler)
    Nun sollte die Routine ohne Fehler durchlaufen und alle Mails exportieren.
    Viel Erfolg
    Jens Osterwohldt

    Spezialist bei David Problemen, oder bei der Migration zu Kerio Connect (ebenfalls von AVM KEN! 4).

  • Hallo,
    da Du ja schon einige EML Dateien erzeugt bekommst, scheint dein Code grundsätzlich korrekt zu sein. Um die Funktion ohne Probleme benutzen zu können, musst Du folgendes sicherstellen:
    - handelt es sich um den zu exportierenden Eintrag aus dem David Archive wirklich um eine Mail (Bei Fax, Voice, Kontakten, Kalendereinträgen, u.s.w. kommt es zum Fehler)
    - sind bei Mails noch alle dazugehörigen Files vorhanden sind (Wenn externe Virenscanner ggf. Anhänge gelöscht haben kommt es auch zum Fehler)


    hi,
    zuerst mal danke für die schnelle antwort. Aber:
    - Japp sind definitiv Emails.
    - Virenscanner ist komplett deaktiviert.

    => Funktioniert allerdings immernoch nicht.

  • Hallo,
    dann bin ich mit meinem Latein auch am Ende, denn bei mir hat es nachdem ich diese beiden Punkte berücksichtigt habe direkt geklappt.
    Ich könnte selbst aber, wenn ich deinen Quellcode sehen würde, nicht wirklich helfen, da ich nicht in C# programmiere.
    Tipp: Schau mal in das Forum eines Tobit Partners
    Da gibt's auch einen sehr aktiven Bereich zum Thema dvapi32. Möglicherweise kommst Du auf dem Weg weiter.
    Viel Erfolg
    Jens Osterwohldt

    Update: Ich habe gesehen, das Du das Forum bereits gefunden hattest, und deine Frage auch da gepostet hast. Viel Erfolg ;)

    Spezialist bei David Problemen, oder bei der Migration zu Kerio Connect (ebenfalls von AVM KEN! 4).

  • hi Jens,

    japp, hab das Forum von schneller-und-besser gefunden, dort allerdings die 2 Threads von hier in einem zusammengefasst.

    Das mit dem C# war blöderweise Gewohnheit, der eigentliche Code ist VB.NET. Macht allerdings keinen unterschied was das verhalten angeht. Ungeschickterweise kann ich's in meinem lokalen Testsystem auch nicht nachvollziehen. Beim Kunden (wie soll's auch anders sein) ist das problemlos reproduzierbar.

    Vllt. Hast du ja eine Idee warum das field "MessageId" immer leer ist. Damit könnte ich das Problem mit dem DVEmlFromMailItem umschiffen, denn das war eigentlich nur die Notlösung, für das Ursprungsproblem.
    Ich bin an div. Posts mit dem Stichwort "FieldDefinitions" vorbeigekommen, die klangen allerdings alle nicht so als könnte ich damit David dazu bringen mir hier was zurück zu liefern.

    Nochmal danke für die schnelle Antwort

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!