gpt4 book ai didi

python - 在 Python.net 应用程序中安装自定义 IMessageFilter 时出现段错误

转载 作者:行者123 更新时间:2023-12-01 07:12:03 28 4
gpt4 key购买 nike

我正在尝试使用 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()

如果您按照所示方式运行此代码,则会显示应用程序窗口,但您会立即收到段错误(我认为这是第一条消息传递到过滤器时的情况)。段错误是完全不透明的。没有堆栈跟踪或其他有用的详细信息 - 它只是操作系统级别的段错误处理程序。

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

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

如果重命名或删除 PreFilterMessage() 方法,则会收到一条错误消息,指出 Python 对象没有 PreFilterMessage 方法。

关于我做错了什么和/或如何解决它有什么建议吗?或者如何获取更多可能指向段错误根源的调试信息?

最佳答案

这似乎是 Python.net 本身的一个错误,与编码(marshal) byref 参数的问题有关。详情可参见here .

关于python - 在 Python.net 应用程序中安装自定义 IMessageFilter 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157606/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com