我有一个VB6程序。它是编译的(没有可构建的源代码),由一个.EXE和几个.dll组成。在
我创建了一个简单的Python脚本来调用库中的一些公共方法。不幸的是,Python中没有可用的方法,或者我没有正确地调用它们。在
代码:from ctypes import *
test = windll.LoadLibrary("C:/.../ComDlg32.ocx")
print test
print test.DLLGetDocumentation
输出:
^{pr2}$
我对上面显示的结果没问题。它比我运行相同的代码并尝试使用我们自己的dll时提供了更多的信息。我认为Comdlg32.ocx是供应商提供的控件。在
当我使用一个毫无疑问存在于DLL中的方法对我们自己的DLL运行相同的代码时,我得到的结果是:Traceback (most recent call last):
File "C:/.../XYZ123.py", line 11, in
print test.Init
File "C:\...\lib\ctypes\__init__.py", line 366, in __getattr__
func = self.__getitem__(name)
File "C:\...\lib\ctypes\__init__.py", line 371, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'Init' not found
Process finished with exit code 1
上面的结果来自EXE,但是DLL返回相同的结果,减去方法名。在
我尝试使用DUMPBIN和/exports选项。它没有向我展示任何公开的方法。DUMPBIN是我如何在OCX中找到{}。在
还有什么我可以尝试调用vb6dll中的方法吗?VB6项目是否需要使用特定的开关来编译,以便可以从Python调用公共方法?如何判断/验证VB6的编译方式是否超出了允许方法可调用的程度?在