2010-10-13 19 views
24

Wciąż otrzymuję ten błąd: cannot convert parameter 1 from 'char' to 'LPCWSTR'nie można konwertować parametru 1 od 'char' do 'LPCWSTR'

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

    // open port for I/O 
    HANDLE h = CreateFile(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); 

    if(h == INVALID_HANDLE_VALUE) { 
     PrintError("E012_Failed to open port"); 

może ktoś pomóc?

Odpowiedz

6

Powinno być

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

I

HANDLE h = CreateFileA(argv[1],GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); 
+3

I NIE rzeczą przy użyciu wersji ANSI CreateFile jest właściwa droga, następną rzeczą, wiesz, a on zacząć zmiana wszystkich wywołań funkcji, aby korzystać z wersji ANSI. –

+1

@Nikola: Oczywiście, że to zła droga! Po prostu uważam, że nie należy wyjaśniać różnicy między char, wchat_t, TCHAR i jak pisać poprawne aplikacje Unicode do absolutnie początkujących. – ybungalobill

0

Chyba jesteś kompilacji z Unicode włączona. Następnie z char argv[], argv jest char tablicą, więc argv[1] jest char i CreateFile chce const wchar_t* jako pierwszy parametr, a nie char.

To powiedziawszy, twoja definicja main również jest zepsuta, powinna mieć char* argv[]. Po tej zmianie możesz zadzwonić pod numer CreateFileA.

102

Przejdź do Właściwości projektu i w obszarze Właściwości konfiguracji/Ogólne, zmień zestaw znaków na "Nie ustawiono". W ten sposób, kompilator nie będzie zakładać, że chcesz znaki Unicode, które są zaznaczone domyślnie:

alt text

4

to jest główną funkcją, że Visual Studio tworzy domyślnie:

int _tmain(int argc, _TCHAR* argv[]) 

Gdzie _TCHAR jest zdefiniowany jako char lub wchar_t w zależności, czy _UNICODE jest zdefiniowane, czy nie. To samo dzieje się z funkcjami API. Radziłbym ci, aby nie używać jawnego CreateFileA. Zmień główną i użyj CreateFile.

1

W zależności od ustawienia kompilatora dla CharacterSet, może być konieczne przeprowadzenie konwersji wielobajtowej/widechar, lub zmienić zestaw znaków, jeśli nie obchodzi go, co to jest.

Do konwersji z MultiByteToWideChar można znaleźć w następujących ...

http://www.codeguru.com/forum/showthread.php?t=231165

Powiązane problemy