C# 在WinForms中宿主具有多个接口的ActiveX控件
我必须在WinForms应用程序中使用第三方ActiveX控件。问题是,运行我的应用程序的计算机可能有任何版本的控件。第一个版本有IControl1接口,该库的后续版本有IControl2、IControl3等,直至IControl6接口 我遇到的问题是,如果我在Visual Studio中使用最新版本的控件并将其放置在窗体上,Visual Studio会为所有类生成完整的类信息,但是,在运行时,如果计算机具有较旧版本的控件,则我的应用程序会引发运行时异常。另一方面,如果我在VisualStudio中添加最早的版本,那么它会一直工作,但是,它不会为以后的版本生成接口信息。在某些情况下是需要的C# 在WinForms中宿主具有多个接口的ActiveX控件,c#,.net,winforms,activex,C#,.net,Winforms,Activex,我必须在WinForms应用程序中使用第三方ActiveX控件。问题是,运行我的应用程序的计算机可能有任何版本的控件。第一个版本有IControl1接口,该库的后续版本有IControl2、IControl3等,直至IControl6接口 我遇到的问题是,如果我在Visual Studio中使用最新版本的控件并将其放置在窗体上,Visual Studio会为所有类生成完整的类信息,但是,在运行时,如果计算机具有较旧版本的控件,则我的应用程序会引发运行时异常。另一方面,如果我在VisualStud
如果计算机只有第一个版本,如何生成最新版本的接口信息(typelibrary),同时仍能使程序工作?我不想为每个版本生成一个typelibrary,因为这会增加应用程序的大小并造成太多的复杂性。通常使用ActiveX的应用程序也会部署它。即使某个特定版本与其他版本并行,您也能够部署它吗?至于typelibrary,您可能会发现它嵌入在.ocx中,或者它旁边是一个独立的.tlb文件,因此不需要生成。不幸的是,由于许可问题,我们无法重新分发控件,我们必须使用已安装的控件。如果没有安装,那么我们只向用户显示一条错误消息。确定。您也许可以从progid/classid(枚举注册表之后)动态地实例化一个(因为在设计时您不知道有什么)。然后您可以查询
IControl1
<代码>IControlxx或使用动态
您希望目标控件的最低版本是什么?换句话说,您是否需要访问某些功能?e、 g.IControl2
否则,您可以在代码中的任何地方引用IControl1
,无论安装了哪个控件,都可以使用。您所需要做的就是动态实例化已安装的版本。我希望的最低目标是IControl2,但是,如果存在更高版本,我希望在UI中启用某些功能。如何动态实例化控件?我需要类型库吗?通常使用ActiveX的应用程序也会部署它。即使某个特定版本与其他版本并行,您也能够部署它吗?至于typelibrary,您可能会发现它嵌入在.ocx中,或者它旁边是一个独立的.tlb文件,因此不需要生成。不幸的是,由于许可问题,我们无法重新分发控件,我们必须使用已安装的控件。如果没有安装,那么我们只向用户显示一条错误消息。确定。您也许可以从progid/classid(枚举注册表之后)动态地实例化一个(因为在设计时您不知道有什么)。然后您可以查询IControl1
<代码>IControlxx或使用动态
您希望目标控件的最低版本是什么?换句话说,您是否需要访问某些功能?e、 g.IControl2
否则,您可以在代码中的任何地方引用IControl1
,无论安装了哪个控件,都可以使用。您所需要做的就是动态实例化已安装的版本。我希望的最低目标是IControl2,但是,如果存在更高版本,我希望在UI中启用某些功能。如何动态实例化控件?我需要一个打字库吗?