我在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#应用程序”
答案 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.dll
或regsvr32 /i xyz.dll