上一页 下一页

技巧和陷阱

注意事项

项目

详情

也可以看看

Visual Basic 5/6用户注意事项

Visual Basic 5/6用户应注意,Enterprise Architect界面的版本号以类似于下面的形式存储在VBP项目文件中:

参考= * \ G {64FB2BF4-9EFA-11D2-8307-C45586000000}#2.2#0#.. \ .. \ .. \ .. \ Program Files \ Sparx Systems \ EA \ EA.TLB #Enterprise Architect对象模型2.02

如果从一个版本的Enterprise Architect移动到另一个版本时遇到问题,请在文本编辑器中打开VBP文件并删除此行。然后在Visual Basic中打开项目并使用Project-References创建对Enterprise Architect对象模型的新引用。

加载项无法加载

从Enterprise Architect 7.0版开始,不再支持2004年之前创建的加载项。如果加载项订阅了Addn_Tmpl.tlb接口(2003样式),则加载失败。在这种情况下,请与加载项的供应商或作者联系并请求升级。

持有国家信息

加载项可以保存状态信息,这意味着数据可以存储在成员变量中以响应一个事件并在另一个事件中检索。这样做有一些危险:

  • Enterprise Architect Automation Objects不会自行更新,以响应用户活动,其他工作站上的活动,甚至同一自动化客户端中其他对象的操作; 在调用之间保留对这些对象的句柄可能导致第二个事件查询与Enterprise Architect的当前状态无关的对象
  • 关闭Enterprise Architect时,会要求所有加载项关闭; 如果有任何外部自动化客户端,Enterprise Architect必须保持活动状态,在这种情况下,将重新加载所有加载项,从而丢失所有数据
  • 如果加载项仍然保留对它的引用,则作为自动化客户端的Enterprise Architect不会关闭(释放Disconnect()事件中的所有引用可以避免此问题)

建议除非有特定原因,否则加载项应使用repository参数及其方法和属性来提供必要的数据。

企业架构师没有关闭

.NET特定问题

自动化检查对象的使用,并且在不再使用它们之前不允许销毁任何对象。

如自动化接口主题中所述,如果您的自动化控制器是使用.NET框架编写的,那么即使您释放了对它的所有引用,Enterprise Architect也不会关闭。要强制释放COM指针,请调用内存管理功能,如下所示:

      所以GC.Collect();

      GC.WaitForPendingFinalizers();

此外,由于自动化客户端连接到Enterprise Architect,后者创建了Add-Ins,而后者又重新连接到Enterprise Architect,因此可能会遇到陷入僵局的情况,即Enterprise Architect和Add-Ins不会放弃彼此并保持彼此活跃。加载项可能会保留到Enterprise Architect的挂钩,因为:

  • 它保留对Enterprise Architect对象的私有引用(请参阅前面的“保存状态信息”)或
  • 它是由.NET创建的,GC机制还没有发布它

避免死锁情况需要两个操作:

  • 自动化控制器必须在某个时刻调用Repository.CloseAddins()(可能在处理结束时)
  • 加载项必须在Disconnect()事件中释放对Enterprise Architect的所有引用; 有关详细信息,请参阅加载项事件主题

您的自动化客户端可能控制Enterprise Architect的运行实例,其中加载项未遵守上述规则。在这种情况下,您可以调用Repository.Exit()来终止Enterprise Architect。

在使用.NET框架开发外接程序时,必须在项目的属性中选择COM互操作性,以便将其识别为外接程序。

某些开发环境不会在创建时自动注册COM DLL。在Enterprise Architect识别加载项之前,您可能必须手动执行此操作。

您可以使用私有加载项密钥(按加载项部署的要求)来存储与加载项相关的配置信息。

自动化接口 保持状态信息 加载项事件

并发呼叫

在Enterprise Architect版本7.0中,如果加载项调用,Enterprise Architect可能会同时调用两个加载项方法:

  • 一个消息框
  • 模态对话框
  • VB DoEvents,.NET应用程序DoEvents或其他语言的等效项

在这种情况下,Enterprise Architect可以在第一次返回之前启动第二个Add-In方法(re-entrancy)。在7.0版中。和后续版本,Enterprise Architect无法进行此类并发调用。

如果正在开发加载项,请确保加载项用户正在运行Enterprise Architect 7.0版或更高版本,以避免任何并发方法调用的风险。