Форум: "Основная";
Текущий архив: 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] Ïîìèëêà ôóíêö³¿ test1",mtError,[mbOk],0);
finally
FreeLibrary(LHandle); !!! здесь ошибка !!!
end
else MessageDlg("Á³áë³îòåêà íå çíàéäåíà.",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] Ïîìèëêà",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] Ïîìèëêà ôóíêö³¿ test1",mtError,[mbOk],0);
finally
FreeLibrary(LHandle); !!! здесь ошибка !!!
end
else MessageDlg("Á³áë³îòåêà íå çíàéäåíà.",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] Ïîìèëêà",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.037 c