Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание формы в DLL

384
31 марта 2003 года
mikeshilkin
95 / / 20.04.2000
Задача следующая. Необходимо при запуске DLL (открытии или запуске функции) создавать и использовать форму. Подскажите как это сделать и желательно пример.
362
01 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by mikeshilkin
Задача следующая. Необходимо при запуске DLL (открытии или запуске функции) создавать и использовать форму. Подскажите как это сделать и желательно пример.



Я обычно делаю так:
добавляю форму в DLL обычным образом,
создаю некоторую функцию в DLL, котороя создает форму и возвращает на нее указатель
и все, собственно.
Включаешь H-файл формы и LIB в главный проект и можете пользоваться.
Сразу сообщу несколько билдеровских косяков, связанных с формой в DLL, если узнаешь как лечится, сообщай
1) при помещении формы в DLL и включении LIB в главный проект, каждая форма программы при открытии(независимо от того где она находится) создает свою кнопку на панели задач
2) главная форма программы иногда теряет способность сворачиваться, при нажатии сисстемной кнопки "Свернуть"
можнт еще чего есть по мелочи, сейчас не упомню

384
01 апреля 2003 года
mikeshilkin
95 / / 20.04.2000
Цитата:
Originally posted by _kolyan


Я обычно делаю так:
добавляю форму в DLL обычным образом,
создаю некоторую функцию в DLL, котороя создает форму и возвращает на нее указатель
и все, собственно.
Включаешь H-файл формы и LIB в главный проект и можете пользоваться.
Сразу сообщу несколько билдеровских косяков, связанных с формой в DLL, если узнаешь как лечится, сообщай
1) при помещении формы в DLL и включении LIB в главный проект, каждая форма программы при открытии(независимо от того где она находится) создает свою кнопку на панели задач
2) главная форма программы иногда теряет способность сворачиваться, при нажатии сисстемной кнопки "Свернуть"
можнт еще чего есть по мелочи, сейчас не упомню



Если можешь скинь пример. PLS.
[email]mikeshilkin@nm.ru[/email]

1
01 апреля 2003 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by _kolyan


Сразу сообщу несколько билдеровских косяков, связанных с формой в DLL, если узнаешь как лечится, сообщай
1) при помещении формы в DLL и включении LIB в главный проект, каждая форма программы при открытии(независимо от того где она находится) создает свою кнопку на панели задач
2) главная форма программы иногда теряет способность сворачиваться, при нажатии сисстемной кнопки "Свернуть"
можнт еще чего есть по мелочи, сейчас не упомню


Глюки эти, ИМХО, не билдера. Судя по всему, тебе в твою дельку надо передать указатель на экзепляр приложения в котором форма создается...К сожалению не могу счас кинуть работающий примерчик, попаду домой - сделаю...:)

358
01 апреля 2003 года
moonmike
423 / / 18.10.2002
Создаешь dll в нее добавляешь новый юнит, код этого юнита:
Unit.cpp
//------
#include <vcl.h>
#pragma hdrstop
#include "Unit.h"
#include "Form1.h"
HWND ShowDllForm()
{
TForm1 *Form1 = new TForm1();
Form1->Show();
return Form1->Handle;
}
#pragma package(smart_init)
//--------
Unit.h
//--------
#ifndef UnitH
#define UnitH
extern "C" __declspec(dllexport) HWND ShowDllForm();
#endif
//---------------------
ну и потом в ней же(dll) создаешь форму Form1. Компилить надо с Use RTL и Build with runtime packages.
362
02 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by moonmike
Создаешь dll в нее добавляешь новый юнит, код этого юнита:
Unit.cpp
//------
#include <vcl.h>
#pragma hdrstop
#include "Unit.h"
#include "Form1.h"
HWND ShowDllForm()
{
TForm1 *Form1 = new TForm1();
Form1->Show();
return Form1->Handle;
}
#pragma package(smart_init)
//--------
Unit.h
//--------
#ifndef UnitH
#define UnitH
extern "C" __declspec(dllexport) HWND ShowDllForm();
#endif
//---------------------
ну и потом в ней же(dll) создаешь форму Form1. Компилить надо с Use RTL и Build with runtime packages.




Пробовал делать как ты написал - та же фигня, и главное окно не сворачивается и для каждой формы из DLL отдельная кнопка в панели задач.

Можесь скинуть пример в котором этих косяков нет?
mailto:_kolyan@ngs.ru

И еще вопросик
что такое extern "C" __declspec(dllexport)
и чем оно отличается от __export?

358
02 апреля 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by _kolyan



Пробовал делать как ты написал - та же фигня, и главное окно не сворачивается и для каждой формы из DLL отдельная кнопка в панели задач.

Можесь скинуть пример в котором этих косяков нет?
mailto:_kolyan@ngs.ru

И еще вопросик
что такое extern "C" __declspec(dllexport)
и чем оно отличается от __export?


Лови здесь, компилить надо и прогу и dll ки с Use dynamic RTL (закладка Linker) и Build with runtime Packages (Packages) включёнными!!

362
02 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by moonmike

Лови здесь, компилить надо и прогу и dll ки с Use dynamic RTL (закладка Linker) и Build with runtime Packages (Packages) включёнными!!



Спасибо за пример, все работает.
я, правда, подкулюча библиотеки немного по другому, может потому оно и криво работает.

А все-таки что такое
extern "C" __declspec(dllexport) ?

358
02 апреля 2003 года
moonmike
423 / / 18.10.2002
Цитата:
Originally posted by _kolyan


Спасибо за пример, все работает.
я, правда, подкулюча библиотеки немного по другому, может потому оно и криво работает.

А все-таки что такое
extern "C" __declspec(dllexport) ?


Продаю алгоритм, недорого, 2 бутылки пива "Stella Artois".
Открываешь Билдер, нажимаешь F1, вводишь "extern" читаешь:
Use the extern modifier to indicate that the actual storage and initial value of a variable, or body of a function, is defined in a separate source code module. Functions declared with extern are visible throughout all source files in a program, unless you redefine the function as static.

The keyword extern is optional for a function prototype.

Use extern "c" to prevent function names from being mangled in C++ programs.

КРатко переводя на русский соглашение об использовании имен и размешении тела функции.

362
02 апреля 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by moonmike

Продаю алгоритм, недорого, 2 бутылки пива "Stella Artois".
Открываешь Билдер, нажимаешь F1, вводишь "extern" читаешь:
Use the extern modifier to indicate that the actual storage and initial value of a variable, or body of a function, is defined in a separate source code module. Functions declared with extern are visible throughout all source files in a program, unless you redefine the function as static.

The keyword extern is optional for a function prototype.

Use extern "c" to prevent function names from being mangled in C++ programs.

КРатко переводя на русский соглашение об использовании имен и размешении тела функции.



Спасибо!!!
Правда перевод на русский язак был совершенно излишним.
Я даже сделал как ты сказал: нажал F1 ввел __declspec и получил ответ на вторую половину вопроса!
:D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог