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 は、ColeDispatchDriver クラスをサブクラス化するマシン生成の IDispatch ラッパー クラスです。以下はそのクラスのメソッドです。

long IMatProp::Initialize() {

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

}

long IMatProp::ShowApplication(長いショー) {

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

COM だけでなく OLE を初期化する必要があるかもしれません。代わりにOleInitialize()andを使用してみてください。OleUninitialize()

MFC アプリはAfxOleInit()duringの呼び出しでこれを制御できCMFCApp::InitInstance()ますが、複数のスレッドを使用している場合は自分で処理する必要があります。

于 2012-08-16T09:28:03.297 に答える