WinApi 参数的层次
1 |
我以前一直对WinApi参数太多,使用困难颇有微词,但是仔细想想,直接使用Api编程的情况是非常少的。Api难用点,功能强点,好过好用但功能弱。 |
1 |
同时,仔细分析下Api的参数,能发现,它其实是很有设计原则的,我只归纳出以下: |
1 |
尽量使用单层参数,也是说,参数是简单数据类型,没有内嵌结构; |
1 |
尽量避免使用多层参数,也就是说,不得不使用结构传递参数的时候,结构里面尽量避免再内嵌其它结构。因此可以看到,一个参数很多的Api中,往往有好几个参数共同表达一个逻辑实体,而在面相对象中,这应该用一个对象来表达。 |
1 |
看看这个Api,很生动的一个例子: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
WINSOCK_API_LINKAGE INT WSAAPI GetAddrInfoExW( __in_opt PCWSTR pName, __in_opt PCWSTR pServiceName, __in DWORD dwNameSpace, __in_opt LPGUID lpNspId, __in_opt const ADDRINFOEXW *hints, __deref_out PADDRINFOEXW * ppResult, __in_opt struct timeval *timeout, __in_opt LPOVERLAPPED lpOverlapped, __in_opt LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, __out_opt LPHANDLE lpHandle ); |