link4416 link4417 link4418 link4419 link4420 link4421 link4422 link4423 link4424 link4425 link4426 link4427 link4428 link4429 link4430 link4431 link4432 link4433 link4434 link4435 link4436 link4437 link4438 link4439 link4440 link4441 link4442 link4443 link4444 link4445 link4446 link4447 link4448 link4449 link4450 link4451 link4452 link4453 link4454 link4455 link4456 link4457 link4458 link4459 link4460 link4461 link4462 link4463 link4464 link4465 link4466 link4467 link4468 link4469 link4470 link4471 link4472 link4473 link4474 link4475 link4476 link4477 link4478 link4479 link4480 link4481 link4482 link4483 link4484 link4485 link4486 link4487 link4488 link4489 link4490 link4491 link4492 link4493 link4494 link4495 link4496 link4497 link4498 link4499 link4500 link4501 link4502 link4503 link4504 link4505 link4506 link4507 link4508 link4509 link4510 link4511 link4512 link4513 link4514 link4515 link4516 link4517 link4518 link4519 link4520 link4521 link4522 link4523 link4524 link4525 link4526 link4527 link4528 link4529 link4530 link4531 link4532 link4533 link4534 link4535 link4536 link4537 link4538 link4539 link4540 link4541 link4542 link4543 link4544 link4545 link4546 link4547 link4548 link4549 link4550 link4551 link4552 link4553
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
особенности работы с dll, окна и dll
Ramzay
Отправлено: 09.03.2007, 01:19


Дежурный стрелочник

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



Работая с dll я выяснил для себя, что это очень удобная штука с точки зрения повторного использования кода.

Однако, наряду с достоинствами я натолкнулся на недостатки, которые я победить не смог. Если кто сталкивался с подобными проблемами, буду признателен за подсказку.

Итак, особенность №1

Вызываем dll-функцию. Функция динамически создает модальную форму. Проблема заключается в том, что форму невозможно свернуть. При нажатии на иконку "Свернуть" в верхнем правом углу окна ничего не происходит. При этом окно нормально закрывается крестиком и нормально разворачивается на весь экран. Если из такой формы создать еще одну, то она будет нормально сворачиваться.

Особенность №2

Вызываем dll-функцию. Функция динамически создает модальную форму №1, которая в свою очередь создает еще одну модальную форму №2. Находясь в форме №2 нажимаем Alt-Tab и переключаемся в какое-либо другое приложение, а затем переключиться обратно. Мы видим на экране форму №2, под которой лежит приложение (в которое мы переключались), а форма №1 лежит под этим приложением. Хотя форма №1 должна лежать под формой №2.

Особенность №3

Запускаем некоторое приложение (например Word или что-то другое).
Вызываем dll-функцию. Функция динамически создает модальную форму №1, которая в свою очередь создает еще одну модальную форму №2. В процессе работы пользователя в форме №2 выдается сообщение. (например, функцией ShowMessage или это может быть сообщение об ошибке). После того как пользователь прочел сообщение и нажал ОК, пользователь видит не форму №2, а приложение.

Отредактировано Ramzay — 09.03.2007, 01:23
olegenty
Отправлено: 09.03.2007, 08:26


Ветеран

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



Для начала, есть ощущение, что EXE и DLL ты собрал статически, а не динамически. Пересобери динамически (Build with runtime packages и Use dynamic RTL) и данные эффекты должны улетучиться. При статической сборке экземпляры глобальный объектов (Application, Screen, Printer, etc) — локальны для EXE и для DLL (свои для каждого модуля то есть). При динамической — все модули "пользуются" единственным экземпляров данных объектов, созданных в EXE.
Ramzay
Отправлено: 09.03.2007, 14:58


Дежурный стрелочник

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



QUOTE (olegenty @ 09.03.2007, 08:26)
Для начала, есть ощущение, что EXE и DLL ты собрал статически, а не динамически. Пересобери динамически (Build with runtime packages и Use dynamic RTL) и данные эффекты должны улетучиться.

Установка птицы "Build with runtime packages", оказывает заметное положительное воздействие. Но при этом придется за своей dll-кой таскать кучу пакеджей, а я к этому пока психологически не готов.

Что делает "Use dynamic RTL" — не понятно.

А нет ли какой-нибудь функции или метода, который бы позволил сделать окно задачи текущим окном Windows и вынести ее на передний план всех окон Windows?
Tantos
Отправлено: 09.03.2007, 18:20


Станционный диспетчер

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



QUOTE (Ramzay @ 09.03.2007, 21:58)
А нет ли какой-нибудь функции или метода, который бы позволил сделать окно задачи текущим окном Windows и вынести ее на передний план всех окон Windows?

1. SetForegroundWindow
2. Вдогонку

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