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

Вниз

Проблема с использованием 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1314451347
Rouse_
2011-08-27 17:22
2011.12.18
Так проверим же алгебру гармонией! :)


8-1221403444
Nevalyashka
2008-09-14 18:44
2011.12.18
формат MusicXML


2-1315648401
Pushok
2011-09-10 13:53
2011.12.18
При закрытии Delphi вылетает AV


4-1252399230
Jeyson
2009-09-08 12:40
2011.12.18
одно и тоже консольное приложение работает по разному


6-1248268608
Olleg_ator
2009-07-22 17:16
2011.12.18
POP3 кодировка KOI