Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Halloechen

ich hab da ein Problem mit einem C-Programm das unter Windows funktioniert, jedoch unter Linux Probleme macht :

Das Programm ist dazu gedacht xml-Dateien zu erzeugen. Dazu werden einige Begriffe (ANSI- oder UTF8-Format) mit einer mysql-Datenbank(Daten in UTF8-Format) abgeglichen, daher die Notwendigkeit der Zeichenumwandlung.

Hier die Fehlermeldungen

diss_to_xml.cpp: In function `int main(int, char**)':

diss_to_xml.cpp:79: error: invalid conversion from `char*' to `unsigned char*'

diss_to_xml.cpp: In function `int fakultaet_aus_Mysql(char*, char*)':

diss_to_xml.cpp:112: error: `CP_UTF8' undeclared (first use this function)

diss_to_xml.cpp:112: error: (Each undeclared identifier is reported only once for each function it appears in.)

diss_to_xml.cpp:112: error: `WCHAR' undeclared (first use this function)

diss_to_xml.cpp:112: error: `MultiByteToWideChar' undeclared (first use this function)

diss_to_xml.cpp:113: error: `CP_ACP' undeclared (first use this function)

diss_to_xml.cpp:113: error: `WideCharToMultiByte' undeclared (first use this function)

diss_to_xml.cpp: In function `int fach_aus_Mysql(char*, char*, char*)':

diss_to_xml.cpp:147: error: `MultiByteToWideChar' undeclared (first use this function)

diss_to_xml.cpp:148: error: `WideCharToMultiByte' undeclared (first use this function)

und der entsprechende Soure-code :

/*#include <WINDOWS.H>

#include <winnls.h>*/ --> erstmal auskommentiert da es so viele Fehler erzeugt

#include <time.h>

#include <stdio.h>

#include <mysql/mysql.h>

#include <stdlib.h>

#include <string.h>

typedef struct

{

char * feld[18];

} DISS;

#include "diss_to_xml.h"

static char fakultaet_rohling[256];

static char fach_rohling[256];

static char character_set[8];

MYSQL *mConnection, mDB;

int CheckUTF8(unsigned char * buf)

{

strcpy(character_set,"ansi");

if (buf[0]!=0xef)

return(0);

if (buf[1]!=0xbb)

return(0);

if (buf[2]!=0xbf)

return(0);

strcpy(character_set,"utf8");

return(1);

}

int _chkstk()

{

return(0);

}

/* ************************************************** ******************* */

int main(int argc, char * argv[])

{

DISS feldname;

DISS diss;

char buf0[32000];

char buf[64000];

mysql_init(&mDB);

mConnection = mysql_real_connect(&mDB,"test","test","","test",0,0,0);

if (mConnection == NULL)

{

printf("Es konnte keine Verbindung zur Datenbank hergestellt werden: %s\n",mysql_error(&mDB));

return 1;

}

strcpy(fakultaet_rohling,"select ID ********************** by ID");

strcpy(fach_rohling,"select ID ******************** by ID");

fread(buf,1,3,stdin);

if (CheckUTF8(buf)==0)

{

fseek(stdin,0,0);

}

gets(buf0);

XmlDateiErzeugen(&feldname,buf0);

while (gets(buf)!=NULL)

{

XmlDateiErzeugen(&diss,buf);

PrintDiss(&feldname,&diss);

}

mysql_close(mConnection);

return(0);

} /* int main */

int fakultaet_aus_Mysql(char * text,char * ID_fakultaet)

{

MYSQL_RES *mysql_res;

MYSQL_ROW row;

char query_string[256];

char uni_text[512];

char ansi_text[512];

int zaehler;

if (strcmp(character_set,"utf8")==0)

{

MultiByteToWideChar(CP_UTF8, 0, text, -1, uni_text, sizeof(uni_text) / sizeof(WCHAR));

WideCharToMultiByte(CP_ACP, 0, uni_text, -1, ansi_text, sizeof(ansi_text), 0, 0);

sprintf(query_string,fakultaet_rohling,ansi_text);

}

else

sprintf(query_string,fakultaet_rohling,text);

mysql_query(&mDB,query_string);

mysql_res = mysql_store_result(&mDB);

zaehler = 0;

if (mysql_res!=NULL)

{

while ((row = mysql_fetch_row (mysql_res)) != NULL)

{

strcpy(ID_fakultaet,row[0]);

zaehler++;

}

}

if (zaehler!=1)

{

fprintf(stderr,"Fakultaet: %s nicht oder nicht eindeutig vorhanden (%d)\n",text,zaehler);

strcpy(ID_fakultaet,"0");

}

return(0);

}

int fach_aus_Mysql(char * text,char * ID_fakultaet,char * ID_fach)

{

MYSQL_RES *mysql_res;

MYSQL_ROW row;

char uni_text[512];

char ansi_text[512];

char query_string[256];

int zaehler;

if (strcmp(character_set,"utf8")==0)

{

MultiByteToWideChar(CP_UTF8, 0, text, -1, uni_text, sizeof(uni_text) / sizeof(WCHAR));

WideCharToMultiByte(CP_ACP, 0, uni_text, -1, ansi_text, sizeof(ansi_text), 0, 0);

sprintf(query_string,fach_rohling,ID_fakultaet,ans i_text);

}

else

sprintf(query_string,fach_rohling,ID_fakultaet,tex t);

mysql_query(&mDB,query_string);

mysql_res = mysql_store_result(&mDB);

zaehler = 0;

if (mysql_res!=NULL)

{

while ((row = mysql_fetch_row (mysql_res)) != NULL)

{

strcpy(ID_fach,row[0]);

zaehler++;

}

}

if (zaehler!=1)

{

fprintf(stderr,"Fach: %s nicht oder nicht eindeutig vorhanden (%d) Faultaet=%s\n",text,zaehler,ID_fakultaet);

strcpy(ID_fach,"0");

}

return(0);

}

wuerde mich ueber jeden hilfreichen Tip freuen.

Geschrieben

Rückst du den Code grundsätzlich nicht ein, oder ist das irgendwo unterwegs verloren gegangen?

diss_to_xml.cpp: In function `int main(int, char**)':

diss_to_xml.cpp:79: error: invalid conversion from `char*' to `unsigned char*'

Passt nicht zum Code. Zeile 79 ist nicht mehr in der main-Funktion. Welche Zeile soll das sein?

Übrigens: gets ist böse.

Geschrieben

zum ersten : die Einrückungen sind unterwegs irgenwo verloren gegangen.

zweitens :"Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung. --> o.k meinte, dass sich das Programm nicht mal ohne Fehler compilieren laesst.

Zum Anderen

hab mittlerweile gemerkt das (MultiByteToWideChar) ne reine Win32-Api Funktion ist.

Jedoch habe ich noch nicht die entsprechende Funktion unter Linux für g++ gefunden.

Also wer kennt ne Funktion die UTF-8 in UniCode in Ansi

bzw. UTF-8 direct in ANSI umwandelt ??? :confused:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...