pywin32中的2个GetLogicalDrive API是否相同?

2024-10-02 12:27:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现在pywin32中有两个GetLogicalDrives api,一个在win32api模块中,另一个在win32file中。两者的描述似乎是一样的。他们之间有什么区别吗?我读了一些代码,似乎大多数人都用win32文件.GetLogicalDrive而不是另一个。谁能告诉我原因吗?在


Tags: 模块文件代码api原因win32pywin32区别
1条回答
网友
1楼 · 发布于 2024-10-02 12:27:11

它们基本上是一样的。它们都调用kernel32!GetLogicalDrives。win32api版本比较简单,因为它直接通过调用PyLong_FromLong(python3)来构建结果,而win32file版本调用Py_BuildValue。它们都只返回整数位掩码,因此没有内在的理由选择其中一个。用比较方便的那个。例如,如果您使用的是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

win32file

^{pr2}$

关于win32api+0x2735win32file+0xc855的事很抱歉。我没有PyWin32的调试符号。我从pypiwin32安装了轮子。在

相关问题 更多 >

    热门问题