Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WinForms中宿主具有多个接口的ActiveX控件_C#_.net_Winforms_Activex - Fatal编程技术网

C# 在WinForms中宿主具有多个接口的ActiveX控件

C# 在WinForms中宿主具有多个接口的ActiveX控件,c#,.net,winforms,activex,C#,.net,Winforms,Activex,我必须在WinForms应用程序中使用第三方ActiveX控件。问题是,运行我的应用程序的计算机可能有任何版本的控件。第一个版本有IControl1接口,该库的后续版本有IControl2、IControl3等,直至IControl6接口 我遇到的问题是,如果我在Visual Studio中使用最新版本的控件并将其放置在窗体上,Visual Studio会为所有类生成完整的类信息,但是,在运行时,如果计算机具有较旧版本的控件,则我的应用程序会引发运行时异常。另一方面,如果我在VisualStud

我必须在WinForms应用程序中使用第三方ActiveX控件。问题是,运行我的应用程序的计算机可能有任何版本的控件。第一个版本有IControl1接口,该库的后续版本有IControl2、IControl3等,直至IControl6接口

我遇到的问题是,如果我在Visual Studio中使用最新版本的控件并将其放置在窗体上,Visual Studio会为所有类生成完整的类信息,但是,在运行时,如果计算机具有较旧版本的控件,则我的应用程序会引发运行时异常。另一方面,如果我在VisualStudio中添加最早的版本,那么它会一直工作,但是,它不会为以后的版本生成接口信息。在某些情况下是需要的


如果计算机只有第一个版本,如何生成最新版本的接口信息(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中启用某些功能。如何动态实例化控件?我需要一个打字库吗?