有没有人有这方面的经验?
我有一个由第三方编写的应用程序,它使用SendMessage API调用来使用Visual Basic 6附带的Tree Control的扩展功能。
这一切在桌面上和Windows 2000 Server上的Citrix 4下运行良好(已经完成了3 - 4年)。在我们的Windows Server Server上的Citrix 5中,它可以在控制台上运行,但在Presentation Server Client中可以正常工作;当SendMessage()调用与TVM_GETITEM或TVM_SETITEM消息一起使用时,整个应用程序崩溃,没有错误消息没有日志条目,没有。
我已经在Citrix下构建了一个VB6开发环境,当你单步执行Presentation Server Client下的代码时,同样的事情也会出现在IDE中。
我通常会在传递给SendMessage()调用的参数struct中出现错误,但VB6无论如何都非常抽搐,所以我原以为每次都会在Windows上失败。 Citrix客户端必须有所不同。
我在Google,Citrix网站等上找不到任何关于此问题的引用。
任何指针,想法建议等都赞赏。
答案 0 :(得分:0)
通过以这种方式限制TVITEM
,确保您只检索mask
个属性:
.mask = .mask And &H7F
...在致电SendMessage
之前。你不能在那里拍打& FFFF或-1,因为TVM_GET / SETITEM期望在较新版本的公共控件中使用扩展接收缓冲区。新版本的结构重命名为TVITEMEX
。
答案 1 :(得分:0)
我对Citrix / Presentation服务器一无所知,但最后一个选项可能是从VB5公共控件库(comctl32.ocx)尝试树视图。
(我只是建议这个,因为VB6树视图(mscomctl.ocx)与“核心”win32公共控件树视图(comctl32.dll)无关 - 它是一个完全自定义的实现,因此对treeview API的支持有限(不能设置前/后颜色,例如),而VB5版本使用真实的东西。
答案 2 :(得分:0)
我们没有找到解决失败原因的方法。因此代码被移动并且使用了控件的本机功能。
似乎API方法是一种无意义的转移,因为树控制不仅仅是本地管理行为。
感谢您的评论&帮助