Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Дочерние окна [D7, Win2k, WinXP]


Страницы:   1 2 3

IntruderLab ©   (2008-05-29 11:03:00) 

Вопрос вобщем-то вот в чем, в программе дочерние окна содержаться в dll, при запуске программы в winXP все работает прекрасно, при запуске win2000 в момент вызова процедуры открытия дочернего окна вылетает ошибка. Как с этим бороться?


Сергей М.   (2008-05-29 14:36:00) [21]


> это мы уже проходили в прошлой серии


В прошлой серии мы также "проходили" и спецификаторы сошлашений о вызовах, он у тебя как был так и остался stdcall, хотя в той серии до хрипоты долдонили про осмысленностьего указания) ..


> Result                              := LongInt(frmShowDocuments);


И про это тоже долдонили)

Но, похоже, все это как о стенку горох - ты опять влупил это приведение типа, совершенно не понимая  зачем оно тебе нужно и нужно ли вообще.


IntruderLab   (2008-05-29 14:31:00) [22]

Конечно :) это мы уже проходили в прошлой серии :) в ХР то работает.


Сергей М.   (2008-05-29 14:28:00) [23]

Вызывающий и вызываемый модули собраны c установленной оцией использования ран-тайм пакетов ?


IntruderLab   (2008-05-29 14:25:00) [24]

Хорошо, только я немного другую функция распишу, эта работает, вобщем не работают все вызовы немодальных форм.
dll
function ShowDocuments(slServer,slUser:TStringList):Longint;StdCall;
var frmShowDocuments:TfrmShowDocuments;cdsE:TClientDataSet;i:Integer;regFile:TRegist ry;
   Layout: array[0.. KL_NAMELENGTH] of char;
begin
 LoadKeyboardLayout(StrCopy(Layout,'00000419'),KLF_ACTIVATE);
 frmShowDocuments                    := TfrmShowDocuments.Create(Application);
 frmShowDocuments.slServer           := TStringList.Create;
 frmShowDocuments.slServer.AddStrings(slServer);
 frmShowDocuments.slUser             := TStringList.Create;
 frmShowDocuments.slUser.AddStrings(slUser);
 frmShowDocuments.WindowState        := wsMaximized;
 ......
 Result                              := LongInt(frmShowDocuments);
end;
//******************************************************************************
exe
procedure TfrmMain.pmnuShowDocumentsClick(Sender: TObject);
var LibHandle     : THandle;
   ShowDocuments : function (slServer,slUser:TStringList):Longint;StdCall;
begin
 LibHandle := LoadLibrary('iHercules.dll');
 if LibHandle <> 0 then
 begin
   @ShowDocuments := GetProcAddress(LibHandle,'ShowDocuments');
   ShowDocuments(slServer,slUser);
 end;
end;
//******************************************************************************


Сергей М.   (2008-05-29 14:04:00) [25]

Ну хорошо.

Где реализована ф-ция SearchClient - в той самой твоей dll ?
Покажи код загрузки этой dll и все обращения к ее функциям , включая SearchClient


IntruderLab   (2008-05-29 14:00:00) [26]


> Сергей М. ©   (29.05.08 13:55) [16]
>
>
> > Короче, как я понял, при вызове дочерней формы из dll,
>  вообще
> > еще до обращения к коду
>
>
> Не надо галдать, надо взять в руки отладчик, найти конкретную
> строчку и показать нам соответствующий фрагмент кода, к
> контексте которого фигурирует эта строчка.
>

Это все понятно :) только win2000 у клиента в другом городе :) сейчас вынь2000 поставлю.


Сергей М.   (2008-05-29 13:55:00) [27]


> Короче, как я понял, при вызове дочерней формы из dll, вообще
> еще до обращения к коду


Не надо галдать, надо взять в руки отладчик, найти конкретнуюстрочку и показать нам соответствующий фрагмент кода, к контексте которого фигурирует эта строчка.


{RASkov}   (2008-05-29 13:54:00) [28]

> [14] IntruderLab   (29.05.08 13:44)

В королевстве можно поискать
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468
http://www.delphikingdom.com/asp/itemq.asp?ItemID=254
яндекс
http://yandex.ru/yandsearch?text=BPL+%2B+delphi&clid=9582


IntruderLab   (2008-05-29 13:44:00) [29]

И еще встречный вопрос, можно ссылочку где про пакеты можно почитать


IntruderLab   (2008-05-29 13:40:00) [30]


> Palladin ©   (29.05.08 13:34) [12]
>
>
> > IntruderLab   (29.05.08 11:40) [9]
>
> в каком месте ты bpl используешь если черным по белому писано
>
> > в программе дочерние окна содержаться в dll
>

Я про это и спросил, формы тоже в bpl засовывать? Просто я галочку Включить BPL пакеты выставил. Но все же остается вопрос, почему в XP работает?


Palladin   (2008-05-29 13:34:00) [31]


> IntruderLab   (29.05.08 11:40) [9]

в каком месте ты bpl используешь если черным по белому писано

> в программе дочерние окна содержаться в dll


IntruderLab   (2008-05-29 13:34:00) [32]

Короче, как я понял, при вызове дочерней формы из dll, вообще еще до обращения к коду (типа в Init), самое смешное в WinXP все работает, ошибочка только в Win2000.


Сергей М.   (2008-05-29 13:30:00) [33]

на какой из приведенных строк происходит падение ?


IntruderLab   (2008-05-29 11:40:00) [34]

Дак и так BPL использую, я же и говорю что все работает в WinXP, но не работает в Win2000, или я все-таки что - то не понимаю (DLL в BPL как-то преобразовывать надо?, чет я запутался)


Palladin   (2008-05-29 11:36:00) [35]

...использовать не dll, а bpl


IntruderLab   (2008-05-29 11:31:00) [36]


> Palladin ©   (29.05.08 11:29) [6]
>
> о сколько раз твердили миру...

МИР слушает :) в чем траблы могут быть?


Palladin   (2008-05-29 11:29:00) [37]

о сколько раз твердили миру...


IntruderLab   (2008-05-29 11:20:00) [38]

ccon - как понимаете внешняя функция, ошибка не в коде программы а в реализации дочерних окон в MDI апликациях в win2000, может быть как - то компилятор перенасторить


IntruderLab   (2008-05-29 11:16:00) [39]


> TForumHelp ©   (29.05.08 11:12) [2]
>
> Если вылетает что-то типа:
> Access violation at address блаблабла in module 'блабла.
> exe'. Read of address блаблабла
> значит, что ты неправильно подключаешь библиотеку или сделал
> где-то FreeLibrary();
>
> гони код - разберемся - все ситуации перебирать не стану.
>

Нет вылетает именно приложение вызвало ошибку и будет закрыто. Создан журнал, ессно, что в журнале ничего нет. А по поводу ошибки в модулях - это уже в прошлом, сейчас обычно такое не вылетает :)


IntruderLab   (2008-05-29 11:15:00) [40]

Ну для примера могу привести :)
//************************************************************
function SearchClient(slServer:TStringList):String;StdCall;
var frmSearchClient:TfrmSearchClient;i:Integer;
begin
 frmSearchClient                    := TfrmSearchClient.Create(Application);
 frmSearchClient.Position           := poScreenCenter;
 frmSearchClient.BorderIcons        := [biSystemMenu];
 frmSearchClient.rCon               := TSocketConnection.Create(Application);
 ccon(frmSearchClient.rCon,slServer);
 frmSearchClient.ShowModal;
 try
   if frmSearchClient.lbClient.Items.Count > 0 then
   begin
     i := frmSearchClient.lbClient.ItemIndex;
     Result := frmSearchClient.lbClient.Items.Strings[i]
   end
   else Result := ' ';
 finally
   frmSearchClient.rCon.Free;
   frmSearchClient.Free;
 end;
end;
//************************************************************
FormStyle формы = fsMDIChild, у главного окна fsMDIForm, включены bpl пакеты, так что Application - общая для всего пакета. Код отрабатывает на WinXP на ура и выдает оибку в Win2000


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо