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:
en dit in de dll:
het object wat beschreven is in ExternalInterface.h ziet er ongeveer zo uit:
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!
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!