Visual Studio - Linken von C-Code

OP #2404239
Lesenswert?
• ▲
▼
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
OP #2404381
Lesenswert?
• ▲
▼
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.
Gast #2405116
Lesenswert?
• ▲
▼
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.
OP #2405382
Lesenswert?
• ▲
▼
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 ?
Persönliche Seite #2405388
Lesenswert?
• ▲
▼
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?
Persönliche Seite #2405516
Lesenswert?
• ▲
▼
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.
OP #2405641
Lesenswert?
• ▲
▼
"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 ?!
OP #2405837
Lesenswert?
• ▲
▼
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 :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren