有没有"技巧"构建一个VB6 DLL,以便它可以被Python使用?

时间:2015-02-10 19:48:02

标签: python vb6

我有一个VB6程序。它是编译的(没有可构建的源代码),由.EXE和一些.DLL组成。

我创建了一个简单的Python脚本来调用库中的一些公共方法。不幸的是,Python中没有可用的方法,或者我没有正确地调用它们。

代码:

from ctypes import *

test = windll.LoadLibrary("C:/.../ComDlg32.ocx")

print test
print test.DLLGetDocumentation

输出:

<WinDLL 'C:/.../ComDlg32.ocx', handle 217a0000 at 23a3b10>
<_FuncPtr object at 0x023834E0>

Process finished with exit code 0

我对上面显示的结果没问题。它比我运行相同的代码并尝试使用我们自己的DLL之一给了我更多的信息。我认为Comdlg32.ocx是供应商提供的控制权。

当我使用一个毫无疑问存在于DLL中的方法对我们自己的DLL运行相同的代码时,我得到了这个:

Traceback (most recent call last):
<WinDLL 'C:/.../ABC123.exe', handle 5f0000 at 2373b30>
  File "C:/.../XYZ123.py", line 11, in <module>
    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是我在DLLGetDocumentation中找到OCX的方式。

还有什么我可以尝试在VB6 DLL中调用方法吗?是否需要使用特定的开关编译VB6项目,以便可以从Python调用公共方法?如何判断/验证VB6是否以不允许方法可调用的方式编译?

0 个答案:

没有答案