MINGW (gcc)

Hat jemand erfahrung mit diesem Teil?

Grund: Ich habe eine DLL in C geschrieben, die mir RTF Text in Plain
Text umwandelt. Aber wenn ich die Funktion aufrufe bekomme ich ein
Result (richtiges!!!) aber dann ein Exception auf Speicherebene.

lg Marco

Hat jemand erfahrung mit diesem Teil?

Grund: Ich habe eine DLL in C geschrieben, die mir RTF Text in Plain
Text umwandelt. Aber wenn ich die Funktion aufrufe bekomme ich ein
Result (richtiges!!!) aber dann ein Exception auf Speicherebene.

Du meinst eine segmentation fault (aka "Zugriffsverletzung" o.a.?).

Dann hast Du wohl einen Programmierfehler.

Probier das mal auf einem System mit GCC zu uebersetzen mit
gcc -g und dann mit gdb aufzurufen! Dann findest Du's ruckzuck
(siehe unten).

Bye, Chris.

[chris(a)dell ~]$ cat fehler.c
int main() {

  char *bla;
  *bla = 'c';
}

[chris(a)dell ~]$ gcc -g fehler.c -o fehler

[chris(a)dell ~]$ gdb fehler
GNU gdb Red Hat Linux (6.3.0.0-1.21rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host
libthread_db library "/lib/libthread_db.so.1".

(gdb) run
Starting program: /home/chris/fehler
Reading symbols from shared object read from target memory...done.
Loaded system supplied DSO at 0x192000

Program received signal SIGSEGV, Segmentation fault.
0x08048367 in main () at fehler.c:4
4 *bla = 'c';
(gdb)

Hallo Chris,

ich glaube (zumindest hoffe ich das) nicht, denn wenn ich das ganze
statt als dll als ausführbare Datei erstelle oder eine ausführbare
Testversion, welche die DLL aufruft, erstellen lasse, funkt alles optimal.

jetzt schreibe ich den client in einer anderen sprache (pascal) da funkt
es nicht mehr.

lg Marco

Chris Mair schrieb:

Das Problem hat sich von allein gelöst.

Ich habe ein try except Block über den Auftruf gelegt.
Was wunderlich ist, ist dass ich auch nicht im Debug-Mode
die Exception sehe.

Das verstehe ich nicht.....

lg Marco

Chris Mair schrieb:

Das Problem hat sich von allein gelöst.

Ich habe ein try except Block über den Auftruf gelegt.
Was wunderlich ist, ist dass ich auch nicht im Debug-Mode
die Exception sehe.

Das verstehe ich nicht.....

Ein try except Block?
Im Client nehme ich an, sicher nicht in Deinem C Programm...

Anyway in C/C++ gibt es keine Speicherzugriffsueberpruefungen
at run time. Das kannst Du nicht durch eine Exception abfangen.
Das OS killt Dein Programm.

Bye, Chris.

ich verstehe leider immernoch nicht wer die Exception wirft.....

Die DLL anscheinen nicht, den ich gebe der Function (char *source, int
len, char *target) und die char* setze ich so groß wie der Text mit der
RTF Formatierung (Also mehr als genug). Somit gehört der Speicher der
aufrufenden procedure und es kann nicht passieren, dass beim Verlassen
der DLL Function irgend ein Pointer ins Nirvana zeigt.

Anyway... weiß ich immernoch nicht warum es jetzt funkt.

Marco

Chris Mair schrieb: