MS VC++ und Unicode

Folgendes Problem, ich nutze seit kurzem MS VC++ und verstehe das nicht ganz mit dem Unicode.
Code:
const char *winName = "Fenster"
FindWindow (NULL,winName)

Beim kompilieren kommt immer der Fehler das er den const char* nicht in ein LPCWSTR konvertieren kann.
Das ist wohl ein Problem mit dem Unicode, nun habe ich aber den Zeichensatz in den Projekteinstellungen auf "Multi Byte Zeichensatz" geändert.
Aber jetzt funktioniert meine Funktion nicht mehr o0
Es kommt zwar kein Fehler aber es klappt nicht, hier mal der ganze Code:

Code:
HANDLE OpenProcess ()
{
    const char *winName = "Fensername";	
    HANDLE winHandle = NULL;
    HWND window = NULL;
    DWORD procid;

    while ( true )
    {

          window = FindWindow( NULL , winName );

          if ( window == NULL ) {
               Sleep ( 900 );
			   std::cout << "not found." << std::endl;
               continue;
               }
          else {
               break;
               }
    }

    GetWindowThreadProcessId ( window , &procid );

    winHandle = OpenProcess ( PROCESS_ALL_ACCESS , false , procid );

    if (!winHandle) 
	{
		return 0; 
	}
    else 
	{
		return winHandle; 
	}
}

Mit einer anderen IDE klappt das ...

Ist der Unicode so richtig deaktiviert ?
Ist was an dem Quellcode falsch ?
 
Du kannst ja die std:string objekte verwenden. Umwandeln in einen LPCSTR muss man aber trotzdem:

Code:
LPCSTR winName;
std:string str("Fenstername");

/* convert string to LPSTR */
winName  = str.c_str();
Das funktioniert zumindest.

Was allerings die sauberste Lösing ist, und ob man unbedingt auf die std zugerifen sollte oder nicht, das ist mir auch nicht klar. Habe ja gerade eine Frage in ne ähnliche Richtung gestellt: C++ Von Typenumwandlungen und LPCSTRs
:)
 
Danke erstmal, aber ist es nicht am einfachsten den Unicode zu deaktivieren ?
In anderen IDE's habe ich damit keine Probleme :/
Das ganze mit den LPCSTR etc. verwirrt mich sowieso nur :x
 
Sehe ich auch so. Unicode sollte man im Hinblick auf die Zukunft schon behalten.

Du kannst anstatt
Code:
const char* blablubb = "hui";
einfach
Code:
const wchar_t* blablubb = "hui";
oder auch
Code:
const TCHAR* blablubb = "hui";
schreiben, dann sollte das ohne irgendwelche Herumumwandelei klappen.

Gruß,
Machine
 
um
Code:
const TCHAR* blablubb = "hui";
nutzen zu können was brauche ich denn dann für eine präprozessor direktive ?
Code:
#define _UNICODE
klappt nicht
 
hi

Um das nutzen zu können, brauchst du eigentlich keine Präprozessor Diirektive, sondern musst einfach ein 'L' vor den string setzen.

Hier ein kleines bsp, das ich vorhin mit VC++ 9.0 Express Edition gestestet habe.


Code:
#include <windows.h> 
#include <stdio.h> 
 int main() 
{
const TCHAR* blablubb = L"Unbenannt - Editor"; 

return((int)FindWindow(NULL,blablubb));
}


mfg
 
Zurück
Oben