在 Python 3.2 中使用 MFC .dll 文件

Posted

技术标签:

【中文标题】在 Python 3.2 中使用 MFC .dll 文件【英文标题】:Using an MFC .dll file with Python 3.2 【发布时间】:2011-09-08 09:49:29 【问题描述】:

我目前正计划使用 Python 访问基于 MFC Dialog 的应用程序的 .dll 文件。我是 Python 新手,安装了最新版本的 Python,即 3.2。我也安装了 PythonWin,但不确定它是否有用。在ctypes 的帮助下,我已经了解了使用python 的基础知识。在我的 dll 文件中,我有两个函数:

double BoxArea(double L, double H, double W);

double BoxVolume(double L, double H, double W);

我已经使用 extern dllimport 命令在我的 mfc 对话框应用程序中访问这些。

extern "C" __declspec(dllexport)void BoxProperties(double Length, double Height,
                                    double Width, double& Area, double& Volume);

尝试使用另一个 mfc 程序访问时,一切正常。现在,我正在尝试使用 Python 访问这两个函数。谁能建议我该怎么做以及哪些命令可以直接让我访问它?

非常感谢。

【问题讨论】:

嗯,用 PyQt? MFC 已经过时了。您正在尝试做的事情非常奇特,可能无法工作或需要很长时间才能实施(因为您没有适当的绑定)。 我在网上查了一下,有人建议使用 PythonWin。我想知道那会不会有什么好处。在您看来,如果我需要将 MFC 函数与 Python 一起使用,我应该如何构建它,因为最终我需要能够使用这种脚本语言来与我的 .dll 对话,并且只更改 .dll 而不是整个应用程序。 我确实尝试过***.com/questions/252417/…,但没有这样的运气。 您能转向更好的 GUI 工具包吗? 您不需要在 DLL 启动时初始化 MFC 吗?这可能只是假设它被加载到 MFC 环境中。 【参考方案1】:

我认为this 应该让您对您正在尝试做的事情有所了解。希望这会有所帮助。

【讨论】:

这绝对看起来与我正在做的事情有关。感谢您的链接:) 链接无效。【参考方案2】:

MFC 不仅仅是一个库,它还是一个平台。这将取决于某些假设,例如在程序启动时进行正确的初始化,以及将定期调用 MFC 消息泵等。 Python 不会满足这些假设,使其正常工作是不切实际的。

可以对 DLL 进行编程,使其在内部使用 MFC,但完全独立,但我猜你的不是。见http://msdn.microsoft.com/en-us/library/30c674tx(v=vs.90).aspx

【讨论】:

能否请您给我推荐一个使上述程序工作的代码?我正在尝试,但仍然没有给出任何正确的结果:( @Emulator,确保您的 DLL 遵循我在链接中提供的指南。如果没有,那么您尝试做的事情将是不可能的。

以上是关于在 Python 3.2 中使用 MFC .dll 文件的主要内容,如果未能解决你的问题,请参考以下文章

在共享DLL中使用MFC与在静态库中使用MFC的区别

我的 MFC C++ .dll 的多线程

在共享DLL中使用MFC 和在静态库中使用MFC的区别

(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)

CRichEditCtrl 在使用 MFC 编写的共享 dll 中无法正常工作?

(转载)DLL动态链接库编程入门之五:MFC扩展DLL