在Python.net应用程序中安装自定义IMessageFilter时出现SEGFULT
我试图在使用Python.net的Winforms应用程序中添加一个自定义的在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
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
参数有关。详情请参阅