2010-10-13 22 views
24

tôi tiếp tục nhận được lỗi này: cannot convert parameter 1 from 'char' to 'LPCWSTR'không thể chuyển đổi thông số 1 từ 'char' thành '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"); 

ai đó có thể giúp đỡ?

Trả lời

6

Nó phải là

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

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

tôi không điều sử dụng phiên bản ANSI của CreateFile là đúng cách để đi, điều tiếp theo bạn biết và anh sẽ bắt đầu thay đổi tất cả các cuộc gọi hàm để sử dụng phiên bản ANSI. –

+1

@Nikola: Tất nhiên đó là cách sai! Tôi chỉ nghĩ rằng nó không thích hợp để giải thích sự khác biệt giữa char, wchat_t, TCHAR và cách viết các ứng dụng unicode chính xác cho người mới bắt đầu tuyệt đối. – ybungalobill

0

Tôi đoán bạn đang biên soạn với Unicode kích hoạt. Sau đó, với char argv[], argv là một mảng char, vì vậy argv[1]charCreateFile muốn tham số const wchar_t* làm thông số đầu tiên, không phải là char.

Điều đó nói rằng, định nghĩa main của bạn cũng bị hỏng, cần có char* argv[]. Với thay đổi đó, bạn có thể gọi CreateFileA.

102

Chuyển đến Thuộc tính cho Dự án của bạn và trong Thuộc tính cấu hình/Chung, thay đổi Tập ký tự thành "Không đặt". Bằng cách này, trình biên dịch sẽ không cho rằng bạn muốn các ký tự Unicode, được chọn theo mặc định:

alt text

4

Đây là chức năng chính mà Visual Studio tạo ra theo mặc định:

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

đâu _TCHAR được định nghĩa là char hoặc wchar_t phụ thuộc nếu _UNICODE được định nghĩa hay không. Điều tương tự cũng xảy ra với các hàm API. Tôi sẽ khuyên bạn chống lại bằng cách sử dụng CreateFileA rõ ràng. Thay đổi chính của bạn và sử dụng CreateFile.

1

Tùy thuộc vào cài đặt trình biên dịch của bạn cho CharacterSet, bạn có thể cần thực hiện chuyển đổi nhiều byte/widechar hoặc thay đổi Ký tự nếu bạn không quan tâm nó là gì.

Để chuyển đổi với MultiByteToWideChar, xem sau ...

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

Các vấn đề liên quan