2011-01-13 6 views
16

sự khác biệt từ những 2 chức năng ?:"APIENTRY _tWinMain" và "WINAPI WinMain" chênh lệch

int APIENTRY _tWinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 

int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPTSTR lpCmdLine, 
        int  nCmdShow) 
+0

nếu bạn đã xác định _UNICODE, sau đó ví dụ thứ hai sẽ lỗi vì LPTSTR sẽ là WSTR và không phù hợp với WinMain, cả WINAPI và APIENTRY được định nghĩa là __stdcall – Kaije

+0

Nhấp chuột phải vào _tWinMain -> chọn đi đến định nghĩa ... – Jimbo

+7

Khai báo WinMain() của bạn không chính xác, đối số thứ 3 là LPSTR. Cả hai đều là cổ xưa, bạn nên sử dụng wWinMain ngày hôm nay. –

Trả lời

41

_tWinMain chỉ là một shortcut #define trong tchar.h lên phiên bản thích hợp của WinMain.

Nếu _UNICODE được xác định, sau đó _tWinMain mở rộng thành wWinMain. Nếu không, _tWinMain cũng giống như WinMain.

vĩ mô liên quan trông giống như thế này (có thực sự là rất nhiều mã khác xen kẽ):

#ifdef _UNICODE 
#define _tWinMain wWinMain 
#else 
#define _tWinMain WinMain 
#endif 
+0

Đây là câu trả lời đúng! – Nawaz

1

Từ this link là gì:

_tWinMain thực sự không cần một thông số hPrevInstance, nhưng rằng tham số không được sử dụng.

_tWinMain chỉ là #define cho WinMain (trong TCHAR.h).

Không có sự khác biệt giữa hai.

_tWinMain được định nghĩa để WinMain nếu UNICODE không được định nghĩa, và để wWinMain nếu nó được. mục đích của nó là để cho phép bạn viết mã sẽ xây dựng cả dưới ansi và dưới unicode.

+2

Các bài đăng khác tiếp tục nằm trên cùng một trang mà bạn liên kết để đề xuất rằng chúng không giống hệt nhau. Sự khác biệt giữa hai tùy thuộc vào việc '_UNICODE' được xác định hay không. –

+0

@Cody Có, bắt tốt. – chrisaycock

16

Sự khác biệt là mã hóa các thông số, mà là hoàn toàn không cần thiết anyway. Chỉ cần vứt bỏ các thông số và thay vào đó sử dụng những điều sau đây, nơi bạn kiểm soát các mã hóa:

hInstance chỉ là GetModuleHandle(0)

hPrevInstance là không hợp lệ trong Win32 nào

lpCmdLine có sẵn trong cả hai ANSI và Unicode, qua GetCommandLineA()GetCommandLineW(), tương ứng

nCmdShow là tham số wShowWindow của cấu trúc STARTUPINFO. Một lần nữa, các biến thể ANSI và Unicode, được truy cập bằng cách sử dụng GetStartupInfoA(STARTUPINFOA*)GetStartupInfoW(STARTUPINFOW*).

Và bằng cách sử dụng API Win32 để truy cập, bạn có thể lưu một vài biến toàn cục, như biến mà bạn đã lưu cẩn thận xử lý cá thể mà bạn nghĩ chỉ khả dụng cho WinMain.

+0

Điều này sẽ có nhiều upvotes hơn ... – Kevin