0

我有一个程序,我从 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;

}

long IMatProp::ShowApplication(long show) {

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

}

从exe调用时这工作正常,但是从dll调用时它给出了这个问题。请帮我。非常感谢。

4

1 回答 1

1

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

MFC 应用程序可以通过调用AfxOleInit()during来控制它,CMFCApp::InitInstance()但如果您使用多个线程,则需要自己处理。

于 2012-08-16T09:28:03.297 回答