OleRun zawiesza wszystko, ale tylko czasem

0

Mamy sobie dwie dllki - nazwijmy jedną main a drugą ole. Main do ole sięga dosyć często, wywołuje z niej różne funkcje służące do przechwytywania okienka Worda itp.
Mamy na przykład funkcję Ole_OpenFile. Szuka ona Worda, jak nie ma to odpala i otwiera plik. I wszystko fajnie działa. Na wszystkich komputerach, poza dwoma...

hErr = OleCreateFromFile(CLSID_NULL,
			szWideFileName,
			IID_IOleObject,
			OLERENDER_NONE,
			NULL,
			(IOleClientSite*)this,
			Storage,
			(void**)&OleObject);

		if( SUCCEEDED(hErr) )
		{
			OutputDebugString("CreateFromFile");
			hErr = OleRun(OleObject);
			OutputDebugString("OLE RUN NIE WYWALILO !!!!!!");
		}

Krótko mówiąc: pierwszy outputdebug się pojawia, drugi już nie. Wszystko się kraszuje (obie dllki, programy z nich działające i Word też). Nie jest fajnie.

Najdziwniejsze jest to, że są tylko dwa komputery, na których problem się pojawia. Stąd podejrzenie moje pada na jakieś ustawienia systemu. Ale jakie? Czy ktoś może spotkał się już z takim problemem?

edit:
Zapomniałabym o jeszcze jednej ważnej rzeczy. Nawet na tych dwóch komputerach problem nie pojawia się za każdym razem, a jedynie raz na jakiś czas. Czasem non stop, czasem przez kilka dni nie.

0

Rzutowanie this? Ciekawe, ale czy na pewno działa?

0

A co tu dziwnego? Jeśli this to obiekt klasy implementującej interfejs IOleClientSite, to wszystko jest ok.

0

Potwierdzam.
Dowodem to, że działa. Dodam nawet, że nawet w przypadkach błędnych hErr = SUCCEEDED.

0

chcialem odpisac, ze moze wersje Worda sie nieznacznie roznia i temu podobne, ale dopisek

Zapomniałabym o jeszcze jednej ważnej rzeczy. Nawet na tych dwóch komputerach problem nie pojawia się za każdym razem, a jedynie raz na jakiś czas. Czasem non stop, czasem przez kilka dni nie.
mnie zbilo z tropu. zostalo mi ino skromne dwa pytania:

  • sprawdz dokladnie, czy w momencie crashu nie ma w systemie jakiejs osieroconej poprzedniej instancji Worda. kiedys bralem sie z Excelem i gdy moj program sie wywalal criticalem (nie sprzatajac jak nalezy z powodu mojego faila) - Excel zostawal w tle, trzymal plik, i potem nieszlo go ruszyc az recznie ubilem proces i wyczyscilem pliki
  • znaleziona istniejaca instancja moze byc otwarta przez innego uzytkownika, wiec jesli nie dzialasz na uprzywilejowanym, to mozesz w ogole nie miec nawet praw chocby odpytac czy jest otwarta, nie mowiac o automatyzowaniu/nakazywaniu jej czegos. bardziej prawdopodobne jesli masz komputer multiuser z nowszym (np. win xp, 2003, win7) systemem, mniej - jesli to staroc i jakeis 98/2000. chociaz dziwilbym sie ze bys ja w takim przypadku w ogole znalazl..

IMHO, 100% czasu na tego buga jaki masz, powinienes poswiecic na proby deterministycznego odtworzenia warunkow w jakich wystepuje.. inaczej to jak szukac igły:\

1 użytkowników online, w tym zalogowanych: 0, gości: 1