Nisam znao da je sve sto ide preko IDispatch-a late binding, mislio sam da je to sve sto u Run-time-u povezes na COM. Da Early Binding koristi isti metod na napravi proxy/stub?!
Pa nema nesto koda, sve se svelo na
Type.GetTypeFromProgID,
Activator.CreateInstance,
Marshal.GetIUnknownForObject od instanciranog objekta i
Marshal.QueryInterface za
IUnknown. Interfejs koji sam
rucno pravio je klasican (nema tlibimp, ali je marshalovan):
Code:
interface IServerList
{
int EnumClassesOfCategories([In] int cImplemented, [In, MarshalAs(UnmanagedType.LPArray)] Guid[] catidImpl, [In] int cRequired, [In] Guid[] catidReq, [MarshalAs(UnmanagedType.IUnknown)] out object ppUnk);
int GetClassDetails([In] ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)] out string ppszProgID, [MarshalAs(UnmanagedType.LPWStr)] out string ppszUserType);
int CLSIDFromProgID([In, MarshalAs(UnmanagedType.LPWStr)] string szProgId, out Guid clsid);
}
Na osnovu prethodnog posta, mislim da je mozda stvar u GUID-u interfejsa klase koju zelim, ali ne znam kako to da izvucem. Mozda je nebitno, ali zapravo hocu da se povezem sa DCOM, tako da iz Registry-a ne mogu da procitam ID.