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 приписать — вот оно и не работало |
|