c#编写DLL如何调用VC开发的ocx内的事件

cutu 2009-05-21 08:56:58
目前遇到个难题

已有一个现成的ocx,该ocx内有一些自动触发的事件,在c#的winform内调用一切ok。

现在需要用c#写一个dll来调用这个ocx,问题在于不知道该如何调用ocx内的事件,因为没有窗口,无法将ocx直接托拽到窗口上,
仅仅通过引用那个ocx来调用代码会报错。如果将ocx当作普通的dll,用loadlibrary来调用,则不知道该怎么调用事件。

请教大虾们,如何解决??

...全文
380 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
davidxie2 2011-09-29
  • 打赏
  • 举报
回复
大致就是:
1、动态创建控件,作为OCX的容器
2、隐藏
3、触发控件的事件
davidxie2 2011-09-29
  • 打赏
  • 举报
回复
这个帖子有意思。
峰子2017 2010-08-23
  • 打赏
  • 举报
回复
lz的建议我也看不懂,能否详细说明一下哪?
cutu 2009-05-22
  • 打赏
  • 举报
回复
实在愚笨,楼上的建议看不明白
真相重于对错 2009-05-21
  • 打赏
  • 举报
回复
那个ocx需要一个容器承载,无法直接初始化
你可以用个容器承载这个ocx ,再把容器隐藏
cutu 2009-05-21
  • 打赏
  • 举报
回复
楼上的回答我没看懂

我做了如下尝试:
在一个winform上,将ocx托拽到界面上,自然一切ok。

然后将InitializeComponent中的this.Controls.Add(这个ocx对象) 语句注释掉,因为要使用dll 调用ocx,显然不可能有this.Controls。

然后就报错了
引发类型为“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常。

我查了下,msdn的解释是:只有在完成对 ActiveX 控件的实例化和初始化之后,才可以引用 ActiveX 控件的公有属性和方法,否则就会引发 AxHost.InvalidActiveXStateException 异常。
连接如下:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.axhost.invalidactivexstateexception(VS.80).aspx连接如下:

dll中无法对ocx进行实例化啊,怎么办呢?
super_hgl 2009-05-21
  • 打赏
  • 举报
回复
控件里有个事件可以的
cutu 2009-05-21
  • 打赏
  • 举报
回复
终于有人看到了

赶紧提问,怎么用事件?

没有窗口,无法将ocx托拽到界面上。只能引用ocx,但是调用ocx内的函数时,就报如下错误:

未处理 System.Runtime.InteropServices.COMException
Message="灾难性故障 (异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))"
Source="mscorlib"
ErrorCode=-2147418113
StackTrace:
在 System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
在 ULTRATELLib.UltraTelClass.TelConnect(String strServerIP)
在 WindowsFormsApplication1.Form1.Form1_Load(Object sender, EventArgs e) 位置 E:\程序\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:行号 24
在 System.Windows.Forms.Form.OnLoad(EventArgs e)
在 System.Windows.Forms.Form.OnCreateControl()
在 System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
在 System.Windows.Forms.Control.CreateControl()
在 System.Windows.Forms.Control.WmShowWindow(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.ScrollableControl.WndProc(Message& m)
在 System.Windows.Forms.ContainerControl.WndProc(Message& m)
在 System.Windows.Forms.Form.WmShowWindow(Message& m)
在 System.Windows.Forms.Form.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
在 System.Windows.Forms.Control.SetVisibleCore(Boolean value)
在 System.Windows.Forms.Form.SetVisibleCore(Boolean value)
在 System.Windows.Forms.Control.set_Visible(Boolean value)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.Run(Form mainForm)
在 WindowsFormsApplication1.Program.Main() 位置 E:\程序\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs:行号 18
在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
在 System.Threading.ThreadHelper.ThreadStart()
InnerException:
真相重于对错 2009-05-21
  • 打赏
  • 举报
回复
用事件
根普通的控件事件基本一致
cutu 2009-05-21
  • 打赏
  • 举报
回复
自己顶,等待大虾光临
tan124 2009-05-21
  • 打赏
  • 举报
回复
可以在他中间放入一个创建一个ocx的Myload再用多线程看看
cutu 2009-05-21
  • 打赏
  • 举报
回复
hdt,劳驾能否给出更详细的说明,什么样的容器,哪怕给一个函数声明吧。

一款高性能的报表开发工具,特别适用于管理信息系统,如ERP、进销存、财务等软件的报表开发。适用范围广:VB.NET、C#.NET、VB、VC、Delphi、C++Builder、中文编程易语言等一切支持 COM 的开发工具。
功能强大:实现普通格式报表、表格报表、多层表头、票据套打、交叉表等各种报表非常简便;报表完全可编程定义,非常适合开发通用软件中的动态报表。
独有的报表查询显示功能:除了提供报表的打印、打印预览、数据导出等功能,还提供独有的报表查询显示功能,既提供报表查询与输出的集成一次性实现,又能保证数据的一致性与完整性。
报表完全可编程定义,报表运行编程可控制,开发动态报表方便灵活。
特有的分组单元格合并功能,轻松实现常见的中国式报表分组在列中展现形式。
实现票据套打非常简便:对票据套打进行了专门的实现。
提供图表功能,包括饼图、柱状图、叠加柱状图、连线图、散列点图等,在报表中直接实现图表功能。
报表数据导出格式丰富,包括:Excel、PDF、图像、HTML、文本,CSV等多种格式。
支持所有常规条形码。
报表模板提供脚本编程功能,直接在报表模板中自定义报表行为。
支持参数化报表查询SQL语句,轻松实现动态过滤条件筛选报表数据。
运行时打印生成对纸张有适应能力,即使不以设计时纸张进行打印也可以得到输出布局合理的报表。
报表查询显示时提供报表内容文字查找功能。
全中文界面,针对中国报表进行了很多专门实现,如:报表表格线、财务金额线、数字大写金额、负数红字显示、多层表头等。
组件提供丰富交互事件,轻松实现报表穿透(透视)查询和报表交互。
重新发布简单:最多只需分发两个 DLL 文件。
易学易用:完全可视化设计,完善的复制/剪切/粘贴(Copy/Cut/Paste)和恢复与重做(Undo/Redo)功能。
编写了完整详尽的帮助文档。提供了丰富例程,包括VB.NET、C#、VB、VC、Delphi、CBuilder、中文编程易语言。
为 Delphi、C++Builder 进行了专门的包装,象使用 VCL 构件一样使用

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧