我有一个程序,我从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调用它时会出现这个问题。 请帮我。 非常感谢。
答案 0 :(得分:1)
您可能需要初始化OLE而不仅仅是COM。请尝试使用OleInitialize()
和OleUninitialize()
。
MFC应用可以在AfxOleInit()
期间通过调用CMFCApp::InitInstance()
来控制此问题,但如果您使用多个线程,则需要自己管理。