Dll access violation

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • prometheus345479
  • Registratie: Mei 2005
  • Laatst online: 12-10-2022
Hoi,

ik ben bezig met het maken van een dll die wordt aangeroepen vanuit een executable. Maar zodra de exe mij dll functie aanroept, krijg ik:
0xC0000005: Access violation reading location 0xfdfdfdfd

Ik heb het idee dat het probleem zit bij het doorgeven van een object naar de dll.

ik heb het volgende in mijn executable:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "ExternalInterface.h"

extern "C" __declspec(dllimport) int Process(ExternalInterface* EIS);

//blablabla

int main()
{
   int state;
   ExternalInterface* EIS; 
 
//blablabla
   EIS = new ExternalInterface;

   state = Process(EIS);

}


en dit in de dll:

C++:
1
2
3
4
5
6
7
8
9
10
#include "ExternalInterface.h" //zelfde file als in de executable

extern "C" __declspec(dllexport) int Process(ExternalInterface* EIS);

int Process(ExternalInterface* EIS)
{
   //van alles en nog wat

   return 0;
}


het object wat beschreven is in ExternalInterface.h ziet er ongeveer zo uit:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ExternalInterface {

    public:
    /* general mine settings */
    int    init;  
    string fileName;  
    float  time_inc;  
    vector<float> aSPL;

   //en meer van hetzelfde

  /* constructor */
  ExternalInterface() 
    {
        init = -1;
        fileName = "";
        time_inc = 0;
        
        aSPL.assign(1,0);
    };



ik heb al gevonden dat er mogelijk problemen kunnen zijn met het alloceren van geheugen buiten een dll, en de-alloceren binnen de dll, maar dat gebuerd hier niet. Het object wordt eigenlijk alleen in de dll uitgelezen, en vertaald naar dingen die in de dll nodig zijn. Heeft iemand een idee waar ik het probleem zou kunnen zoeken?

Ik krijg in de debugger al een access violation bij het binnenkomen van de dll.

Als ik hetzelfde probeer met een simpele int functie in de dll te zetten, dan is dit geen enkel probleem, en werkt alles...

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 22:05
Dat 0xfdfdfdfd getal is een zogenaamde 'guard'. Microsoft Visual C++ initialiseert ongebruikt heapgeheugen naar deze waarde.

Van Wikipedia:
Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before and after allocated heap memory.
Oftewel: check je pointers en check of ze nog naar geheugen wijzen wat in gebruik is. :)

[ Voor 8% gewijzigd door Jaap-Jan op 31-12-2010 16:11 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett