c++ Library string Funktion

  • Hallo,
    ich habe eine c++ Library erstellt die so aussieht:

    Code
    //.h
    using namespace std;
    #define API_API extern "C" __declspec (dllexport)
    API_API string description_a(int);
    //.cpp
    API_API string description_a(int Input)
    {
        string Output = "Test";
        return Output;
    }

    Beim Abrufen der Funktion erhalte ich einen

    Code
    AccesViolationExeption (Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.)

    Warum ist das so?
    Hat es vllt. was mit dieser Warnung zu tun:

    Code
    warning C4190: 'description_a' hat C-Bindung angegeben, aber gibt UDT 'std::basic_string<_Elem,_Traits,_Ax>' zurück, was mit C inkompatibel ist

    MFG
    Dark

  • Tag, ich habe ein neuen Problem:
    Meine c++ Library hat int als Input eingestellt, aber das zugehörige Programm sendet einen String.
    Die Library verarbeitet den Input zum int und so wird z.b. der string "fame" zu "67271526".
    Ist es möglich diesen int wieder in einen String umzuwandeln ohne das ich den Inputtyp ändern muss?
    Falls jemand mein Begriff Input nicht versteht - Es ist das Argument mein starten einer Methode.

    Als alternative wär mir eine kleine Hilfestellung wie ich im Assemble (OllyDBG) einen Int wert in einen string umwandeln kann (in einem Beispel: (HEX)A8 0A 6B 00 zum string 7015080) ganz recht.

  • Zitat

    Meine c++ Library hat int als Input eingestellt, aber das zugehörige Programm sendet einen String.


    "Int als Input eingestellt"??
    "Programm sendet einen String"??
    Könntest du dich bitte deutlicher ausdrücken und ggf. etwas Code posten?
    Ich verstehe kein Wort.

  • Die externe Funktion der Library lautet so:
    "int buy_item(int Input);"
    Das Programm sendet aber keinen int Wert, sondern einen string Wert.

    Weiß jemand wie ich im Assemble einen int Wert in string Wert wandeln kann?

    MFG
    Dark

  • Und was sollte das bringen?
    Dann müsstest du ja die ganze Funktion umschreiben, dass sie auch mit diesem String arbeiten kann.

    Ich finde es etwas komisch ... Du hast eine Library und willst von ihr eine Funktion nutzen, willst ihr aber andere Parameter übergeben als sie vorsieht? Wieso übergibst du ihr nicht den Wert, den sie laut - sofern vorhanden - API verlangt?!

  • Wenn das ganz normale ascii werte sind(also der byte wert eines chars) kannst du aus z.b. 64 mit (char)64 wieder ein a machen

    Zitat von Steve Jobs

    Stay hungry - stay foolish.



  • Warum arbeitest du mit Assembler? Solange du keinen Microprozessor Programmierst nützt dir das ein Scheissdreck.

    Wenn das Programm dir einen String sendet und deine Funktion aber nur Int Werte an nimmt, dann kannst du theoretisch gesehen nicht anderes als einen Fehler bekommen.
    Ich frage mich grade wie du überhaupt diese Zahl da bekommen hast.
    Schreib halt noch eine Funktion die Strings annimmt und die dann mit "atoi()"(GNU C Library) das ganze in einen Integer umwandelt.

  • Zitat von *electriZer*;242486

    Warum arbeitest du mit Assembler? Solange du keinen Microprozessor Programmierst nützt dir das ein Scheissdreck.

    Wenn das Programm dir einen String sendet und deine Funktion aber nur Int Werte an nimmt, dann kannst du theoretisch gesehen nicht anderes als einen Fehler bekommen.
    Ich frage mich grade wie du überhaupt diese Zahl da bekommen hast.
    Schreib halt noch eine Funktion die Strings annimmt und die dann mit "atoi()"(GNU C Library) das ganze in einen Integer umwandelt.


    Wenn er einen String wie "fame" an eine Funktion übergeben möchte, die eine Zahl erwartet, bringt ihm atoi nichts ...
    Das liegt eher an einem gewaltigen Denkfehler seinerseits.

  • Zitat von Well

    Wenn er einen String wie "fame" an eine Funktion übergeben möchte, die eine Zahl erwartet, bringt ihm atoi nichts ...

    Zitat von mir

    Schreib halt noch eine Funktion die Strings annimmt und die dann mit "atoi()"(GNU C Library) das ganze in einen Integer umwandelt.

    ----
    Aber ja mit dem Denkfehler stimme ich dir zu.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!