Error: cannot convert 'char*' to 'WCHAR*'
Error: cannot convert 'char*' to 'WCHAR*'
Hi,
ich habe eine Datenerfassungskarte, welche ich mit Qt aufrufen möchte allerdings bekomme ich mehrere Fehler bei der compilierung:
CONTADC.cpp:83: error: cannot convert 'char*' to 'WCHAR*' for argument '1' to 'WCHAR* lstrcpynW(WCHAR*, const WCHAR*, int)'
CONTADC.cpp:84: error: cannot convert 'char*' to 'WCHAR*' for argument '1' to 'WCHAR* lstrcpynW(WCHAR*, const WCHAR*, int)'
CONTADC.cpp:88: error: cannot convert 'CHAR*' to 'TCHAR*' for argument '1' to 'ECODE olDaInitialize(TCHAR*, HDEV__**)'
Die Datei ist ein Beispiel von dem Hersteller, welches einwandfrei unter Microsoft Visual c++ 2010 funktioniert.
Den Code habe ich mal beigefügt.
Ich hoffe jemand kann mir helfen.
Gruß
Eggord
ich habe eine Datenerfassungskarte, welche ich mit Qt aufrufen möchte allerdings bekomme ich mehrere Fehler bei der compilierung:
CONTADC.cpp:83: error: cannot convert 'char*' to 'WCHAR*' for argument '1' to 'WCHAR* lstrcpynW(WCHAR*, const WCHAR*, int)'
CONTADC.cpp:84: error: cannot convert 'char*' to 'WCHAR*' for argument '1' to 'WCHAR* lstrcpynW(WCHAR*, const WCHAR*, int)'
CONTADC.cpp:88: error: cannot convert 'CHAR*' to 'TCHAR*' for argument '1' to 'ECODE olDaInitialize(TCHAR*, HDEV__**)'
Die Datei ist ein Beispiel von dem Hersteller, welches einwandfrei unter Microsoft Visual c++ 2010 funktioniert.
Den Code habe ich mal beigefügt.
Ich hoffe jemand kann mir helfen.
Gruß
Eggord
- Dateianhänge
-
- CONTADC.cpp
- (11.3 KiB) 145-mal heruntergeladen
-
- CONTADC.h
- (119 Bytes) 141-mal heruntergeladen
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Error: cannot convert 'char*' to 'WCHAR*'
Eigentlich sollte die Fehlermeldung doch eindeutig sein - die Funktion erwartet ein WCHAR* aber es wird nur ein char* übergeben. Da Qt mit dem Macro UNICODE übersetzt ist werden auch alle WinAPI-Funktionen in der unicode-Variante benutzt.
Das Beispiel ist also falsch bzw. nur richtig wenn UNICODE nicht definiert ist.
Zum Glück kann man auch die Ansi/Unicode - API direkt ansprechen: lstrcpynA() = Ansi - Version, lstrcpynW() = Unicode - Version
Das Beispiel ist also falsch bzw. nur richtig wenn UNICODE nicht definiert ist.
Zum Glück kann man auch die Ansi/Unicode - API direkt ansprechen: lstrcpynA() = Ansi - Version, lstrcpynW() = Unicode - Version
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Error: cannot convert 'char*' to 'WCHAR*'
Danke für die schnelle Antwort!
Ich verstehe die Fehlermeldung. allerdings weiß ich nicht wie ich sie vermeiden kann. Durch lstrcpynA() konnte ich 2 eliminieren aber die anderen sind immer noch da. Es sind meistens Funktionen vom Hersteller.
Kann ich Unicode irgendwie nicht definieren? Oder kann ich die Funktionen vom Hersteller auch so leicht in AnsiMode aufrufen?
Das beispiel ist nicht falsch es funkt ja unter MVC++
Ich verstehe die Fehlermeldung. allerdings weiß ich nicht wie ich sie vermeiden kann. Durch lstrcpynA() konnte ich 2 eliminieren aber die anderen sind immer noch da. Es sind meistens Funktionen vom Hersteller.
Kann ich Unicode irgendwie nicht definieren? Oder kann ich die Funktionen vom Hersteller auch so leicht in AnsiMode aufrufen?
Das beispiel ist nicht falsch es funkt ja unter MVC++
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Error: cannot convert 'char*' to 'WCHAR*'
Das Beispiel ist definitiv falsch sobald man mit UNICODE arbeitet was Qt (als modernes Framework) nunmal tut.
olDaInitialize() kenn ich nicht - wenn es eine Library-Funktion des Herstellers ist dann sollte man dort mal nachfragen was sie machen - wenn sie eine Funktion olDaInitialize(TCHAR*) anbieten dann sollten sie auch beide (nämlich die Ansi und die Unicode-Version) dieser Funktion bereitstellen und nicht nur die Ansi-Version.
olDaInitialize() kenn ich nicht - wenn es eine Library-Funktion des Herstellers ist dann sollte man dort mal nachfragen was sie machen - wenn sie eine Funktion olDaInitialize(TCHAR*) anbieten dann sollten sie auch beide (nämlich die Ansi und die Unicode-Version) dieser Funktion bereitstellen und nicht nur die Ansi-Version.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Error: cannot convert 'char*' to 'WCHAR*'
Ich dachte TCHAR kann beides sein Ansi und Unicode. naja egal ich werde da auf jeden Fall mal anrufen.
Aber gibt es nicht Qt Funktionen die ich einfach in den Funktionsaufruf reinschreibe um die Variable umzufromen?
MVC++ ist doch auch ein modernes Framwork: wieso funktioniert es da ohne Probleme? Wandelt das die Datentypen automatisch um?
Aber gibt es nicht Qt Funktionen die ich einfach in den Funktionsaufruf reinschreibe um die Variable umzufromen?
MVC++ ist doch auch ein modernes Framwork: wieso funktioniert es da ohne Probleme? Wandelt das die Datentypen automatisch um?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Error: cannot convert 'char*' to 'WCHAR*'
TCHAR ist entweder oder - wenn UNICODE definiert ist dann ist es ein WCHAR*, wenn nicht dann ist es ein char*.
Im Grunde kann man einen ASCII-String nach Unicode wandeln indem man Qt benutzt - aber m.E. ist das hier nicht wirklich korrekt.
Siehe QString::fromAscii() und QString::utf16()
Bei Default Visual Studio-Projekten ist UNICODE nicht definiert, deshalb geht es.
Im Grunde kann man einen ASCII-String nach Unicode wandeln indem man Qt benutzt - aber m.E. ist das hier nicht wirklich korrekt.
Siehe QString::fromAscii() und QString::utf16()
Bei Default Visual Studio-Projekten ist UNICODE nicht definiert, deshalb geht es.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Error: cannot convert 'char*' to 'WCHAR*'
Also ich habe jetzt die Dokumentation durchgearbeitet. Das Wort Unicode kommt kein einziges mal vor. Und scheint auch keine zwei Versionen der Funktionen zu geben für Unicode und ohne. Alles ist mit TCHAR definiert.
Deshalb habe ich beschlossen die erstmal "per Hand umzuformen". Ist natürlich wirklich hässlich alles so umzuschreiben aber es bleibt mir wohl nicht anderes übrig. Wenn ich das richtig verstehe muss ich erst utf16 und dann fromAscii anwenden
Dabei bekomme ich allerdings einen komischen Fehler
fromAscii akzeptiert er aber utf16 findet er nicht und sagt mir dann noch wo es zu finden ist
#include <QString> habe ich natürlich reingeschrieben.
Deshalb habe ich beschlossen die erstmal "per Hand umzuformen". Ist natürlich wirklich hässlich alles so umzuschreiben aber es bleibt mir wohl nicht anderes übrig. Wenn ich das richtig verstehe muss ich erst utf16 und dann fromAscii anwenden
Code: Alles auswählen
GetDriver( LPSTR lpszName, LPSTR lpszEntry, LPARAM lParam )
/*
this is a callback function of olDaEnumBoards, it gets the
strings of the Open Layers board and attempts to initialize
the board. If successful, enumeration is halted.
*/
{
LPBOARD lpboard = (LPBOARD)(LPVOID)lParam;
/* fill in board strings */
lstrcpynA(lpboard->name,lpszName,MAX_BOARD_NAME_LENGTH-1);
lstrcpynA(lpboard->entry,lpszEntry,MAX_BOARD_NAME_LENGTH-1);
/* try to open board */
Code: Alles auswählen
lpboard->status = olDaInitialize(QString::utf16(QString::fromAscii(lpszName)),&lpboard->hdrvr);[/color]Code: Alles auswählen
if (lpboard->hdrvr != NULL)
return FALSE; /* false to stop enumerating */
else
return TRUE; /* true to continue */
}Code: Alles auswählen
CONTADC.cpp:89: error: no matching function for call to 'QString::utf16(CHAR*&)'
c:\Qt\4.8.0\include\QtCore/../../src/corelib/tools/qstring.h:320: note: candidates are: const ushort* QString::utf16() const#include <QString> habe ich natürlich reingeschrieben.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Error: cannot convert 'char*' to 'WCHAR*'
QString::utf16() wandelt einen QString in einen UTF-16 (== WCHAR) um - nicht umgekehrt!
Code: Alles auswählen
char *cTest = "Blub";
QString test= QString::fromAscii(cTest );
WCHAR *wCharTest = (WCHAR*)(test.utf16())
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Error: cannot convert 'char*' to 'WCHAR*'
Ahh Danke Christian!!..dann sollte ich nochmal basics büffeln.
Ich habe jetzt Alles so umgeschrieben dass es keine "Variablen Fehler" mehr gibt: Hauptsächlich alle Variablen char in WCHAR umgewandelt oder die entsprechenden ANSI-Versionen von den Windows API (also einfach ein A hinten dran) aufgerufen!
Jetzt bekomme ich leider zwei neue Probs:
1.: Es steht eine min funktion in dem code, bei der mir Qt sagt, dass es die Funktion nicht kennt obwohl ich #include <algorithm> beigefügt habe und auch die min man Fkt. von windows.h umgangen habe (#define NOMINMAX)
das habe ich dann erstmalm umgangen indem ich nen fixwert reingeschrieben habe aber dann bekomme ich einen Haufen weitere Probleme:
2.:
und der Fehler halt bei allen Fkt. vom Herrsteller nur teilweiße mit anderen Zahlen(4; 12; 16; 20) am Ende der Fehlermeldung
Die Headre sollte ich eigentlich alle eingefügt haben:
Ich hoffe du kannst mir nochmal helfen
Ich habe jetzt Alles so umgeschrieben dass es keine "Variablen Fehler" mehr gibt: Hauptsächlich alle Variablen char in WCHAR umgewandelt oder die entsprechenden ANSI-Versionen von den Windows API (also einfach ein A hinten dran) aufgerufen!
Jetzt bekomme ich leider zwei neue Probs:
1.: Es steht eine min funktion in dem code, bei der mir Qt sagt, dass es die Funktion nicht kennt obwohl ich #include <algorithm> beigefügt habe und auch die min man Fkt. von windows.h umgangen habe (#define NOMINMAX)
das habe ich dann erstmalm umgangen indem ich nen fixwert reingeschrieben habe aber dann bekomme ich einen Haufen weitere Probleme:
2.:
Code: Alles auswählen
undefined reference to `olDaGetDASSInfo@8'und der Fehler halt bei allen Fkt. vom Herrsteller nur teilweiße mit anderen Zahlen(4; 12; 16; 20) am Ende der Fehlermeldung
Die Headre sollte ich eigentlich alle eingefügt haben:
Code: Alles auswählen
INCLUDEPATH += C:/Users/Eggord/Documents/Qt-Projekte/SDK/Include
LIBS += -L"C:/Users/Eggord/Documents/Qt-Projekte/SDK/Lib64"-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Error: cannot convert 'char*' to 'WCHAR*'
min() als Funktion gibt es nicht. Im std Namensraum gibt es eine min() - Funktion -> std::min()
Der Rest - wenn man nicht gegen die Library linkt dann wird er die Funktionen auch nicht finden können. Siehe Doku
Der Rest - wenn man nicht gegen die Library linkt dann wird er die Funktionen auch nicht finden können. Siehe Doku
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Error: cannot convert 'char*' to 'WCHAR*'
Ja habe die libs vergessen
damit sind alle Fehler von den Herstellerfkt. weg.
Allerdings bleiben zwei übrig, die irgenwie mit WinMain zu tun haben:
Habe auch schon im internet gesucht aber nichts dazu gefunden.
Code: Alles auswählen
INCLUDEPATH += c:/Users/Eggord/Documents/Qt-Projekte/SDK/Include
LIBS += -L"c:/Users/Eggord/Documents/Qt-Projekte/SDK/Lib" -loldaapi32 -lolmem32 -lgraph32Allerdings bleiben zwei übrig, die irgenwie mit WinMain zu tun haben:
Code: Alles auswählen
c:\Qt\4.8.0\lib/libqtmaind.a(qtmain_win.o): In function `WinMain@16':
C:\\iwmake\\build_mingw_opensource\\src\\winmain/qtmain_win.cpp:131: undefined reference to `qMain(int, char**)'
collect2: ld returned 1 exit statusRe: Error: cannot convert 'char*' to 'WCHAR*'
Liegt wohl daran, dass du jetzt kein Windows mehr programmierst, sondern C++. Der Einsprungpunkt ist eigentlich "int main(int, char**)", nicht "WinMain" o.Ä.
Ich hab aber kein Windows, drum kann ich das nicht ausprobieren. Da ihm die "qMain" fehlt, nehm ich aber stark an, dass der Fehler da zu suchen ist.
Ich hab aber kein Windows, drum kann ich das nicht ausprobieren. Da ihm die "qMain" fehlt, nehm ich aber stark an, dass der Fehler da zu suchen ist.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Error: cannot convert 'char*' to 'WCHAR*'
Es fehlt ganz einfach die main() - Funktion... - jetzt sind wir bei C Grundlagen angelangt 
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung