Как да създадете 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 (но кой, откъде знаете?).