Vb6 通过SendMessage API访问MS树控件导致应用程序在Citrix Presentation Server客户端崩溃

Vb6 通过SendMessage API访问MS树控件导致应用程序在Citrix Presentation Server客户端崩溃,vb6,citrix,Vb6,Citrix,有没有人有这方面的经验 我有一个由第三方编写的应用程序,它使用SendMessage API调用来使用Visual Basic 6附带的树控件的扩展功能 这一切在桌面上和Windows2000Server上的Citrix 4下都可以正常工作(已经工作了3-4年)。在Windows 2003 Server上的当前设置Citrix 5下,它可以在控制台上正常工作,但在演示服务器客户端上工作;当SendMessage()调用与TVM_GETITEM或TVM_SETITEM消息一起使用时,整个应用程序崩

有没有人有这方面的经验

我有一个由第三方编写的应用程序,它使用SendMessage API调用来使用Visual Basic 6附带的树控件的扩展功能

这一切在桌面上和Windows2000Server上的Citrix 4下都可以正常工作(已经工作了3-4年)。在Windows 2003 Server上的当前设置Citrix 5下,它可以在控制台上正常工作,但在演示服务器客户端上工作;当SendMessage()调用与TVM_GETITEM或TVM_SETITEM消息一起使用时,整个应用程序崩溃,没有错误消息,没有日志条目,什么都没有

我已经在Citrix下构建了一个VB6开发环境,当您在Presentation Server客户机下逐步完成代码时,同样的事情也会发生在IDE中

我通常认为传递给SendMessage()调用的参数struct中会出现错误,但无论如何VB6都非常不稳定,所以我认为每次在Windows上都会失败。Citrix客户端下必须存在差异

我在谷歌、Citrix网站等网站上找不到任何关于这个问题的参考资料


感谢您的指点、想法、建议等。

通过以下方式限制
mask
,确保您仅检索
TVITEM
属性:

.mask = .mask And &H7F

。。。在调用
发送消息之前
。您不能在那里使用&FFFF或-1,因为TVM_GET/SETITEM在较新版本的通用控件中需要一个扩展的接收缓冲区。该结构的新版本被重命名为
TVITEMEX

我对Citrix/Presentation server一无所知,但您最后的选择可能是从VB5公共控件库(comctl32.ocx)尝试树状视图

(我之所以建议这样做,是因为VB6树视图(mscomctl.ocx)与“核心”win32 common controls treeview(comctl32.dll)无关——它是一个完全定制的实现,因此对treeview API的支持有限(例如不能设置前/后颜色),而VB5版本使用的是真实的