Zugriffsverletzung bei statisch eingebundener DLL



  • Moin zusammen,

    ic hab folgendes Problem - naja eigentlich sind eher zwei, aber das eine ergab sich aus dem anderen.
    Ich habe mit BCB 5, auf XP eine dll erzeugt, die mehrere Formulare enthält. Diese dll lässt sich in einem anderen Programm unter XP ohne Probleme über #pragma link "actions.dll" einbinden. Läuft auch alles super. Wenn ich das Programm jedoch auf NT laufen lasse, dann kommt die Meldung, "Zugriffsverletzung bei Adresse <xy> im Modul 'actions.dll'. Schreiben von Adresse 060."

    Was mir noch aufgefallen ist, wenn ich die DLL im Debug-Modus kompiliere lässt sie sich ohne Probleme unter XP einbinden. Wenn ich sie allerding im Endgültig-Modus kompiliere, dann kommt wieder "Zugriffsverletzung..."

    Weiss jemand Rat dazu?

    p.s. hab grad rausgefunden, wenn ich die Codeoptimierung abschalte, lässt sich
    die DLL auch im "Endgültig"-Modus kompilieren...
    Gruss, Sven



  • Problem gefunden:

    der Fehler liegt nich am Einbinden der dll, sondern an einem Funktionsaufruf, der durchgeführt wird. Und zwar hab ich in der dll eine Funktion, der ich einen Zeiger auf ein TreeView übergebe, und diese Funktion füllt den TreeView aus. anscheinend kommts da zu Fehlern bei NT. Nur weshalb funzt das unter XP?

    Gruss, Sven

    extern "C" __declspec(dllexport) __stdcall void LoadActionTree(TTreeNodes* Items,TImageList* IList,TComponent* Owner)
    {
      TTreeNode *Node=NULL;
      TForm_Action_Tree* TreeForm=new TForm_Action_Tree(Owner);
      TIcon *Icon;
      for (int i=0;i<TreeForm->ImageList1->Count;i++)
      {
        TreeForm->ImageList1->GetIcon(i,Icon);
        IList->AddIcon(Icon);
      }
    
      Items->Clear();
      for (int i=0;i<TreeForm->TreeView1->Items->Count;i++)
      {
        if (TreeForm->TreeView1->Items->Item[i]->HasChildren)
        {
          Items->Add(Node,TreeForm->TreeView1->Items->Item[i]->Text);
          Node=Items->Item[i];
        }else Items->AddChild(Node,TreeForm->TreeView1->Items->Item[i]->Text);
        Items->Item[i]->ImageIndex=TreeForm->TreeView1->Items->Item[i]->ImageIndex;
        Items->Item[i]->SelectedIndex=Items->Item[i]->ImageIndex;
      }
    }
    

Anmelden zum Antworten