ho trovato il problema:

codice:
hr = CLSIDFromProgID(L"Sap2000.SapObject", &clsid);  //ok  
hr =CoCreateInstance(clsid,NULL,CLSCTX_SERVER,IID_IUnknown, (void **)&punk) ;  //ok 
hr= punk->QueryInterface(__uuidof(Sap2000::_SapObject), (void**)&m_pSap);  //error nointerface
Il problema è che se ho differenti versioni dell'activex exe __uuidof(Sap2000::_SapObject) cambia!
Se uso la direttiva #import con il path dell'eseguibile mi si creano due file :un .tli and a .tlh.
Se tutte le volte ricreo questi file il programma non da errori If i create ma se uso ad es un include di questi file gia creati, o se compilo il progetto e cambio l'activex(ad es se è stata rilasciata una nuova release per me ad es da 12.0.0 a 12.0.1)
questo:
codice:
hr= punk->QueryInterface(__uuidof(Sap2000::_SapObject), (void**)&m_pSap);  //error nointerface
ritorna un errore di NOinterface
probabilmente l' _uuidof(riid) cambia?
come posso risolvere ad es per avere un interfaccia generica comune a tutte le versioni(non sono propriamente versioni , ma release)dato che ho guardato i file .tlh e .tli generati e sono pressochè uguali?