无法创建组件'AxHost'System.Runtime.InteropServices.COMException(0x80029C4A)

时间:2011-07-20 11:06:15

标签: c# .net user-controls

我在C#中创建了.Net usercontrol。它是带有文本框和列表框的图形控件。 现在我想在传统VC ++应用程序中使用此控件。(本机二进制)。 意味着我想从非管理代码中调用管理代码。

假设我的usercontrol名称是xyz.dll。 我使用tlbexp.exe生成了tlb文件,然后使用下面的命令行注册了这个控件。 regasm xyz.dll /tlb:"C:\xyz.tlb“/ codebase

我使用'Activex控制测试容器'检查了我的控件(打开工作室2005并转到'工具'菜单) 我在这个工具上测试了我的.Net用户控件,它工作正常。

然后我创建了一个示例C#窗口应用程序。在工具箱下,我右键单击并选择“选择项目”并选中 “COM组件”选项卡。并选择我的xyz.dll控件。 现在这个控制器被添加到工具箱中。

但是当我将此控件拖到窗口上时,我得到了以下错误。 无法创建组件'AxHost'。错误消息如下:

'System.Runtime.InteropServices.COMException(0x80029C4A):加载类型库/ DLL时出错。 (来自HRESULT的异常:0x80029C4A(TYPE_E_CANTLOADLIBRARY)) 在System.Windows.Forms.Design.DocumentDesigner.AxToolboxItem.CreateComponentsCore(IDesignerHost host) 在System.Drawing.Design.ToolboxItem.CreateComponentsCore(IDesignerHost host,IDictionary defaultValues) 在System.Drawing.Design.ToolboxItem.CreateComponents(IDesignerHost host,IDictionary defaultValues) 在System.Windows.Forms.Design.OleDragDropHandler.CreateTool(ToolboxItem工具,Control parent,Int32 x,Int32 y,Int32 width,Int32 height,Boolean hasLocation,Boolean hasSize,ToolboxSnapDragDropEventArgs e)'

还给我一些指针“如何将.net usercontrol用于遗留的C#应用​​程序”

2 个答案:

答案 0 :(得分:1)

在命令提示符regsvr32 "C:\Program Files\VideoLAN\VLC\axvlc.dll"中键入以下内容  注册dll文件

答案 1 :(得分:0)

到目前为止,我的猜测还没有足够的信息:

Control是在.NET 4中开发的,而旧版C#应用程序是在.NET 2中开发的。 .NET 4可以在同一个进程中混合使用.NET版本,但.NET 2不能这样,我怀疑要解决这个问题,你需要在.NET 2中开发/构建控件,以便它可以在.NET 2& 4。

编辑(在关于.NET 3.5的评论之后):

您需要通过运行 regsvr32 来注册控件。

编辑2:
regsvr32 xyz.dllregsvr32 /i xyz.dll