Hallo, ich habe folgendes Problem bei einem MS Visual Studio 2008 Projekt. Ich möchte eine Funtion aus einer LIB verwenden. Wenn ich nur die LIB in meinem Projekt linke - bekomme ich ein Lesezugriffsfehler beim Aufruf der Funktion. Linke ich jedoch den C-Code der Funktion (also das .c-File in welchem die Funktin definiert ist) direkt in mein Projekt, funktioniert die ganze Sache einwandfrei! Hat da viell. jemand ein Idee - wo da das Problem liegt ? Danke schonmal Gruss
verschiende compiler einstellungen von der lib und dem andere Projekt.
...das war auch mein erster Gedanke - und das wäre wohl auch nachvollziehbar. Aber daran liegt es wohl nicht - ich habe die Projekteinstellung verglichen. Es muss irgendwie am linken liegen...
Warum zeigst Du uns nicht mal die Fehlermeldung? Zu geheim? Geraten: Die Referenz auf Dein LIB-Projekt fehlt.
Hi, hier mal die Fehlermeldung vom VisualStudio. Unbehandelte Ausnahme bei 0x00410ace in fft.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00485fbc. Dieser Fehler kommt nicht wenn ich den C-Code der aufgerufenen Funktion direkt in mein Projekt linke. Es ist ja auch so - das der direkt gelinkte Code vorrang hat - vor der LIB.
wechsle mal in den ASM code und schau was da passiert. Was für Paramter hat die funkiontion? Hast du es mal mit einer ganz einfachen funktion getestet int test(int a ) { return a; };
...ich verwende auch andere Funktionen aus der gleichen LIB. Die laufen einwandfrei... An RTFM -> was meinst du mit " Die Referenz auf Dein LIB-Projekt fehlt." ?
Vergiß das mit der Referenz, es handelt sich ja tatsächlich um einen Laufzeitfehler, nicht um einen Fehler beim Linken. Da war ich etwas zu schnell. Bei solch "mystischem" Verhalten könnte ich mit noch Abhängigkeiten zw. globalen Datenelementen vorstellen, da die Init.-Reihenfolge undefiniert ist, können da häßliche - zufällige - Laufzeitfehler aufteten. Ist aber auch nur ins Blaue geraten.
Die Laufzeitfehler lassen sich problemlos mit dem Debugger lokalisieren - warum schrecken so viele Leute davor zurück, den zu benutzen?
Guten Morgen, ich kann mir nur nicht erklären - warum die Funktion bei anderen Projekten funktioniert - wenn sie nur über die LIB gelinkt ist (dies würde heißen - es liegt an meinen Projekteinstellungen) ?!?! Andererseits - funktioniert es ja wenn die Funktion direkt gelinkt ist (also nicht über die LIB) ! ! Ich habe soeben herausgefunden - das ich einen Header bzw. noch eine LIB gelinkt habe - welche als C++ komiliert sind -> linke ich diese nicht tritt kein Fehler auf ! ! ! Somit wissen wir wo der Fehler herkommt - wie kann ich das trotzdem unter einen Hut bringen ?
Ich kann nur nochmal auf meinen Beitrag von gerade eben verweisen. Nutze den Debugger. Der hilft. Ansonsten solltest Du auch mal allmählich etwas mehr über Deine Projekteinstellungen verraten - ist das ein C-Projekt, oder ist das ein C++-Projekt? In was für einer Datei ist main() bzw. winmain() zu finden? Und was ist das für eine Library, wie ist die übersetzt?
Das mit dem C++ gedöns lässt sich nicht reproduzieren. Also zu den Projekteinstellungen: - es ist ein C-Projekt - wird als __cdecl (/Gd) (C-code kompiliert) - es werden keine libs ignoriert bzw. speziell gelinkt was könnte noch ein Anhaltspunkt sein ?
was sehe ich denn beim debuggen - woraus ich auf einen Fehler schließen kann - beim debuggen tritt der Fehler genauso auf (beim Einsprung in die Funktion)! !
max .. schrieb: > was sehe ich denn beim debuggen Den Stack, ob sich irgendwelche Variablen im Umfeld verändert haben, etc. Und Du siehst, exakt wo in der Funktion aus der Library was schiefgeht. Und wenn Du von Deinem Projekt einen Debug-Build machst, kannst Du erweiterte Prüfoptionen aktivieren, Code zum Stacktest beispielsweise, Code, der überprüft, ob der Heap korrumpiert wird etc.
"Disassembly"- Mode sehe ich genau die Stelle der Funktion - wo der Fehler passiert. Die Funktion heißt "MESS_Write_CSV" (schreibt eine CSV-Datei) MES_Write_CSV("CSV.csv", ";", "%f", &Status, 1, "Values", &MessArray); 00429AAB lea eax,[ebp-11ACh] 00429AB1 push eax 00429AB2 push offset string "Values" (47300Ch) 00429AB7 push 1 00429AB9 lea ecx,[ebp-0BCh] 00429ABF push ecx 00429AC0 push offset string "%f" (473008h) 00429AC5 push offset string ";" (473004h) 00429ACA push offset string "CSV.csv" (472FF8h) 00429ACF call @ILT+1410(_MES_Write_CSV) (426587h) // hier krachts 00429AD4 add esp,1Ch ...sehe ich das richtig - genau da wo auf die Funktion im Speicher zugegriffen werden soll - geh was schief ?!
Also - das Problem ist gelöst. Warum es jetzt funktioniert und vorher nicht ist mir allerdings nicht klar! Ich habe alle LIBs einfach "schrittweise" neu in das Projekt gelinkt - d.h. die LIBs entfernt - die dazugehörigen Funktionen auskommentiert, kompiliert und dann schrittweise die zugehörigen LIBs zu den Funktionen wieder dazu gelinkt, einkommentiert und kompliliert - jetzt sieht mein Projekt so aus wie vorher - läuft aber super !?!? :) Aber trotzdem danke an die vieln Tipps :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.