使用Python ctypes访问visualfoxpro COM DLL

2024-09-30 01:27:48 发布

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

我正在尝试使用pythonctypes库来访问在visualfoxpro中创建的COM DLL中的各种函数(从一个.prg文件)。在

以下是foxpro中的一个示例(从实际代码中简化)

DEFINE CLASS Testing AS CUSTOM OLEPUBLIC

    PROCEDURE INIT
        ON ERROR
        SET CONSOLE OFF
        SET NOTIFY OFF
        SET SAFETY OFF
        SET TALK OFF
        SET NOTIFY OFF
    ENDPROC

    FUNCTION get_input_out(input AS STRING) AS STRING
        output = input
        RETURN output
    ENDFUNC

ENDDEFINE

在python中,我做的事情大致如下:

^{pr2}$

dll注册良好并已加载,但当我尝试调用函数时,我只得到以下信息。在

AttributeError: function 'get_input_out' not found

我可以验证dll是否工作正常,因为我可以使用COM库通过php脚本访问函数。在

我真的很想在python中实现这个功能,但是到目前为止,我的尝试都是徒劳的,ctypes甚至可以用VFP工作吗?如有任何建议,将不胜感激。在


Tags: 函数cominputoutputgetstringasnotify
2条回答

尝试从函数调用中删除括号。将print link.get_input_out("someinput")更改为print link.get_input_out "someinput"。在

对于使用OLEPUBLIC子句的vfpcom对象,应该使用pythonwin32扩展,而不是ctypes模块。pythonwin32扩展提供了一组功能齐全的组件,允许Python成为COM客户机,这正是您在本例中想要的。在

您的代码应该如下所示:

from win32com.client import Dispatch
oFox = Dispatch("com.testing")
# where the file name compiled by VFP is com.dll and the olepublic class is testing.
# in Windows this stuff is not case sensitive.
print oFox.get_input_out("something")
# to close things down..
oFox = None

如果您只想访问VFP表,Microsoft提供一个免费的ADO兼容组件vfpoledb,该组件可用于通过ADODB访问表,而该组件又可以通过Win32扩展中相同的Dispatch()功能进行访问。在

相关问题 更多 >

    热门问题