大家好,我现在在用一个OCX控件。我把它加载在主对话框中使用没有问题。但是我现在想在主对话框中将该控件的地址,传入到非窗口类的该控件变量中。使用出现了错误。报错位置是:void AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, ...)
{
ASSERT(m_pCtrlSite != NULL);    // not an OLE control (not yet, at least)
{请问大家这个问题应该如何解决啊?我同样试了下CEdit控件,这个是没有问题的。我这个OCX控件是第三方的

解决方案 »

  1.   

    贴代码出来看看
    如果是传地址过去应该是不会有问题,除非你传了以后,把对话框上的控件给销毁了或者整个对话框都销毁了。还有一个问题,你既然有主对话框的类,干嘛要传控件的指针啊? 干脆直接把主对话框的指针传过去不就行了么?我就怕你是传了一个指针过去,然后在非对话框中使用Creat创建控件,但是又没有主对话框的指针作为父窗口,你就使用了this指针(非对话框的指针)
    结果让控件的父窗口成了一个不是窗口的东西,那样肯定不行的。你要是传主对话框指针(pDlg)过去,那就好了,你可以使用CMyCtrl* m_pCtrl = (CMyCtrl*)pDlg->GetDlgItem(CTRL_ID)取得控件的窗口。然后再调用m_pCtrl->Creat(......pDlg,......);  //父窗口设定为Dialog窗口。
    当然这样做还要考虑时机的问题,看Dialog是否已经初始化完了才能这么做。
      

  2.   

    我这个往非窗口类传指针好像是不行的,微软提供的编辑框控件是可以的。我这个是不是必须要在非窗口类动态create呢?
      

  3.   

    要在非窗口中用的话,直接包含OCX头文件,然后再创建。