Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 03.02.2012, 08:23   #1
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию окно из dll

хочу встроить в dll окно для вывода некоторой информации.
при добавлении в проект формы (File->New->Form), даже не добавляя какой-либо код в тело dll, клиент вылетает с предложением отправить отчет "дяде биллу".

пробовал добавить

Код:
int somefunc()
{
    TForm1* form = new TForm1( 0 );
    form->ShowModal();
    delete form;
}
somefunc() гарантировано вызывается клиентом.
окно появляется. процесс загрузки останавливается. закрываю. грузится дальше, появляется рамка окна л2 и сразу отчет "дяде биллу"...

клиент ц4
библиотека dsetup

куда копнуть, или как правильно создать окно?
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...

Последний раз редактировалось Elecktron, 03.02.2012 в 08:35.
Elecktron вне форума   Ответить с цитированием
Старый 03.02.2012, 09:53   #2
Пользователь
 
Регистрация: 19.07.2010
Сообщений: 45
Сказал Спасибо: 10
Имеет 23 спасибок в 12 сообщенях
Guzh пока неопределено
По умолчанию

я создаю в отдельном потоке,на делфе так:
Delphi Код:
procedure TNewThreadradar.Execute; begin    Application.Initialize;   Application.CreateForm(TFRadarPiu, FRadarPiu);   Application.Run; end;
Guzh вне форума   Ответить с цитированием
Старый 03.02.2012, 10:12   #3
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

В коде длл чето нето походу.
Если ты создаеш форму в dllmain а инжектиш лоадером тоже плохая манера влекущая кучу "неуловимых" ошибок.

Добавлено через 9 минут
Цитата:
Сообщение от Guzh Посмотреть сообщение
я создаю в отдельном потоке,на делфе так:
Delphi Код:
procedure TNewThreadradar.Execute; begin    Application.Initialize;   Application.CreateForm(TFRadarPiu, FRadarPiu);   Application.Run; end;
угу. Дочерние потоки не могут быть исполнены пока инициализация всех длл не завершитса. В основном же, обращение к апи любых длл кроме kernel32 может повлеч краш. Так как они могут быть на тот момент недогружены.

для потока л2 еще хуже, он останетса в оконной процедуре формы и дальше ниче не выполнит
__________________
читернуть бы ништяг

Последний раз редактировалось mira, 03.02.2012 в 10:12. Причина: Добавлено сообщение
mira вне форума   Ответить с цитированием
Старый 03.02.2012, 13:17   #4
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Код:
procedure DLLEntryPoint(dwReason: DWORD);  export;
begin
  case dwReason of
    DLL_PROCESS_ATTACH:
    begin
     //.......
      SetForm:=TSetForm.Create(nil);
      SetForm.MemoLog.Clear;
     //.......
    end;
    DLL_PROCESS_DETACH:
    begin

    end;
  end
end;
Хз, у меня такой код работал, на событиях контролов были прикручены вызовы функций клиента. Единственное, это dll ка прикрученная к engine.dll с помощью PETools, а не на лету внедряемая.
Sherman вне форума   Ответить с цитированием
Старый 03.02.2012, 14:44   #5
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

Ну там ошибка в длл гдето. Также непонятно чем вызываетса эта somefunc
__________________
читернуть бы ништяг
mira вне форума   Ответить с цитированием
Старый 03.02.2012, 23:10   #6
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

я пишу dsetup.dll
функция под номером 11 в любом случае вызывается клиентом.
вызывать форму пробовал и в 11 функции, и в DllEntryPoint, и в InitThread.
в лучшем случае форма появляется и останавливается загрузка, после закрытия формы ошибка...

без формы все работает: адднетворк перехватывается, пакеты обрабатываются, в лог файл пишет.
но стоит только добавить форму в проект (File->New->Form) и сразу облом.
пробовал переделать под многопоточную dll - то же самое.

на данный момент проблема не в вызове формы, а в работе клиента с dll в которой форма.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Elecktron вне форума   Ответить с цитированием
Старый 03.02.2012, 23:43   #7
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Цитата:
Сообщение от Elecktron Посмотреть сообщение
пробовал добавить

Код:
int somefunc()
{
    TForm1* form = new TForm1( 0 );
    form->ShowModal();
    delete form;
}
Остановка всех очередей сообщений и потоков приложения из которого это вызвано. Если я не ошибаюсь. Покажи форму немодально.
Sherman вне форума   Ответить с цитированием
Старый 04.02.2012, 01:06   #8
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

сделал так:

Код:
int okno()
{
    TForm1* form = new TForm1( 0 );
    form->Show();
    delete form;
    return 0;
}
вызываю okno(); в InitThread.

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

если поставить вызов okno(); после while (0==GetModuleHandleA("fire.dll")) Sleep(100);
окно не появляется, с ошибкой вылетает...
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Elecktron вне форума   Ответить с цитированием
Старый 04.02.2012, 01:14   #9
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

delete form; нафига? Вроде как у формы есть метод Form->Destroy();

Ты dsetup.dll своим вариантом что ле заменил? Если да, то косяк в самой реализации ваще... Какая то из ф-ций сбоит.

Последний раз редактировалось Sherman, 04.02.2012 в 01:19.
Sherman вне форума   Ответить с цитированием
Старый 04.02.2012, 05:44   #10
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

если и есть косяк в реализации, то только в том, что добавляет автоматом борланд.
в своем коде я уверен. без формы все работает.
а вот что не так, я не понял.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Elecktron вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 17:58.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!