pywin32에는 두 개의 GetLogicalDrives API가 있으며, 하나는 win32api 모듈에, 다른 하나는 win32file에 있습니다. 둘 다의 묘사는 동일하게 보인다. 그들 사이에 어떤 차이가 있습니까? 그리고 몇몇 코드를 읽었을 때, 대부분의 사람들은 다른 것 대신 win32file.GetLogicalDrives를 사용하는 것 같습니다. 아무도 그 이유를 말해 줄 수 있습니까?pywin32의 2 GetLogicalDrives API가 동일합니까?
0
A
답변
1
기본적으로 같습니다. 두 사람 모두 kernel32!GetLogicalDrives
으로 전화합니다. Win32 파일 버전은 Py_BuildValue
을 호출하는 반면에 PyLong_FromLong
(Python 3)을 호출하여 결과를 직접 빌드하므로 win32api 버전은 조금 더 간단합니다. 둘 다 정수형 비트 마스크 만 반환하므로 둘 중 하나를 선호하는 본질적인 이유는 없습니다. 더 편리한 것을 사용하십시오. 예를 들어, win32api를 사용하는 경우 win32file을 가져 와서 win32file.GetLogicalDrives
을 호출하지 마십시오.
CDB 디버그 세션 :
win32api
>>> win32api.GetLogicalDrives()
Breakpoint 0 hit
kernel32!GetLogicalDrives:
00000000`772bae00 4883ec68 sub rsp,68h
0:000> k5
Child-SP RetAddr Call Site
00000000`0030f2d8 00000000`670a2735 kernel32!GetLogicalDrives
00000000`0030f2e0 00000000`5ffaf8bd win32api+0x2735
00000000`0030f310 00000000`6002385b python34!PyCFunction_Call+0x12d
00000000`0030f340 00000000`60025c89 python34!call_function+0x2ab
00000000`0030f3a0 00000000`6002770c python34!PyEval_EvalFrameEx+0x2279
0:000> bl
0 e 00000000`772bae00 0001 (0001) 0:**** kernel32!GetLogicalDrives
1 d 00000000`5ffa1450 0001 (0001) 0:**** python34!PyLong_FromLong
0:000> be1; g; bd1; k5
Breakpoint 1 hit
Child-SP RetAddr Call Site
00000000`0030f308 00000000`5ffaf8bd python34!PyLong_FromLong
00000000`0030f310 00000000`6002385b python34!PyCFunction_Call+0x12d
00000000`0030f340 00000000`60025c89 python34!call_function+0x2ab
00000000`0030f3a0 00000000`6002770c python34!PyEval_EvalFrameEx+0x2279
00000000`0030f4a0 00000000`60027aae python34!PyEval_EvalCodeEx+0x65c
win32api+0x2735
및 win32file+0xc855
죄송
>>> win32file.GetLogicalDrives()
Breakpoint 0 hit
kernel32!GetLogicalDrives:
00000000`772bae00 4883ec68 sub rsp,68h
0:000> k5
Child-SP RetAddr Call Site
00000000`0030f2d8 00000000`6704c855 kernel32!GetLogicalDrives
00000000`0030f2e0 00000000`5ffaf8bd win32file+0xc855
00000000`0030f310 00000000`6002385b python34!PyCFunction_Call+0x12d
00000000`0030f340 00000000`60025c89 python34!call_function+0x2ab
00000000`0030f3a0 00000000`6002770c python34!PyEval_EvalFrameEx+0x2279
0:000> be1; g; bd1; k5
Breakpoint 1 hit
Child-SP RetAddr Call Site
00000000`0030f298 00000000`60046184 python34!PyLong_FromLong
00000000`0030f2a0 00000000`600461f5 python34!va_build_value+0x64
00000000`0030f2e0 00000000`5ffaf8bd python34!Py_BuildValue+0x25
00000000`0030f310 00000000`6002385b python34!PyCFunction_Call+0x12d
00000000`0030f340 00000000`60025c89 python34!call_function+0x2ab
win32file. PyWin32에 대한 디버그 기호가 없습니다. 나는 pypiwin32에서 바퀴를 pip-installed했다.