2012-08-16 171 views
0

我有一個程序,我從COleDispatchDriver調用一個exe文件。這使m_lpDispatch指針爲NULL。我從主exe文件的dll中調用這個函數。我已將CoInitialize(NULL)/ CoUninitialize()添加到代碼的開頭和結尾。但仍然exe文件不顯示。從DLL調用CreateDispatch將m_lpDispatch設置爲NULL

CoInitialize(NULL);

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

IMatProp是機器產生的IDispatch包裝類哪個子類的COleDispatchDriver類。 下面是該類的方法。

長IMatProp ::初始化() {

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

任何代碼向我們展示? – 2012-08-16 07:55:26

+0

另外,你爲什麼不寫一個偉大的問題,而不是發佈你的問題的一部分 - 我看到[這是開始](http://stackoverflow.com/questions/11980685/launching-and-editing-program-with -coledispatchdriver-MFC)。 – 2012-08-16 07:58:44

+0

嗨Roman,我編輯了問題以顯示代碼。對不起,一次不要問全部問題。 – gishara 2012-08-16 08:11:42

回答

1

您可能需要初始化OLE而不是COM。改爲使用OleInitialize()OleUninitialize()

MFC應用程序可以通過在CMFCApp::InitInstance()期間致電AfxOleInit()來控制此操作,但如果您使用多個線程,則需要自行處理。

+0

感謝snowdude,但它給出了一個調試斷言作爲ASSERT(!pState-> m_bNeedTerm); //叫它兩次?在oleinit.cpp中。 – gishara 2012-08-16 10:58:52

+0

你是否在調用你的COM代碼的SAME線程上調用AfxOleInit? – snowdude 2012-08-16 12:45:10

+0

是的,如果我錯了,請糾正我,我對這個COM對象很新。非常感謝。 – gishara 2012-08-17 03:26:47

相關問題