source-highlight aus c aufrufen
-
hi,
ich würde gern source-highlight in meinem c-projekt verwenden. da ich jetzt nicht wegen einer lib alles durch einen c++ compiler jagen will, was evtl. auch nicht geht? hab ich mir überlegt, ich mach einfach von source-highlight eine c wrapper lib welche mir eine funktion anbietet, sollte doch möglich sein? den rest brauch ich eh nicht und wenn dann kompilier ich eben schnell die kleine wrapper lib neu.
probleme hab ich jetzt, da ich kein c++'ler bin mit der fehlerbehandlung. hab auch keine ahnung ob ich die richtigen klassen verwendet hab und wie man c++ librarys aus c aufruft... wär schön wenn da mal einer drüber schauen könnte, danke!
die funktion hätte ich gern 'exportiert' muß die in ein extern c gekapselt werden? denke nicht, ist ja c++ dabei, oder?
string_t *highlight(const char *type,const char *s,size_t len){ if(highlight_is_valid_type(type)){ try{ std::string str(s,len); std::istringstream input(str); std::ostringstream output; std::string lang(type); lang.append(".lang"); srchilite::SourceHighlight sourceHighlight("escaaa.outlang"); sourceHighlight.setDataDir("/usr/share/source-highlight"); sourceHighlight.setStyleCssFile("Hello2.css"); sourceHighlight.highlight(input,output,lang); output.put(0); return string_dup_char((char*)output.str().c_str(),output.str().size()); }catch(std::exception& e){} } return 0; }
-
exilcubaner schrieb:
hab auch keine ahnung ob ich die richtigen klassen verwendet hab
evtl. zur erklärung input ist normal ein istream und output ein ostream oder so. dadurch bekomm ich keine probleme, oder

-
exilcubaner schrieb:
die funktion hätte ich gern 'exportiert' muß die in ein extern c gekapselt werden? denke nicht, ist ja c++ dabei, oder?
so, das hätten wir schon mal...
The C++ compiler must know that f(int,char,float) is to be called by a C compiler using the extern "C" construct:
-
habt ihr euch jetzt in eueren fuchsbau verzogen? wie auch immer ich geh kurz schlafen, bin krank. wenn ich aufsteh, hat sich hoffentlich einer rausgetraut

-
Eine halbe Stunde und Du maulst schon rum...

-
Caligulaminus schrieb:
Eine halbe Stunde und Du maulst schon rum...

es sind inzwischen 2... aber wie dem auch sei, es klappt schon.
-
bump...
-
die offene frage ist, ob die funktion von c aus aufgerufen, bei einer geworfenen std::exception& e 0 zurückgibt

-
Ne, dann stürzt dein Programm vermutlich ab.
-
und wie geht es dann richtig?
-
so, jetzt hab ich ein anderes 'kosmetisches' problem
#!/bin/sh g++ -o libhighlight.o -c libhighlight.c ar rcs libhighlight.a libhighlight.o rm libhighlight.o gcc -o test test.c -L. -lhighlight -lsource-highlight && ./testgibt es eine möglichkeit, -lsource-highlight wegzulassen find ich iwie unschön? hab schon versucht, das mit in das archiv zu packen, hat aber nicht geklappt. wenn ich das nicht verlinke, bekomm ich eine serie von fehlern?
./libhighlight.a(libhighlight.o): In function `highlight': libhighlight.c:(.text+0x129): undefined reference to `std::allocator<char>::allocator()' libhighlight.c:(.text+0x149): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, unsigned ... libhighlight.c:(.text+0x15a): undefined reference to `std::allocator<char>::~allocator()' libhighlight.c:(.text+0x16e): undefined reference to `std::allocator<char>::~allocator()' ... ... ...
-
neuer tag neues glück...