这两天遇到个问题,在Winform中调用C++写的一个dll控件时用了两种方法在对控件进行实例化的时候均出错。
1.注册控件后,工具栏右键选择项,然后COM组件选中我所注册的控件,可以成功添加到工具栏,当我将工具栏中的控件拖放到Form上时,VS直接停止工作。
2.注册控件后使用 aximp对其进行操作,将生成的DLL直接右键->添加引用 引用到程序中然后在public Form1(){InitializeComponent();}中进行控件的初始化和实例化,在单步调试的时候程序走到实例化这一步,程序正常,但是里面的很多东西都引发了异常,继续执行的话则在将要执行到结束初始化的时候出错,没有错误信息,直接当前进程停止工作,调试的时候提示无法附加崩溃的进程,即无法调试。
请问一下怎么解决,可能描述上不清楚,大概就这样个情况,请大家多多担待,麻烦大家了。

解决方案 »

  1.   

    工具还是帮助菜单下的添加工具箱项,然后选择COM组件,选中你的ocx控件。
      

  2.   

    to:1楼
    是在工具箱里面右键……这个办法不行。添加进去以后 我把加进去的控件拖放到Form中VS就直接停止工作了。
      

  3.   

    本帖最后由 caozhy 于 2012-12-21 11:04:25 编辑
      

  4.   

    to:3楼   我试一下吧。
    to:4楼   问题是用java调用是可以成功调用的,JS也能调。
      

  5.   

    还有人帮忙么?不是控件的问题,应该是C#与ATL控件之间的兼容性问题,求帮助。怎么解决兼容这两个之间的兼容性问题?给个链接也行……
      

  6.   

    用.net 4,
    它有捕获com异常的办法。。不要放在初始化里(InitializeComponent),因为发生错误,窗体都编辑不了。尽量不要用com,标准的DLL更容易部署和升级,也容易调试些
      

  7.   

    使用api动态加载debug版的dll,比较容易找到这类问题。
      

  8.   

    可能是你们C++的控件封装的太过复杂了, 导致无法与C#的一些机制兼容,建议将C++的控件彼一时新封装一次,尽量将控件的初始化工作或者是构造函数封装得尽量简单,其它一些复杂的工作交给初始化以后再去执行,然后去用C#调用。
      

  9.   

    我也是拖进去直接就停止工作了,请教下楼主。
    我用vs 2010建了一个ATL项目,创建了一个ATL控件,就一个按钮,已经够简单了,具体该怎么调整代码结构呢?