在导致意外行为的对话框中两次添加相同的 ActiveX 控件
Adding Same ActiveX control twice on a dialog causing unexpected behaviour
我开发了一个 MFC ActiveX 控件,它使用 OPC 客户端使用从 Kepware OPC 服务器检索的数据显示图形。 OPC 客户端代码是 ActiveX 控件代码的一部分。 OPC 客户端在与主控制线程不同的线程中启动。当 MFC 对话框中只有一个控件实例时,该控件运行良好。但是,如果我在同一表格上添加它的另一个实例,图表上的曲线就会开始出现故障。从日志中我可以看到,最终派生自 CWinApp 的 Control app class 只被实例化了一次。任何想法为什么会搞砸?两个实例之间是否共享任何全局变量?我正在使用 Visual Studio 2008.
如果您的 ActiveX 控件位于 DLL 内,则此 DLL 总是加载一次到使用 ActiveX 控件的进程中。所以即使你有多个控件,你只有一个CWinApp对象也是正常的。
因此您需要以某种方式设计您的对象,使 DLL 中的全局数据不会影响控件实例中的行为或数据。
我想您有一些全局数据,供第一个控件使用。当创建另一个实例时,此全局数据由第二个实例修改,第一个实例显示错误数据或行为不当。
此类 ActiveX 的所有状态都必须在对象内部定位和分配。
我开发了一个 MFC ActiveX 控件,它使用 OPC 客户端使用从 Kepware OPC 服务器检索的数据显示图形。 OPC 客户端代码是 ActiveX 控件代码的一部分。 OPC 客户端在与主控制线程不同的线程中启动。当 MFC 对话框中只有一个控件实例时,该控件运行良好。但是,如果我在同一表格上添加它的另一个实例,图表上的曲线就会开始出现故障。从日志中我可以看到,最终派生自 CWinApp 的 Control app class 只被实例化了一次。任何想法为什么会搞砸?两个实例之间是否共享任何全局变量?我正在使用 Visual Studio 2008.
如果您的 ActiveX 控件位于 DLL 内,则此 DLL 总是加载一次到使用 ActiveX 控件的进程中。所以即使你有多个控件,你只有一个CWinApp对象也是正常的。
因此您需要以某种方式设计您的对象,使 DLL 中的全局数据不会影响控件实例中的行为或数据。
我想您有一些全局数据,供第一个控件使用。当创建另一个实例时,此全局数据由第二个实例修改,第一个实例显示错误数据或行为不当。
此类 ActiveX 的所有状态都必须在对象内部定位和分配。