Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
ВнизПроблема с использованием dll Найти похожие ветки
← →
LinkolnBurrows © (2011-09-05 13:30) [0]Не пойму в чем проблема. создал библиотеку с 1 процедурой переноса содержимого adoquery в excel. При использовании данной библиотеки программа первый раз выполняет все как надо а на 2 или 3 раз(как повезет) критует с ошибкой: Project C:\.. .\Project1.exe faulted with message:"access violation at 0x0040636d: write od adress 0x00030c70". Process Stopped. Use Step or Run to continue.
Вот код процедуры:procedure ExportXLSADOQ(ADOQ: TADOQuery);
var
col, row: Integer;
ExcelApp: Variant;
TimeStart,TimeNow,TimeNeed: tDateTime;
begin
FrmST := TFrmST.Create(Application);
FrmST.Show;
ExcelApp := CreateOleObject("Excel.Application");
ExcelApp.WorkBooks.Add();
ExcelApp.WorkBooks[1].WorkSheets[1].Name := "1";
ADOQ.Active:=false;
ADOQ.Active:=true;
ADOQ.last;
for col := 0 to ADOQ.FieldCount-1 do
begin
ExcelApp.Workbooks[1].WorkSheets[1].cells[1,col+1]:=ADOQ.Fields[col].DisplayName;
ExcelApp.Workbooks[1].WorkSheets[1].cells[1,col+1].ColumnWidth:=round(length(ADOQ.Fields[col].AsString)*1.3);
end;
ADOQ.First;
FrmST.Gauge.MaxValue:=ADOQ.RecordCount;
TimeStart:=Time;
for row := 0 to ADOQ.RecordCount-1 do
begin
For col:=0 to ADOQ.FieldCount-1 do
Begin
ExcelApp.Workbooks[1].WorkSheets[1].cells[row+2,col+1].value:=ADOQ.Fields[col].AsString;
end;
FrmST.Gauge.Progress:=row+1;
TimeNow:=Time;
FrmST.Label6.Caption:=timetostr(TimeNow-TimeStart);
TimeNeed:=((ADOQ.RecordCount/(row+1))-1)*(TimeNow-TimeStart);
FrmST.Label5.Caption:=timetostr(TimeNeed);
FrmST.Label4.Caption:=inttostr(row+1)+"/"+inttostr(ADOQ.RecordCount);
ADOQ.Next;
end;
ExcelApp.Visible := true;
FrmST.free;
end;
← →
Медвежонок Пятачок © (2011-09-05 13:40) [1]здесь два лишних элемента:
1. библиотека.
2. программа юзающая ее.
← →
Anatoly Podgoretsky © (2011-09-05 14:00) [2]> LinkolnBurrows (05.09.2011 13:30:00) [0]
Не надо ДЛЛ
← →
Dimka Maslov © (2011-09-05 14:27) [3]dll обычно нужна когда несколько программ используют один и тот же функционал, изменение которого должно немедленно отражаться во всех программах без их перекомпиляции. Либо когда функционал пишется с использованием разных языков программирования. Во всех остальных случаях это лишняя морока.
← →
LinkolnBurrows © (2011-09-05 14:48) [4]понимаю что морока просто хочу заодно научиться dll создавать + сделаю чтото типа универсальной библиотеки быстрого вывода(так для себя хочу)
← →
Ega23 © (2011-09-05 15:57) [5]
> понимаю что морока просто хочу заодно научиться dll создавать
> + сделаю чтото типа универсальной библиотеки быстрого вывода(так
> для себя хочу)
- Как забить гвоздь микроскопом?
- Гвозди забиваются молотком, микроскоп используется для других целей.
- Понимаю, но хочу научиться микроскопом пользоваться + сделать универсальный гвоздезабиватель.
← →
Dimka Maslov © (2011-09-05 17:34) [6]
> LinkolnBurrows © (05.09.11 14:48) [4]
универсальная библиотека быстрого вывода (так для себя) легко создаётся через pas-файл, присовокупляемый ко всем подряд проектам. Чтобы научиться делать dll достаточно создать одну единственную dll с одной единственной функцией, которую и вызвать из своей программы. Параллельно можно внимательно прочитать опус в начале исходного файла с предупреждением о возможных проблемах с dll. От себя добавлю, что передача в/из dll объектов есть дополнительный способ приобретения проблем.
← →
DiamondShark © (2011-09-06 19:59) [7]
> procedure ExportXLSADOQ(ADOQ: TADOQuery);
А нефиг компоненты передавать.
Если уж так приспичило, передавайте родные АДОшные интрефейсы, COM для того и придуман, чтобы всё куда попало передавать.
А дельфёвые компоненты очень не любят, когда их потрошат два независимых менеджера памяти.
← →
DiamondShark © (2011-09-06 20:01) [8]
> Во всех остальных случаях это лишняя морока.
Монолитный экзешник на 100500 МБ -- это как орденский знак олдскульного дельфятника.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c