从dll调用CreateDispatch将m_lpDispatch作为NULL

时间:2012-08-16 07:54:17

标签: com mfc automation visual-c++-2008

我有一个程序,我从COleDispatchDriver调用exe。这使m_lpDispatch指针为NULL。我从主exe中的dll调用它。我已将CoInitialize(NULL)/ CoUninitialize()添加到代码的开头和结尾。但是exe仍然没有出现。

  

CoInitialize的(NULL);

matProp = IMatProp();
matProp.CreateDispatch(_T("MatProp.Document"));
matProp.Initialize();
matProp.ShowApplication( SW_SHOW );
CoUninitialize();

IMatProp是机器生成的IDispatch包装类,它是ColeDispatchDriver类的子类。 以下是该类的方法。

  

长IMatProp :: Initialize()   {

long result;
InvokeHelper(0x1, DISPATCH_METHOD, VT_I4, (void*)&result, NULL);
return result;

}

  

长IMatProp :: ShowApplication(长秀)   {

long result;
static BYTE parms[] =
    VTS_I4;
InvokeHelper(0x2, DISPATCH_METHOD, VT_I4, (void*)&result, parms,
    show);
return result;

}

从exe调用时这很好用,但是当从dll调用它时会出现这个问题。 请帮我。 非常感谢。

1 个答案:

答案 0 :(得分:1)

您可能需要初始化OLE而不仅仅是COM。请尝试使用OleInitialize()OleUninitialize()

MFC应用可以在AfxOleInit()期间通过调用CMFCApp::InitInstance()来控制此问题,但如果您使用多个线程,则需要自己管理。