Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

Дочерние окна   Найти похожие ветки 

 
IntruderLab   (2008-05-29 11:03) [0]

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


 
Юрий Зотов ©   (2008-05-29 11:06) [1]

> IntruderLab   (29.05.08 11:03)

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


 
TForumHelp ©   (2008-05-29 11:12) [2]

Если вылетает что-то типа:
Access violation at address блаблабла in module "блабла.exe". Read of address блаблабла
значит, что ты неправильно подключаешь библиотеку или сделал где-то FreeLibrary();

гони код - разберемся - все ситуации перебирать не стану.


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

Ну для примера могу привести :)
//************************************************************
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


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


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

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


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

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


 
Palladin ©   (2008-05-29 11:29) [6]

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


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


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

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


 
Palladin ©   (2008-05-29 11:36) [8]

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


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

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


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

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


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

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


 
Palladin ©   (2008-05-29 13:34) [12]


> IntruderLab   (29.05.08 11:40) [9]

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

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


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


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

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


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

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


 
{RASkov} ©   (2008-05-29 13:54) [15]

> [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


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


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


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


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


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

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


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

Ну хорошо.

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


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

Хорошо, только я немного другую функция распишу, эта работает, вобщем не работают все вызовы немодальных форм.
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:28) [20]

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


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

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


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


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


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


> Result                              := LongInt(frmShowDocuments);


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

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


 
IntruderLab   (2008-05-29 14:43) [23]

Сейчас тогда уберу. И получается что мне лучше все функции гда формы вызывается без ответных параметров - сделать процедурами?


 
Сергей М. ©   (2008-05-29 14:52) [24]


> Сейчас тогда уберу


Зачем ?)


> получается что мне лучше все функции гда формы вызывается
> без ответных параметров - сделать процедурами?


А как будешь результат возвращать ?)


 
IntruderLab   (2008-05-29 15:07) [25]

Тогда вопрос, что мне сделать?


 
Сергей М. ©   (2008-05-29 15:10) [26]

Смотря что тебе надо)


 
IntruderLab   (2008-05-29 15:23) [27]

Мне надо, чтобы программа заработала на win2000 :) в идеале :) на ХР работет прекрасно :)


 
Сергей М. ©   (2008-05-29 15:36) [28]

Чтобы она заработала, надо четко осознавать происходящее в ней)

А ты до сих пор не знаешь, то ли убирать stdcall то ли не убирать, то ли функция тебе нужна то ли процедура)


 
IntruderLab   (2008-05-29 15:45) [29]

Мне важно знать - почему работает в ХР и не работает в 2000


 
Сергей М. ©   (2008-05-29 15:48) [30]

берешь отладчик и выясняешь)


 
IntruderLab   (2008-05-29 15:48) [31]

Дак отлаживать надо в 2000


 
Сергей М. ©   (2008-05-29 15:54) [32]

Ну так а кто за тебя это будет делать ?)


 
IntruderLab   (2008-05-29 15:56) [33]

Да я и чую :) Лана, спасибо! Как разберусь напишу чего было :)


 
Сергей М. ©   (2008-05-29 16:02) [34]

Только прежде надо понимать, что ты хочешь и что ты для этого делаешь)

К примеру, судя по stdcall, ты вознамерился использовать свою dll в модулях, собранных в иных средах разработки, нежели Делфи или BCB. Откуда там возьмутся дельфийские MDIParent-формы - одному тебе известно)


 
IntruderLab   (2008-05-29 16:10) [35]

дак а что тогда лучше safecall использовать?


 
Сергей М. ©   (2008-05-29 16:15) [36]


> а что тогда лучше safecall использовать?


Лучше отложить на время строгание кода и почитать соотв.литературу.

Или хотя бы станд.справку Делфи на тему "calling conventions".

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


 
IntruderLab   (2008-05-29 16:18) [37]

Код нигде не сдирал, просто в учебнике был вызов stdcall и стал применять как следствие, и все таки, из-за вызовов ошибка может в 2000 выскакивать или в чем?


 
Сергей М. ©   (2008-05-29 16:20) [38]


> Код нигде не сдирал, просто в учебнике был вызов stdcall


Ну вот с учебника и содрал. Бездумно)


 
Сергей М. ©   (2008-05-29 16:25) [39]


> из-за вызовов ошибка может в 2000 выскакивать или в чем?


ошибка может быть где угодно, когда ты не понимаешь что ты делаешь


 
Сергей М. ©   (2008-05-29 16:32) [40]


> еще до обращения к коду (типа в Init)


Никаким Init в приведенном тобой в [19] коде даже не пахнет.
Т.е. ты предоставляешь заведомо недостоверную инф-цию и при этом ожидаешь какой-то конкретной помощи)



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.141 c
2-1211805768
opoloXAI
2008-05-26 16:42
2008.06.22
CF_Text и CF_Bitmap вместе


2-1211812095
Kolan
2008-05-26 18:28
2008.06.22
Font.Size в конструкторе TLabel не устанавливается


2-1211959348
DmT
2008-05-28 11:22
2008.06.22
Терминал на канве


2-1212085608
assassin8899
2008-05-29 22:26
2008.06.22
Locate


4-1191969539
i
2007-10-10 02:38
2008.06.22
Пайпы и виста...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский