Как да създадете Ole обект ръчно, t
Как да създадете ръчно обект на Ole, т.е. без използване на tlb файл, без регистрация?
Никой не знае какво?
DLL, където се намира обектът ole, е функцията DllGetClassObject. Трябва да й се обадим.
> GreySerg (20.12.01 17:44)
Бихте обяснили проблема. Какъв сървър? (InProc или Local) Какъв вид интерфейс трябва да получите? (IDispatch или нещо друго). И без да регистрирате какво?
И тогава майсторите ще ви отговорят дали знаят или не.
Сървър - без значение какъв (вътрешен или външен). Интерфейс -IDispatch.
И без регистрация - просто се интересува от възможността за създаване на такъв сървър.
И защо такива мъки?
1. Изобщо не е необходимо да се създава отделен tlb/olb файл, обикновено библиотеката с типове се компилира със сървъра. Без информация за типовете, IDispatch няма да работи по принцип (използва се в методи, които осигуряват „късно“ свързване).
2. Регистрацията може да бъде избегната чрез пренаписване на изпълнението на регистрацията по подразбиране във вашия клас (не пишете в регистъра). Но без регистрация ще бъде невъзможно да се използва автоматизация.
И така, какъв е смисълът изобщо да се използва IDispatch?:)
И ако не IDispatch, как да пренапишете изпълнението на регистрацията по подразбиране във вашия клас (да не пишете в регистъра)? По възможност пример.
Не може да се опише с 2 думи, защото темата е сложна и обемна. Мога да препоръчам да отидете на http://www.techvanguards.com/stepbystep/comdelphi/, има много добър урок за COM програмиране в Delphi с многобройни примери (на английски).
Най-простото (за вътрешни сървъри) е да копирате изпълнението на функциите DllRegisterServer/DllUnregisterServer от ComServ.pas във вашия проект и да премахнете целия код за работа с системния регистър от тези функции.
За по-сложни неща ще трябва да напишете свои собствени заместители за класовете TComObject, TTypedComObject и много други.
P.S. Защото интерфейсите са само декларация за методи за достъп, тогава ако искате, можете да пишете всякакви внедряване в класовете по изпълнение
P.S. Все още не разбирам защо стандартните инструменти са толкова лоши:)
Да, няма да обичате да създавате OLE обект, без да се регистрирате в системния регистър. Може да има само едно извращение: заредете DLL във вашата програма и извикайте нейната функция DllRegisterServer () и след това опитайте да извикате необходимите методи на клас чрез IDispatch (но кой, откъде знаете?).