在对话框上添加两次相同的ActiveX控件,导致意外行为

时间:2015-09-29 07:34:13

标签: c++ mfc activex

我开发了一个MFC ActiveX控件,它使用从Kepware OPC Server使用OPC Client检索的数据显示图形。 OPC客户端代码是ActiveX控件代码的一部分。 OPC客户端在与主控制线程分开的线程中启动。当MFC对话框中只有一个实例时,该控件很有效。但是,如果我在同一表单上添加它的另一个实例,则图表上的曲线会开始出现故障。从日志中我可以看到,最终从CWinApp派生的Control app类只被实例化一次。任何想法为什么搞砸了?是否在两个实例之间共享任何全局变量?我正在使用Visual Studio 2008。

1 个答案:

答案 0 :(得分:2)

如果您的ActiveX控件位于DLL中,则此DLL始终会加载到使用ActiveX控件的进程中。因此,即使您有多个控件,也只有一个CWinApp对象是正常的。

因此,您需要以某种方式设计对象,DLL中的全局数据不会影响控件实例中的行为或数据。

我想你有一些全局数据,由第一个控件使用。当创建另一个实例时,第二个实例将修改此全局数据,并且第一个实例显示错误的数据或行为异常。

必须在对象内找到并分配此类ActiveX的所有状态。