带有可选依赖项的ctypes DLL
声明:我刚开始学习Windows编程,所以我的一些假设可能是错误的。如果有错请指正我。
我正在用ctypes为一个C语言的API开发一个Python的封装。这个API提供了64位和32位的DLL和LIB文件。我可以成功地用ctypes.WinDLL('TheLibName')加载这个DLL,并调用里面的函数等等。
但是,有些函数的表现并不如我所期待的。经过进一步调查,我发现是32位的DLL在被使用,这就是导致意外行为的原因。
我尝试用ctypes.WinDLL('TheLibName64')来加载64位的DLL,但系统提示找不到这个模块。我还尝试用注册工具regsrv32来注册这个DLL,但它报告说没有入口点(当我尝试注册TheLibName时也报告没有入口点,而这个DLL是可以通过WinDLL()找到的)。
这个DLL附带了一个在Visual Studio中的示例项目(我对VS完全没有经验,所以请再次指正我),这个项目可以构建32位和64位的版本。在.vcsproj文件中,64位版本的配置包括:
AdditionalDependencies="TheLibName64.lib"
在VCLinkerTool部分。
在windows/system32目录下,有TheLibName.dll/.lib和TheLibName64.dll/.lib。
所以我现在的问题似乎是要让Python的ctypes DLL加载器在加载DLL时加载这些可选的依赖项。但是我在ctypes的文档中找不到相关的信息(可能是因为我这个新手不知道正确的术语)。
在ctypes中有没有办法做到这一点?我是不是走错了方向?如果有人能提供关于可选DLL依赖项及其在Windows中如何加载的一般信息,我将非常感激。
谢谢
1 个回答
我在使用64位版本的Python时可以加载LibName64。早该早点试试这个了!