Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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

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

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


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

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


 
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]

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


 
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? Где объявлена, создана? Может быть еще много вопросов...


 
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;


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

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

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



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
1-1079730463
Mirror
2004-03-20 00:07
2004.04.11
MDI


1-1079975560
555ААА555
2004-03-22 20:12
2004.04.11
Принтер и миллиметры


1-1080114882
1111111111
2004-03-24 10:54
2004.04.11
TRichEdit с возможностью вставки рисунков


3-1079349068
Russko
2004-03-15 14:11
2004.04.11
AutoInc Field


1-1080211100
blaster
2004-03-25 13:38
2004.04.11
две линии