powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при вызове процедуры из dll'ки
19 сообщений из 19, страница 1 из 1
Ошибка при вызове процедуры из dll'ки
    #32123317
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая тема.

вызывается процедура, в которой выполняется ряд вычислений / внесения данных.

потом вызывается метод free :
wb.free;

История такая: когда у меня эта процедура прописана в том же модуле, где и основная программа: procedure TForm1.AddRecordToXLS( ... ); - все работает нормально.

Когда я выношу эту процедуру ( procedure AddRecordToXLS( ... ); ) в отдельную dll ' ку - то при вызове метода free: wb.free;

у меня вылетает ошибка:
Project c:\ ..... faulted with message: 'access violation at 0x00000000: read of address 0x00000000'.

что за хрень, подскажите плз !...


в dll'ку выношу следующим макаром:
в dll'ке:

procedure AddRecordToXLS( ... );
begin
....
end;

exports AddRecordToXLS;


в программе:
procedure AddRecordToXLS (... ); external 'export2excel.dll';
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123323
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Заголовок процедуры и код ее вызова В СТУДИЮ!
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123338
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процедура:

procedure AddRecordToXLS(sh: TvteXLSWorksheet; Rec: TFields; StartRow: integer; StartCol: integer; StartField: integer); safecall;
var i: integer;
DateTime :double;
begin
for i := StartField to Rec.Count - 1 do
begin
if Rec.Fields .DataType = ftDateTime then
begin
DateTime := Rec.Fields.Value;
sh.Ranges[ StartCol + i - StartField, StartRow, StartCol + i - StartField, StartRow].Value := DateTime;
sh.Ranges[ StartCol + i - StartField, StartRow, StartCol + i - StartField, StartRow].Format := 'dd/mm/yy';
end
else sh.Ranges[ StartCol + i - StartField, StartRow, StartCol + i - StartField, StartRow].Value := Rec.Fields.Value;
SetCell2(sh.Ranges[ StartCol + i - StartField, StartRow, StartCol + i - StartField, StartRow], True);
end;
end;


(safecall - что с ним, что без - трабл остается)
sh - лист Excel'я, wb - WorkBook Excel'я.
спецбиблиотечки используются (vte).

в процедуре добавляется строка из базы в лист Екселя.

вызов процедуры в программе:
AddRecordToXLS(sh, ADOQuery1.Fields, Row, Col, 1);


В конце программы я сохраняю этот wb в формате XLS и вызываю wb.free. вылетает ошибка..
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123345
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
TvteXLSWorksheet - это тип variant?
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123349
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет..

спецтип..

в памяти создается WorkBook со структурой, похожей на Excel'ную..
TvteXLSWorksheet - WorkSheet со структурой, похожей на Excel'ный WorkSheet.

использую эту хрень, дабы не возиться с Excel'ем (медленно с ним да и ненадежно.. :( )..

http://www.vtktools.ru/
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123357
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Кинь полное описание типа. Проблема, кажется, именно в нем.
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123360
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
куда скинуть?..

я могу целиком эту библиотечку скинуть..
в архиве (рар) - 500 кб. (для Дельфи + Дока)

полная (с библиотеками для Си + Пример) - 1.2 Мб
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123361
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Нет, кинь следующее:
TvteXLSWorksheet = type... и так далее. Только описание типа.
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123371
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
последняя версия этой библиотеки - 1.3.3.
исходный текст - тока для 1.1.
(но принципиальных изменений в ней скорее всего нет)..

//////////////////////////////
//
// TvteXLSWorksheet
//
//////////////////////////////
TvteXLSWorksheet = class(TObject)
private
FWorkbook : TvteXLSWorkbook;
FTitle : string;
FPageSetup : TvteXLSPageSetup;

FRanges : TList;
FCols : TList;
FRows : TList;

FDimensions : TRect; // sizes of worksheet in cells

procedure SetTitle(Value : string);
function GetRange(xl,yt,xr,yb : integer) : TvteXLSRange;
function GetCol(ColIndex : integer) : TvteXLSCol;
function GetRow(RowIndex : integer) : TvteXLSRow;
function GetRangesCount : integer;
function GetXLSRange(RangeIndex : integer) : TvteXLSRange;
function GetColsCount : integer;
function GetRowsCount : integer;
function GetIndexInWorkBook : integer;
function GetColByIndex(i : integer) : TvteXLSCol;
function GetRowByIndex(i : integer) : TvteXLSRow;

function AddRange(xl,yt,xr,yb : integer) : TvteXLSRange;
function AddRow(RowIndex : integer) : TvteXLSRow;
function AddCol(ColIndex : integer) : TvteXLSCol;
public
property Title : string read FTitle write SetTitle;
property PageSetup : TvteXLSPageSetup read FPageSetup;
property Ranges[xl,yt,xr,yb : integer] : TvteXLSRange read GetRange; default;
property Cols[ColIndex : integer] : TvteXLSCol read GetCol;
property Rows[RowIndex : integer] : TvteXLSRow read GetRow;
property RangeByIndex[RangeIndex : integer] : TvteXLSRange read GetXLSRange;
property RangesCount : integer read GetRangesCount;
property ColByIndex[ColIndex : integer] : TvteXLSCol read GetColByIndex;
property ColsCount : integer read GetColsCount;
property RowByIndex[RowIndex : integer] : TvteXLSRow read GetRowByIndex;
property RowsCount : integer read GetRowsCount;
property IndexInWorkBook : integer read GetIndexInWorkBook;

property Workbook : TvteXLSWorkbook read FWorkbook;
property Dimensions : TRect read FDimensions;

function FindRange(xl,yt,xr,yb : integer) : TvteXLSRange;
function FindRow(RowIndex : integer) : TvteXLSRow;
function FindCol(ColIndex : integer) : TvteXLSCol;

constructor Create(AWorkbook : TvteXLSWorkbook);
destructor Destroy; override;
end;
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123374
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Sorry, я не заметил wb.free :-(
А ты handle dll-application сохраняешь/восстанавливаешь?
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123377
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мм.. ничего не делаю с handle dll-application.
что-то надо делать?..

но скажем так, я использую из этой dll несколько функций, и все нормально работает (тоже с этими классами - TvteXLSWorksheet). а когда вынес эту процедуру - начались проблемы при вызове wb.free ..
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123379
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
Здесь посмотри: /topic/25673
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123389
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А.. это уже было.. :) ок. thx
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123398
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не врубаюсь.. :(

у меня не создается форма в DLL'ке.. только функция..
и что делать с Handle мне тоже непонятно.. :(
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123414
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда.... по мойму заставить это работать юудет проблематично.... в библиотеке ты перераспределяешь память, работая с вариантом... а потом приложение освобождает ее... попробуй ВЕСЬ модуль работы с Excel вынести в dll
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32123434
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а.. упс...
возможно, как раз поэтому у меня работают другие процедуры - в них я только меняю значения уже существующих переменных, не создавая новых..
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32124247
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вполне возможно.....
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32124248
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотри тут
...
Рейтинг: 0 / 0
Ошибка при вызове процедуры из dll'ки
    #32124251
Sem H
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ок. спасибо.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка при вызове процедуры из dll'ки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]