我向atl传IHTMLDialog不成功。
如何传递 dialogarguments 呢?

解决方案 »

  1.   

    js怎么会有CDHtmlDilog的对象指针等,js应该是传递html等上面的数据给CDHtmlDilog等来响应处理的
      

  2.   

    我传递的是
    window对象,
    在atl中无法换成IHTMLDialog
      

  3.   

    为什么要传递window对象...
    通常的操作,js都只需要传递数据,信息等给ATL,操作window都可以交给js
      

  4.   

    js只认识IDispatch[Ex],所有其他接口类型都不识别,想传递接口指针就必须使用QueryInterface
      

  5.   

    我传递IDispatch 时queryinterface IHTMLWindow2可以成功。
    可是queryInterface IHTMLDialog却不可以成功。
    我那个窗体明明是模态窗体呀
      

  6.   

    代码是怎么样的,QueryInterface 返回错误是什么
      

  7.   

    queryinterface返回的错误怎么看?
    我是看到取得的IHTMLDialog为空所以认为是错误的。
      

  8.   

     HRESULT hr = QueryInterface() ...
      

  9.   

    对我就是通过对话框内部的脚本,向对话框中嵌入的ActiveX控件传递参数,
    是对话框,这里与前一个窗体已经没有什么关系了。大家踊跃发言呀,我准备再加点分
      

  10.   

    根据hr的值,MSDN上查看GetLastError中的error code
      

  11.   

    CComQIPtr<IHTMLDialog> spD;
    if(spW->QueryInterface(IID_IHTMLDialog,(void **) &spD)!=S_OK)
    {
    LPVOID lpMsgBuf;
        FormatMessage( 
         FORMAT_MESSAGE_ALLOCATE_BUFFER | 
         FORMAT_MESSAGE_FROM_SYSTEM | 
         FORMAT_MESSAGE_IGNORE_INSERTS,
         NULL,
         GetLastError(),
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
         (LPTSTR) &lpMsgBuf,
         0,
         NULL 
        );
    }使用以上代码,lpMsgBuf 提示操作成功完成。好像QueryInterface反回值不是S_OK,为什么还是成功完成呢?
      

  12.   

    S_开头的都表示成功,不仅仅是S_OK,还有S_FALSE。
    光判断HRESULT还不够,还要判断spD的值是不是空。
      

  13.   

    还有HRESULT的错误值本身就包含错误信息,不会设置全局WIN32错误码,所以不能使用GetLastError来读取错误码。
      

  14.   

    你先读出QueryInterface返回的值,然后查看对应的信息
      

  15.   

    谢谢各位,
    传dialogArguments解决了。
    关于那个IHTMLDialog的问题没有解决。
    大家可以积极发言。
    晚上结贴。