TestLinux
11-10-2005, 14:26
Hallo alle zusammen,
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);
}
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);
}