使用 Python ctypes 访问 Visual Foxpro COM DLL
Posted
技术标签:
【中文标题】使用 Python ctypes 访问 Visual Foxpro COM DLL【英文标题】:Using Python ctypes to access a Visual Foxpro COM DLL 【发布时间】:2012-07-23 12:35:22 【问题描述】:我正在尝试使用 python ctypes 库来访问在 Visual Fox Pro 中创建的 COM DLL 中的各种函数(来自 .prg 文件)。
这里是fox pro中的一个例子(根据实际代码简化)
将 CLASS 测试定义为 CUSTOM OLEPUBLIC 程序初始化 开启错误 关闭控制台 设置通知关闭 设置安全关闭 关闭通话 设置通知关闭 ENDPROC FUNCTION get_input_out(输入为字符串)为字符串 输出 = 输入 返回输出 结束函数 结束定义在 python 中,我正在做一些事情:
导入 ctypes 链接 = ctypes.WinDLL("path\to\com.dll") 打印链接.get_input_out("someinput")dll 注册良好并已加载,但当我尝试调用该函数时,我只得到以下信息。
AttributeError:找不到函数“get_input_out”我可以验证 dll 是否可以正常工作,因为我可以使用 COM 库通过 php 脚本访问这些函数。
我真的很想在 python 中使用它,但到目前为止我的尝试都是徒劳的,ctypes 甚至可以与 VFP 一起使用吗?任何建议将不胜感激。
【问题讨论】:
【参考方案1】:对于使用 OLEPUBLIC 子句的 VFP COM 对象,您应该使用 python Win32 扩展,而不是 ctypes
模块。 Python Win32 扩展提供了一套功能齐全的组件,允许 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()
功能进行访问扩展。
【讨论】:
【参考方案2】:尝试从对函数的调用中删除括号。将print link.get_input_out("someinput")
更改为print link.get_input_out "someinput"
。
【讨论】:
嗨,我试了一下,但不幸的是 python 认为这个 SyntaxError: invalid syntax。我不认为我最初的错误与函数变量有关,而是首先找到要调用的函数。感谢您提供!以上是关于使用 Python ctypes 访问 Visual Foxpro COM DLL的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:python:未定义符号:使用 ctypes 从 Python 访问 C++ 函数时
python 和 ctypes 访问具有嵌套结构的 c++ 类
WindowsError 异常访问冲突 - 在简单的 python c++ ctypes 接口中