И ещё вопрос: может ли библиотека сама определить, прописана ли она в референцы или создана методом CreateObject?
Это массовое заблуждение которое меня сильно бьёт: считают, что есть раннее связывание и позднее связывание — две противоположенные вещи. При этом считают, что раннее связывание это когда «через References», а позднее — «с помощью CreateObject».
Это полная ерунда.
Во-первых, CreateObject не должен противопоставляться Референсам. Его можно с большой натяжкой противопоставить только New'у.
Во-вторых, то, что библиотека подключена в Рефереснах, ещё не означает, что это раннее связывание.
В-третьих, тот факт, что используется CreateObject, ещё не означает, что используется позднее связывание.
В-четвёртых, создание с помощью New и создание с помощью CreateObject отличаются только внешним видом: оба способа являются переходниками к CoCreateInstance().
В-пятых, ранним или поздним связыванием может быть только доступ к членам следующего вида:
xxxxxx.yyyyyyy. Если xxxxx имеет тип Object (на деле
IDispatch*), то это позднее связывание (aka «совсем уж позднее связывание» (aka связывание по имени)). Если xxxxxx имеет тип, объявленный в TLB, то это раннее связывание. Если xxxxxx — форма, то это тоже позднее связывание aka «не совсем жу позднее связывание» (aka связыване по dispid-у)).
Отсюда вопрос: Можно ли изнутри библиотеки воспрепятствовать её включению в референцы проекта? И желательно бы - с сообщением
А как её тогда вообще юзать?