2012-11-19 31 views
9

Tôi đã bắt đầu học Win32 API trong C. tôi thấy rằng các chức năng chính là một cái gì đó giống nhưgì WINAPI đứng cho

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow) { .. } 

nhưng tôi biết rằng một hàm trong C cũng giống như

[ReturnType] [FunctionName] (Args) { .. } 

Trong trường hợp này, kiểu trả về là int và tên hàm là WinMain. Vì vậy, WINAPI là gì và nó là cần thiết?

Cảm ơn bạn. :)

Trả lời

12

Nó chỉ định calling convention, đó là cách các đối số cho các hàm được đặt và quản lý trên ngăn xếp.

Bạn có thể kết hợp các quy ước gọi điện, giả sử bạn đang gọi một số mã bên ngoài, như API cửa sổ, miễn là mọi người ở cùng "trang" với kỳ vọng của họ.

Các cuộc gọi c điển hình được biên dịch bằng cách sử dụng những gì được gọi là cdecl. Trong cdecl người gọi dọn dẹp các đối số được đẩy lên ngăn xếp.

WINAPI, còn được gọi là "cuộc gọi chuẩn" có nghĩa là chức năng được gọi có trách nhiệm làm sạch chồng đối số của nó.

Trình biên dịch MS sẽ thêm tiền tố cho cuộc gọi cdecl với _, trong khi WINAPI dẫn đầu _ và nhận @ {BYTES-NEEDED} được thêm vào tên hàm khi nó mang tên hàm. Từ liên kết ở trên:

call  [email protected] ;WINAPI 
call  _someExample ;cdecl 
+0

+1 cho liên kết về quy ước gọi điện! –

3

Đó là "quy ước gọi", được định nghĩa là macro với #define và giải quyết thành __stdcall.

Read more on MSDN:

Cách tên được trang trí phụ thuộc vào ngôn ngữ và cách trình biên dịch được hướng dẫn để thực hiện các chức năng có sẵn, có nghĩa là, ước gọi. Quy ước gọi quy trình liên tiêu chuẩn cho Windows được sử dụng bởi các tệp DLL được gọi là quy ước WinAPI. Nó được định nghĩa trong các tệp tiêu đề của Windows dưới dạng WINAPI, lần lượt được xác định bằng cách sử dụng trình kê khai Win32 Win32 __stdcall.

+0

Tôi hiểu, cảm ơn bạn ạ. – Videron

-3

Win - Windows

API - Application Programming Interface

Windows Application Programming Interface

+0

Câu hỏi này đúng hơn là về quy ước gọi là 'WINAPI' hơn là về chính thuật ngữ đó. – TLama

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