опубликован 15-02-2001 12:13 MSK
Самый универсальный способ - это написание
COM inproc сервера. Описываешь собственный
интерфейс в idl файле, от него наследуешь
класс. Помещаешь все это в Dll и ее регистрируешь как COM сервер.
А в проге в нужном месте создаешь
экземпляр класса при помощи функции CoCreateInctance.
Способ хорош тем, что написав Dll-ку например на VC++ ты ее сможешь использовать
и на C++Builder-e и на Delphi, а если поддержишь IDispatch интерфейс то и на VB, и на JavaScript.
Есть более простой способ :
Описываешь базовый класс и экспортируемую
функцию, которая будет создавать
наследуемый от базового класс в Dll-ке
и возвращать на него указатель// MyClass.h
class CMyClass
{
public:
virtual ~CMyClass() {}
virtual void Method1() = 0;
};
__declspec( dllexport ) CMyClass* CreateMyClass();
а в Dll-ке наследуешь этот класс и
реализуешь эксортируемую функцию
class CMyClassImpl: public CMyClass
{
public:
CMyClassImpl();
virtual ~CMyClassImpl();
virtual void Method1();
protected:
// My data
};
CMyClass* CreateMyClass()
{
return new CMyClassImpl();
}
У этого способа есть один недостаток :
Dll-ка и exe модуль должны быть собраны
на одном компиляторе, ниаче глюков не оберешься. Проблема заключается в том,
указатель на класс в виртуальных функциях передается по разному на VC++, Builder-e,
Watcom-е. Также деструктор класса вызывается
по разному.