首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python.net应用程序中安装自定义IMessageFilter时出现段故障

在Python.net应用程序中安装自定义IMessageFilter时出现段故障
EN

Stack Overflow用户
提问于 2019-09-30 01:31:21
回答 1查看 104关注 0票数 1

我正在尝试使用Python.net在Winforms应用程序中添加一个自定义IMessageFilter,但我得到了一个段错误。

下面是一个最小的示例应用程序:

代码语言:javascript
复制
import clr
clr.AddReference("System.Windows.Forms")
import System.Windows.Forms as WinForms


class MessageFilter(WinForms.IMessageFilter):
    __namespace__ = 'System.Windows.Forms'

    def PreFilterMessage(self, message):
        print('filter', message)
        return False


class HelloApp(WinForms.Form):
    def __init__(self):
        self.textbox = WinForms.TextBox()
        self.textbox.Text = "Hello World"
        self.Controls.Add(self.textbox)


def main():
    form = HelloApp()
    app = WinForms.Application
    f = MessageFilter()
    app.AddMessageFilter(f)
    app.Run(form)


if __name__ == '__main__':
    main()

如果您按所示方式运行此代码,应用程序窗口将会显示,但您会立即得到一个段错误(我假设这是将第一条消息传递给过滤器的时候)。段故障是完全不透明的。没有堆栈跟踪或其他有用的细节-它只是操作系统级别的段错误处理程序。

如果注释掉第25行(app.AddMessageFilter(f),安装实际的过滤器),代码就能正常工作。

如果修改MessageFilter,使其不是Winforms.IMessageFilter的子类,您会得到一个错误,指出没有与给定参数匹配的AddMessageFilter方法。

如果重命名或删除PreFilterMessage()方法,您会得到一个错误,指出Python对象没有PreFilterMessage方法。

对我做错了什么,以及/或者如何修复它有什么建议吗?或者如何获得更多的调试信息,以指向Segfault源?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-03 08:11:07

这似乎是Python.net本身的一个错误,与编组byref参数的问题有关。详情可以在here上找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58157606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档