powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическая загрузка библиотеки
8 сообщений из 8, страница 1 из 1
Динамическая загрузка библиотеки
    #32275342
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Дельфях это делается так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
type
    Tdll = function (ll:integer;dh:real):integer;stdcall;
var
    dll1:Tdll;
    ddl:hmodule;
   ...
   ddl:=loadlibrary('lib1.dll');
  if ddl >  0  then  @dll1:=GetProcAddress(ddl,'func1'); //
  else MessageDlg('Невозможно загрузить библиотеку.',mtError,[mbOk], 0 );
   ...
  freelibrary(ddl);


А вот на С++, я что-то не понял как правильно сделать.
Сделал так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
HMODULE masterDll;
AnsiString dllSource = ExtractFilePath(Application->ExeName)+ "mas.dll" ;
masterDll = LoadLibrary(dllSource.c_str());
if (masterDll >  0 )
{

}

FreeLibrary();

А вот как объявить тип Tdll и прочее - не пойму.

Напишите кто-нибудь небольшой примерчик.

P. S. C++Builder6, mas.dll - моя библиотека сделанная на Builder-e.
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275377
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
typedef VOID (CALLBACK* TIMERPROC)(HWND, UINT, UINT, DWORD)
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275631
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поподробней, а то я не понял, что такое
HWND, UINT, UINT, DWORD

Я понял, что UINT это тип int, а остальное?
Дело в том, что мне нужно передать в библиотеку char* и int.
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275650
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
typedef long (*LPMyFunc)(char*,int);

. . .

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString dllSource = ExtractFilePath(Application->ExeName)+ "mas.dll" ;
  if( HMODULE masterDll = LoadLibrary(dllSource.c_str()) ){
    if( LPMyFunc MyFunc = (LPMyFunc)GetProcAddress(masterDll, "MyFuncName" ) ){
      long lResult = MyFunc( "qwerty" , 1 );
    }
    FreeLibrary(masterDll);
} }
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275715
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, ZrenBy.
Все получилось.
А можно еще вопрос?
В Дельфях проверка того, что окно уже создано и создание окна если его еще нет делалась так:
Код: plaintext
if not Assigned(NF) then NF:=TNF.Create(self);

А как это сделать на Builder-e ?
И как потом удалить во время выполнения программы ?
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275776
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как создать и удалить я догадался:
Код: plaintext
1.
2.
FProg = new TFProg(FProg);
...
FProg->~TFProg();

А как проверить создано окно или нет - не знаю...
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275803
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FProg = new TFProg(FProg);

...
if(!FProg){
ShowMessage("Не создано");
};
..


FProg->~TFProg();//правельнее писать delete FProg
...
Рейтинг: 0 / 0
Динамическая загрузка библиотеки
    #32275840
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо ZrenBy и 123456789098!
Вы мне очень помогли.
А delete действительно правильнее использовать, раз уж создаю при помощи new .
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамическая загрузка библиотеки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]