none
Activex的奇怪问题 RRS feed

  • 问题

  • 1.本人做了一个MDI的activex控件,在IE和窗体应用程序中可以正常使用
    2.现在由于需要将该控件集成到WPF中,创建的是WPF application时也可以正常使用,
    3.但创建的是WPF Browser application程序时,出错.
    调用如下:
    System.Windows.Forms.Integration.WindowsFormsHost host = new System.Windows.Forms.Integration.WindowsFormsHost();
    AxzebdemrLib.Axzebdemr ax = new AxzebdemrLib.Axzebdemr();//此处为activex控件
    host.Child = ax;
    抛出System.Reflection.TargetInvocationException异常.
    Additional information: Unable to get the window handle for the 'Axzebdemr' control. Windowless ActiveX controls are not supported
    4.但如果引用到的是activex的debug版本,可以正常运行
    5.查看了debug和release的,设置不同的地方就是release,增加了代码优化和运行时链接库的方式不一致.
    有尝试去掉release的代码优化,依然报错.
    请各位大侠帮忙!谢谢!
    2009年7月27日 8:28

答案

  • 谢谢各位回复.
    问题自己解决了
    因为在引入MDI是也用了
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    cmdInfo.m_nShellCommand =CCommandLineInfo::FileNothing;
    if (!ProcessShellCommand(cmdInfo))
    return FALSE;
    具体原因不是很清楚,猜测应该是在解析命令行参数时的消息被.net的消息反射机制捕获,
    那么.net就准备发送消息给一个无窗口句柄的activex控件,因为此时oncreate还沒完成.
    但依然还是很奇怪为什么debug下没有问题

    • 已标记为答案 Tim Li 2009年8月4日 9:18
    2009年7月28日 1:49

全部回复

  • 用MFC的对话框写一个ActiveX容器,看看Release版的ActiveX在容器中是否工作正常。

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月27日 15:11
    版主
  • WPF Browser application自己就是一个ActiveX控件吧,它是否实现了ActiveX容器都还是一个问题.
    2009年7月27日 16:47
  • 谢谢各位回复.
    问题自己解决了
    因为在引入MDI是也用了
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    cmdInfo.m_nShellCommand =CCommandLineInfo::FileNothing;
    if (!ProcessShellCommand(cmdInfo))
    return FALSE;
    具体原因不是很清楚,猜测应该是在解析命令行参数时的消息被.net的消息反射机制捕获,
    那么.net就准备发送消息给一个无窗口句柄的activex控件,因为此时oncreate还沒完成.
    但依然还是很奇怪为什么debug下没有问题

    • 已标记为答案 Tim Li 2009年8月4日 9:18
    2009年7月28日 1:49
  • ProcessShellCommand这一行会创建doc/view/frame,涉及的操作很多。建议在Release版本的程序中加入调试信息来调试。

    Please mark the post answered your question as the answer, and click the chartreuse pyramid floating over "Vote as helpful" to mark other helpful posts as helpful. This posting is provided "AS IS" with no warranties, and confers no rights.
    Visual C++ MVP
    2009年7月28日 2:16
    版主