C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Создание своей DLL, Можно ли реализовать метод класса
Schumi
Отправлено: 26.10.2003, 18:31


Машинист паровоза

Группа: Участник
Сообщений: 206



Допустим,в основной программе есть класс. А отдельные методы хочу реализовать в DLL.
К примеру есть класс Editor и метод void Convert(TStringList *ptr).
Можно ли данный метод не описывать в основном модуле,а лишь объявить:
class TEditor
{ public: void Convert(TStringList *ptr);
......
}
А где-то в программе,при создании подключить,описанную в DLL,процедуру.
Георгий
Отправлено: 26.10.2003, 20:37


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



метод класса в dll был в поиске
Schumi
Отправлено: 27.10.2003, 13:31


Машинист паровоза

Группа: Участник
Сообщений: 206



Попробовал просто описать функцию и потом загрузить,что-то не получается.Подскажите.
В Dll проекте описана функция:
CODE

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reAnsiStringon, void* lpReserved)
{
   return 1;
}
//---------------------------------------------------------------------------
extern "C" void __export CreateBakFile(AnsiString FileName)
{......
}

А в основной программе:
CODE

HINSTANCE hDll=LoadLibrary("ЧЧЧ.dll");
if(!hDll) ShowMessage("Hе могу загрузить файл ЧЧЧ.dll");
void (__stdcall *Proba)(AnsiString FileName);
Proba=(void(__stdcall *)(AnsiString FileName))GetProcAddress(hDll,"CreateBakFile");
if(Proba==NULL) ShowMessage("Функция не найдена.");
FreeLibrary(hDll);
Proba("ke.txt");

Георгий
Отправлено: 27.10.2003, 17:13


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



AnsiString лучше не передавать — передавай нормальный char*

потом у тебя есть такой код:
CODE
FreeLibrary(hDll);
Proba("ke.txt");
Это не корректно — библиотека уже выгружена, а ты вызываешь из неё функцию

А функция из dll у тебя не вызывалась т.к. была обьявлена не так как надо, а надо было так:
CODE
extern "C" void __export _stdcall CreateBakFile(const char* FileName)
{
//---
}
Забыл ты stdcall приписать — вот оно и не работало

Вернуться в Вопросы программирования в C++Builder