Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1315288804
TrashReg
2011-09-06 10:00
2011.12.18
Ключи реестра Windows


2-1315135096
Pcrepair
2011-09-04 15:18
2011.12.18
Блокировка клавы и мыши для активных приложений


3-1268739476
Rob
2010-03-16 14:37
2011.12.18
СУБД с возможностью хранения текстовых документов в сжатом виде.


2-1315865245
Gu
2011-09-13 02:07
2011.12.18
Отловить закрытие приложения


15-1314544353
alexdn
2011-08-28 19:12
2011.12.18
Переименовать файл в винде





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