WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  DLL & class

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   DLL & class
BadHabit опубликован 13-02-2001 18:08 MSK   Click Here to See the Profile for BadHabit   Click Here to Email BadHabit  
Как в ДЛЛ описать класс, а потом его достать в проге. Если моно с исходничками...
OlegN опубликован 15-02-2001 12:13 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Самый универсальный способ - это написание
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-е. Также деструктор класса вызывается
по разному.

Paul опубликован 16-02-2001 17:10 MSK     Click Here to See the Profile for Paul  Click Here to Email Paul     
Предшествующий ответ слишком широк. Более просто описать класс, а потом сделать LoadLibrary и всё

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.