在Python.net应用程序中安装自定义IMessageFilter时出现SEGFULT

在Python.net应用程序中安装自定义IMessageFilter时出现SEGFULT,python,winforms,python.net,Python,Winforms,Python.net,我试图在使用Python.net的Winforms应用程序中添加一个自定义的IMessageFilter,但遇到了一个错误 下面是一个简单的示例应用程序: import clr clr.AddReference("System.Windows.Forms") import System.Windows.Forms as WinForms class MessageFilter(WinForms.IMessageFilter): __namespace__ = 'System.Wind

我试图在使用Python.net的Winforms应用程序中添加一个自定义的
IMessageFilter
,但遇到了一个错误

下面是一个简单的示例应用程序:

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()

如果按显示的方式运行此代码,则会显示应用程序窗口,但会立即收到SEGFULT(我假定这是在第一条消息传递到筛选器时)。断层完全不透明。没有堆栈跟踪或其他有用的详细信息-它只是操作系统级别的segfault处理程序

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

如果修改
MessageFilter
,使其不会子类化
Winforms.IMessageFilter
,则会出现一个错误,说明没有与给定参数匹配的
AddMessageFilter
方法

如果重命名或删除
PreFilterMessage()
方法,则会出现一个错误,即Python对象没有
PreFilterMessage
方法


有没有关于我做错了什么和/或如何修复的建议?或者如何获取更多可能指向segfault源的调试信息?

这似乎是Python.net本身的一个缺陷,与封送
byref
参数有关。详情请参阅