Система. Строка является хорошим примером неизменного класса с методами set и видоизменяющимися методами, только что каждый метод видоизменения возвращает новый экземпляр.
Это зависит от того, что именно вы хотите.
Если вы хотите определить, кто загружает этот класс, или узнать, загружен ли он вообще, вы можете использовать Монитор процессов . Вызов CoGetClassObject ()
(или CoCreateInstanceEx ()
) приведет к чтению ключа HKCR \ CLSID \ {Class of Interest id}
и Process Monitor покажет вам, в каком процессе и когда это происходит и насколько успешно.
Если вы хотите заменить существующий класс своим - скомпилируйте библиотеку с вашей версией класса с тем же идентификатором класса и измените путь к COM-серверу внутри HKCR \ CLSID \ {Идентификатор интересующего класса}
, чтобы ваша библиотека использовалась для обслуживания класса с этим идентификатором. Вы можете сделать это вручную или с помощью regsvr32 - сначала зарегистрируйте исходную библиотеку, а затем свою, чтобы отменить регистрацию интересующего класса. COM выполняет сопоставление идентификатора класса и библиотеки через этот ключ, когда потребитель вызывает CoGetClassObject ()
или CoCreateInstanceEx ()
.
There's always the CoTreatAsClass
function:
http://msdn.microsoft.com/en-us/library/ms693452(VS.85).aspx
But, as you noted, it will be a system-wide replacement of the class, not a local change.
Alternatively, you could look into hooking CoCreateInstance as suggested in the post referenced by Shay Erlichmen's comment.