[WinApi] GetOpenFileName macht Probleme

ed0x

Grünschnabel
Hallo,

Ich habe einen "Datei Öffnen Dialog" (Sample von MSDN) - der soweit auch funktioniert - aber es gibt ein Problem.

Der Code sieht so aus:

Code:
OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box. 

if (GetOpenFileName(&ofn)==TRUE) 
    hf = CreateFile(ofn.lpstrFile, 
                    GENERIC_READ,
                    0,
                    (LPSECURITY_ATTRIBUTES) NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    (HANDLE) NULL);

soweit so gut...nur Compiliren geht nicht.

Hier der Log:

1>------ Erstellen gestartet: Projekt: voktrain, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>voktrain.cpp
1>c:\users\ed0x\documents\visual studio 2008\projects\voktrain\voktrain\voktrain.cpp(162) : error C2440: '=': 'char [260]' kann nicht in 'LPWSTR' konvertiert werden
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>c:\users\ed0x\documents\visual studio 2008\projects\voktrain\voktrain\voktrain.cpp(167) : error C2440: '=': 'const char [20]' kann nicht in 'LPCWSTR' konvertiert werden
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>Das Buildprotokoll wurde unter "file://c:\Users\ed0x\Documents\Visual Studio 2008\Projects\voktrain\voktrain\Debug\BuildLog.htm" gespeichert.
1>voktrain - 2 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Das tolle ist, wenn ich das ganze mit MinGW compilire (mit Dev-c++) gehts.

Hab ich eine falsche einstellung?

PS:
Ich hab auch schon anstatt
char szFile[260];

PTSTR szFile[260];
probiert...

geht aber auch nicht.

Ich hoffe mir kann geholfen werden...

Achja..in sachen WinApi bin ich noch Neuling...damit hab ich nicht so viel erfahrung....
 
Hallo,

dein Projekt verwendet vermutlich den Unicode-Zeichensatz, allerdings verwendest du keine Unicode-Datentypen. Benutze wchar_t statt char und stelle Zeichenkettenkonstanten ein L voran oder ändere in den Projekteigenschaften den Zeichensatz auf Multi-Byte.

Grüße,
Matthias
 

ed0x

Grünschnabel
okay, ich hab jetzt

char szFile[210]; // buffer for file name

nach

WCHAR szFile[MAX_PATH]; // buffer for file name

geändert

und hab

if (GetOpenFileName(&ofn)==TRUE)
MessageBox(0, &szFile,"",MB_OK);

aber etz bekomm ich

error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'WCHAR (*)[260]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.