Announcement

Collapse
No announcement yet.

EAccessViolation und finde den Fehler nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    So, drei Tage den Debugger gequält und nun habe ich wohl den Überltäter entdeckt, weiß aber nicht warum und würde Eure Hilfe nochmals in Anspruch nehmen wollen.

    Hier ist die Funktion im Auszug:


    function bind2AD(AnsiString dn, AnsiString ldapName)
    // --------------------------------------------------
    IADs *pObject;
    HRESULT hr;

    AnsiString sdn2;
    wchar_t *pfad;
    int iSize;

    sdn2 = "LDAP://euad1.dmz2.de.domain.eu/"+dn;
    iSize = sdn2.WideCharBufSize();
    pfad = new wchar_t(iSize + 1);
    sdn2.WideChar(pfad,iSize);


    //ADS_SECURE_AUTHENTICATION
    hr = ADsOpenObject(L"LDAP://euad1.dmz2.de.domain.eu/CN=....",
    L"cn=..................",
    L"sicheresPasswort",
    NULL,
    IID_IADs,
    (void**)&pObject);
    .........



    Ich versuche einen connect auf ein Active Directory zu machen. Das funktioniert einwandfrei ohne Probleme solange ich

    sdn2.WideChar(pfad,iSize);

    auskommentiert habe. Ich brauche den Pfad in der AD-Funktion als wchar und dachte mit obiger Zeile könnte ich das Ganz umwandeln. Wenn diese zeile jedoch ausgeführt wird, passieren eigenartige Sachen im Speicher. VCL Komponenten mit Namen ".", oder "j" sind plötzlich da und das verursacht natürlich irgendwann eine AccessViolation.

    Weiß jemand wo da mein Denkfehler in dem Funktionsaufruf liegt? Gibt es eine alternative aus einem AnsiString einen wchar zu machen?

    Danke schon mal im voraus

    Manfred

    Comment


    • #17
      das
      sdn2.WideChar(pfad,iSize);

      ist m.E. definitiv falsch, da die Funktion das Array zurückgibt

      Das AnsiString-Objekt wird in ein Array mit Wide-Zeichen umgewandelt und das resultierende Wide-Zeichen-Array zurückgegeben.

      pfad=sdn2.WideChar(pfad,iSize);
      Christian

      Comment


      • #18
        hmm, das habe ich mir auch schon gedacht und die Zeile durch

        pfad=sdn2.WideChar(pfad,iSize);

        ersetzt. Trotzdem habe ich nach dem Ausführen eine VCL Komponente mit Namen "." auf dem Formular und das Programm schiert wenig später ab.

        Pfad ist übrigens im Debugger richtig gefüllt, schließt mit \0 ab und die Länge stimmt auch.

        Comment


        • #19
          tja, lt. Beschreibung sollte das so sein. Würde das erstmal in jedem Fall so lassen

          Dann würde mir noch auffallen, dass

          IADs *pObject;

          ein netter Zeiger ist, und das Ding auch in ADsOpenObject benutzt wird. Ist dieser initialisiert? ((void**)&pObject)
          Christian

          Comment


          • #20
            Laß ich jetzt auch so, da so ja richtig!

            Nein der wird nicht initialisiert. Habe ich so aus einem Beispielcode der Code Gear Hilfe.

            Ist irgendwie total strange. Wie gesagt, das ganze Programm läuft einwandfrei solange ich die WideChar-Funktion nicht aufrufe. Ich will ja gerne glauben, daß ich irgendwo anders noch einen Fehler habe, aber ich finde nix. Ist doch auch normal das der fehler dann irgendwann irgendwo auftritt, was für einen verbogenen Zeiger spricht, oder?

            Comment


            • #21
              pfad = new wchar_t[iSize];

              Eckige Klammern
              Christian

              Comment


              • #22
                Das glaub' ich ja jetzt nicht. Wie kann mir sowas nur passieren. Da hänge ich jetzt fast die ganze Woche am debuggen und ......

                ... genau das war es! pfad = new wchar_t(iSize) ist ja auch völliger Unfug. ist jetzt auch klar, wenn ich da was reinschreibe ... weiß niemand wo das hingeschrieben wird.

                Mensch muß ich mich jetzt echt bei Dir bedanken! Das war ne schwere Geburt, wäre ich in noch ner Woche allein nicht drauf gekommen. Man sieht das einfach nicht wenn man es selbst gecoded hat.

                Danke nochmals.

                Gruß

                Manfred

                Comment


                • #23
                  Bitte :-).....
                  Christian

                  Comment

                  Working...
                  X