есть стандартный код инициализации COM объекта: | Код | LPDISPATCH pdisp; OLECHAR FAR* sz; DISPID dispid; CLSID clsid; HRESULT hr; LPUNKNOWN punk = NULL; CoInitialize(NULL); hr = CLSIDFromProgID(OLESTR("ANAPA2.Application"), &clsid); if (FAILED(hr)) { ....... } //проверка на наличии в памяти ANAPA hr=GetActiveObject(clsid, NULL, &punk); if (FAILED(hr)) { hr = CoCreateInstance(clsid,NULL,CLSCTX_SERVER, IID_IUnknown, (void **)&punk); if (FAILED(hr)) { ..... } } hr = punk->QueryInterface(IID_IDispatch, (void FAR* FAR*)&pdisp); if (FAILED(hr)) { ..... } punk->Release(); //вызов конкретной функции из SDLC sz=OLESTR("StdInterface"); hr=pdisp->GetIDsOfNames(IID_NULL,&sz,1,LOCALE_USER_DEFAULT,&dispid); if (FAILED(hr)) { ..... }
|
работает уже лет сто ! Перешёл на Win7 - напрочь зависает на CoCreateInstance. Чтож такое хитрое в Win7 они там понаделали?
Этот же код работает в главном приложении,а вот из DLL .... :no-sad: |