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

Вниз

не вигружается dll   Найти похожие ветки 

 
zorik ©   (2004-04-23 14:23) [0]

Здраствуйте! У меня проблема. При статической загрузке dll все ок, а вот при динамической если в самой dll возникает ошибка - она не вігружается. В чем проблема? В функци dll все написано через try except finally


 
zorik ©   (2004-04-23 14:23) [0]

Здраствуйте! У меня проблема. При статической загрузке dll все ок, а вот при динамической если в самой dll возникает ошибка - она не вігружается. В чем проблема? В функци dll все написано через try except finally


 
zorik ©   (2004-04-23 14:51) [1]

неужели никто не знает!???


 
zorik ©   (2004-04-23 14:51) [1]

неужели никто не знает!???


 
evvcom ©   (2004-04-23 15:03) [2]

Проблема в том, что надо НАЙТИ и ИСПРАВИТЬ ошибки, возникающие в dll


 
evvcom ©   (2004-04-23 15:03) [2]

Проблема в том, что надо НАЙТИ и ИСПРАВИТЬ ошибки, возникающие в dll


 
VMcL ©   (2004-04-23 15:07) [3]

>>zorik ©  (23.04.04 14:23)
>>zorik ©  (23.04.04 14:51) [1]

Исходя из твоих формулировок, думаю, помочь тебе смогут только телепаты.


 
VMcL ©   (2004-04-23 15:07) [3]

>>zorik ©  (23.04.04 14:23)
>>zorik ©  (23.04.04 14:51) [1]

Исходя из твоих формулировок, думаю, помочь тебе смогут только телепаты.


 
zorik ©   (2004-04-23 15:19) [4]

В dll вызывается модальная форма с гридом для редактирования. При выполнении ApplyUpdates возникает ошибка (в некоторых случаях. напр. при неправильном вводе даных (-200 год)). Ето все реализовано так:
procedure TfFactn.Button1Click(Sender: TObject);
begin
 try
   qFactn.ApplyUpdates;
 except
   ShowMessage("Error");
 end;
end;
Так вот если ошибки не было - все нормально выгружается, а если была то теряется handle на библиотеку в основной програме и на FreeLibrary(LHandle) програма виснет


 
zorik ©   (2004-04-23 15:19) [4]

В dll вызывается модальная форма с гридом для редактирования. При выполнении ApplyUpdates возникает ошибка (в некоторых случаях. напр. при неправильном вводе даных (-200 год)). Ето все реализовано так:
procedure TfFactn.Button1Click(Sender: TObject);
begin
 try
   qFactn.ApplyUpdates;
 except
   ShowMessage("Error");
 end;
end;
Так вот если ошибки не было - все нормально выгружается, а если была то теряется handle на библиотеку в основной програме и на FreeLibrary(LHandle) програма виснет


 
evvcom ©   (2004-04-23 15:21) [5]

Что такое qFactn? Где объявлена, создана? Может быть еще много вопросов...


 
evvcom ©   (2004-04-23 15:21) [5]

Что такое qFactn? Где объявлена, создана? Может быть еще много вопросов...


 
Digitman ©   (2004-04-23 15:39) [6]


> если была то теряется handle на библиотеку в основной програме


никуда он не теряется, если. конечно, ты сам его не потерял


> на FreeLibrary(LHandle) програма виснет


значит, что-то не в порядке в алгоритме самой DLL


 
Digitman ©   (2004-04-23 15:39) [6]


> если была то теряется handle на библиотеку в основной програме


никуда он не теряется, если. конечно, ты сам его не потерял


> на FreeLibrary(LHandle) програма виснет


значит, что-то не в порядке в алгоритме самой DLL


 
zorik ©   (2004-04-26 12:42) [7]

Основная форма:

object Form1: TForm1
 Left = 255
 Top = 354
 Width = 696
 Height = 480
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 184
   Top = 112
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
 object IBDatabase1: TIBDatabase
   Connected = True
   DatabaseName = "C:\MREP.GDB"
   Params.Strings = (
     "lc_ctype=WIN1251"
     "user_name=sysdba"
     "password=keymaster")
   LoginPrompt = False
   Left = 344
   Top = 88
 end
 object IBTransaction1: TIBTransaction
   DefaultDatabase = IBDatabase1
   Params.Strings = (
     "read_committed"
     "rec_version"
     "nowait")
   Left = 376
   Top = 88
 end
end

procedure TForm1.Button1Click(Sender: TObject);
var
 t2: procedure(BaseHandle: TISC_DB_HANDLE); stdcall;
 LHandle: THandle;
begin
 @t2 := nil;
 LHandle := LoadLibrary(PChar("PROJECT1.DLL"));
 if LHandle >= 32 then
 try
   @t2 := GetProcAddress(LHandle,PChar("TEST1"));
   if @t2 <> nil
     then t2(IBDataBase1.Handle)
     else MessageDlg("[0033] &#207;&#238;&#236;&#232;&#235;&#234;&#224; &#244;&#243;&#237;&#234;&#246;&#179;&#191; test1",mtError,[mbOk],0);
 finally
   FreeLibrary(LHandle);  !!! здесь ошибка !!!
 end
 else MessageDlg("&#193;&#179;&#225;&#235;&#179;&#238;&#242;&#229;&#234;&#224; &#237;&#229; &#231;&#237;&#224;&#233;&#228;&#229;&#237;&#224;.",mtError,[mbOk],0);
end;

Форма из dll

bject Form1: TForm1
 Left = 221
 Top = 107
 Width = 696
 Height = 480
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object DBGrid1: TDBGrid
   Left = 24
   Top = 16
   Width = 320
   Height = 120
   DataSource = DataSource1
   TabOrder = 0
   TitleFont.Charset = DEFAULT_CHARSET
   TitleFont.Color = clWindowText
   TitleFont.Height = -11
   TitleFont.Name = "MS Sans Serif"
   TitleFont.Style = []
 end
 object DBNavigator1: TDBNavigator
   Left = 24
   Top = 144
   Width = 240
   Height = 25
   DataSource = DataSource1
   TabOrder = 1
 end
 object Button1: TButton
   Left = 24
   Top = 184
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 2
   OnClick = Button1Click
 end
 object Base1: TIBDatabase
   LoginPrompt = False
   Left = 160
   Top = 112
 end
 object IBTransaction1: TIBTransaction
   DefaultDatabase = Base1
   Params.Strings = (
     "read_committed"
     "rec_version"
     "nowait")
   Left = 208
   Top = 112
 end
 object IBQuery1: TIBQuery
   Database = Base1
   Transaction = IBTransaction1
   CachedUpdates = True
   SQL.Strings = (
     "select * from FACTN")
   UpdateObject = IBUpdateSQL1
   Left = 256
   Top = 112
 end
 object DataSource1: TDataSource
   DataSet = IBQuery1
   Left = 336
   Top = 112
 end
 object IBUpdateSQL1: TIBUpdateSQL
   RefreshSQL.Strings = (
     "Select "
     "  ID_TSEH,"
     "  ID_ROD,"
     "  QO,"
     "  QOG,"
     "  QPG,"
     "  QC,"
     "  COMMENT,"
     "  YEAR_FACTN,"
     "  MONTH_FACTN"
     "from FACTN "
     "where"
     "  ID_ROD = :ID_ROD and"
     "  ID_TSEH = :ID_TSEH and"
     "  MONTH_FACTN = :MONTH_FACTN and"
     "  YEAR_FACTN = :YEAR_FACTN")
   ModifySQL.Strings = (
     "update FACTN"
     "set"
     "  COMMENT = :COMMENT,"
     "  ID_ROD = :ID_ROD,"
     "  ID_TSEH = :ID_TSEH,"
     "  MONTH_FACTN = :MONTH_FACTN,"
     "  QC = :QC,"
     "  QO = :QO,"
     "  QOG = :QOG,"
     "  QPG = :QPG,"
     "  YEAR_FACTN = :YEAR_FACTN"
     "where"
     "  ID_ROD = :OLD_ID_ROD and"
     "  ID_TSEH = :OLD_ID_TSEH and"
     "  MONTH_FACTN = :OLD_MONTH_FACTN and"
     "  YEAR_FACTN = :OLD_YEAR_FACTN")
   InsertSQL.Strings = (
     "insert into FACTN"
     
       "  (COMMENT, ID_ROD, ID_TSEH, MONTH_FACTN, QC, QO, QOG, QPG, YEAR" +
       "_FACTN)"
     "values"
     
       "  (:COMMENT, :ID_ROD, :ID_TSEH, :MONTH_FACTN, :QC, :QO, :QOG, :Q" +
       "PG, :YEAR_FACTN)")
   DeleteSQL.Strings = (
     "delete from FACTN"
     "where"
     "  ID_ROD = :OLD_ID_ROD and"
     "  ID_TSEH = :OLD_ID_TSEH and"
     "  MONTH_FACTN = :OLD_MONTH_FACTN and"
     "  YEAR_FACTN = :OLD_YEAR_FACTN")
   Left = 296
   Top = 112
 end
end

функция вызова

procedure Test1(BaseHandle: TISC_DB_HANDLE); stdcall;
var
 s: String;
begin
 try
   try
     Form1:=TForm1.Create(Application);
     with Form1 do
     begin
       Base1.SetHandle(BaseHandle);
       IBQuery1.Open;
       ShowModal;
       Base1.CloseDataSets;
       Base1.Close;
       Base1.SetHandle(nil);
     end;
   finally
     if Assigned(Form1) then Form1.Free;
   end;
 except
   MessageDlg("[0032] &#207;&#238;&#236;&#232;&#235;&#234;&#224;",mtError,[mbOk],0);
 end;
end;

А вот здесь если возникает ошибка то handle d модуле вызова теряется а если нет - то не теряется

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
   IBQuery1.ApplyUpdates;
 except
 end;
end;


 
zorik ©   (2004-04-26 12:42) [7]

Основная форма:

object Form1: TForm1
 Left = 255
 Top = 354
 Width = 696
 Height = 480
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 184
   Top = 112
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
 object IBDatabase1: TIBDatabase
   Connected = True
   DatabaseName = "C:\MREP.GDB"
   Params.Strings = (
     "lc_ctype=WIN1251"
     "user_name=sysdba"
     "password=keymaster")
   LoginPrompt = False
   Left = 344
   Top = 88
 end
 object IBTransaction1: TIBTransaction
   DefaultDatabase = IBDatabase1
   Params.Strings = (
     "read_committed"
     "rec_version"
     "nowait")
   Left = 376
   Top = 88
 end
end

procedure TForm1.Button1Click(Sender: TObject);
var
 t2: procedure(BaseHandle: TISC_DB_HANDLE); stdcall;
 LHandle: THandle;
begin
 @t2 := nil;
 LHandle := LoadLibrary(PChar("PROJECT1.DLL"));
 if LHandle >= 32 then
 try
   @t2 := GetProcAddress(LHandle,PChar("TEST1"));
   if @t2 <> nil
     then t2(IBDataBase1.Handle)
     else MessageDlg("[0033] &#207;&#238;&#236;&#232;&#235;&#234;&#224; &#244;&#243;&#237;&#234;&#246;&#179;&#191; test1",mtError,[mbOk],0);
 finally
   FreeLibrary(LHandle);  !!! здесь ошибка !!!
 end
 else MessageDlg("&#193;&#179;&#225;&#235;&#179;&#238;&#242;&#229;&#234;&#224; &#237;&#229; &#231;&#237;&#224;&#233;&#228;&#229;&#237;&#224;.",mtError,[mbOk],0);
end;

Форма из dll

bject Form1: TForm1
 Left = 221
 Top = 107
 Width = 696
 Height = 480
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object DBGrid1: TDBGrid
   Left = 24
   Top = 16
   Width = 320
   Height = 120
   DataSource = DataSource1
   TabOrder = 0
   TitleFont.Charset = DEFAULT_CHARSET
   TitleFont.Color = clWindowText
   TitleFont.Height = -11
   TitleFont.Name = "MS Sans Serif"
   TitleFont.Style = []
 end
 object DBNavigator1: TDBNavigator
   Left = 24
   Top = 144
   Width = 240
   Height = 25
   DataSource = DataSource1
   TabOrder = 1
 end
 object Button1: TButton
   Left = 24
   Top = 184
   Width = 75
   Height = 25
   Caption = "Button1"
   TabOrder = 2
   OnClick = Button1Click
 end
 object Base1: TIBDatabase
   LoginPrompt = False
   Left = 160
   Top = 112
 end
 object IBTransaction1: TIBTransaction
   DefaultDatabase = Base1
   Params.Strings = (
     "read_committed"
     "rec_version"
     "nowait")
   Left = 208
   Top = 112
 end
 object IBQuery1: TIBQuery
   Database = Base1
   Transaction = IBTransaction1
   CachedUpdates = True
   SQL.Strings = (
     "select * from FACTN")
   UpdateObject = IBUpdateSQL1
   Left = 256
   Top = 112
 end
 object DataSource1: TDataSource
   DataSet = IBQuery1
   Left = 336
   Top = 112
 end
 object IBUpdateSQL1: TIBUpdateSQL
   RefreshSQL.Strings = (
     "Select "
     "  ID_TSEH,"
     "  ID_ROD,"
     "  QO,"
     "  QOG,"
     "  QPG,"
     "  QC,"
     "  COMMENT,"
     "  YEAR_FACTN,"
     "  MONTH_FACTN"
     "from FACTN "
     "where"
     "  ID_ROD = :ID_ROD and"
     "  ID_TSEH = :ID_TSEH and"
     "  MONTH_FACTN = :MONTH_FACTN and"
     "  YEAR_FACTN = :YEAR_FACTN")
   ModifySQL.Strings = (
     "update FACTN"
     "set"
     "  COMMENT = :COMMENT,"
     "  ID_ROD = :ID_ROD,"
     "  ID_TSEH = :ID_TSEH,"
     "  MONTH_FACTN = :MONTH_FACTN,"
     "  QC = :QC,"
     "  QO = :QO,"
     "  QOG = :QOG,"
     "  QPG = :QPG,"
     "  YEAR_FACTN = :YEAR_FACTN"
     "where"
     "  ID_ROD = :OLD_ID_ROD and"
     "  ID_TSEH = :OLD_ID_TSEH and"
     "  MONTH_FACTN = :OLD_MONTH_FACTN and"
     "  YEAR_FACTN = :OLD_YEAR_FACTN")
   InsertSQL.Strings = (
     "insert into FACTN"
     
       "  (COMMENT, ID_ROD, ID_TSEH, MONTH_FACTN, QC, QO, QOG, QPG, YEAR" +
       "_FACTN)"
     "values"
     
       "  (:COMMENT, :ID_ROD, :ID_TSEH, :MONTH_FACTN, :QC, :QO, :QOG, :Q" +
       "PG, :YEAR_FACTN)")
   DeleteSQL.Strings = (
     "delete from FACTN"
     "where"
     "  ID_ROD = :OLD_ID_ROD and"
     "  ID_TSEH = :OLD_ID_TSEH and"
     "  MONTH_FACTN = :OLD_MONTH_FACTN and"
     "  YEAR_FACTN = :OLD_YEAR_FACTN")
   Left = 296
   Top = 112
 end
end

функция вызова

procedure Test1(BaseHandle: TISC_DB_HANDLE); stdcall;
var
 s: String;
begin
 try
   try
     Form1:=TForm1.Create(Application);
     with Form1 do
     begin
       Base1.SetHandle(BaseHandle);
       IBQuery1.Open;
       ShowModal;
       Base1.CloseDataSets;
       Base1.Close;
       Base1.SetHandle(nil);
     end;
   finally
     if Assigned(Form1) then Form1.Free;
   end;
 except
   MessageDlg("[0032] &#207;&#238;&#236;&#232;&#235;&#234;&#224;",mtError,[mbOk],0);
 end;
end;

А вот здесь если возникает ошибка то handle d модуле вызова теряется а если нет - то не теряется

procedure TForm1.Button1Click(Sender: TObject);
begin
 try
   IBQuery1.ApplyUpdates;
 except
 end;
end;


 
Digitman ©   (2004-04-26 12:51) [8]

что, прямо так и пишет, мол, "потерялся handle" ? Мол, нашедшему полагается вознаграждение ?

на основании чего ты сделал умозаключение о какой-то "потере" какого-то "handle" ?


 
Digitman ©   (2004-04-26 12:51) [8]

что, прямо так и пишет, мол, "потерялся handle" ? Мол, нашедшему полагается вознаграждение ?

на основании чего ты сделал умозаключение о какой-то "потере" какого-то "handle" ?



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

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

Наверх




Память: 0.52 MB
Время: 0.039 c
1-1082539026
WebErr
2004-04-21 13:17
2004.05.09
Не могу сделать "друга" StringGrid у !


3-1081493092
kalishenko
2004-04-09 10:44
2004.05.09
Lookup-поле в DBGridEh


3-1081936636
infom
2004-04-14 13:57
2004.05.09
Подскажите ссылки на документы


3-1081358815
romeo
2004-04-07 21:26
2004.05.09
Отслеживание изменения таблицы


3-1081879329
3APA3A
2004-04-13 22:02
2004.05.09
Создание DATABASE в FireBird...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский