![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при вызове функции из DLL [D7, WinXP]
Sphinxx © (2005-01-24 01:08:00)Вот не могу понять, почему при повторном вызове функции, находящейся в DLL, из основной программы вылетает ошибка 'access violation...'?
Вот что у меня в DLL'ке (функция FindIt абсолютно отлажена, так что ошибка не там):
function GetProps(base,srch_text:string): ansistring;stdcall;
var db:string;
i:integer;
begin
result:='';
db := lowercase('.\'+base+'.xml');
if fileexists(db) then
begin
if inited then begin
with DataSet do
begin
Active := false;
FileName := db;
active := true;
if FindIt(DataSet,[DataSet.FieldByName('Name').Index],false,true,srch_text) then
for i:=0 to dataset.FieldCount-1 do
result := result + dataset.Fields[i].AsString + '^';
close;
end;
end
else showmessage('База не инициализирована!')
end
else result:='-1';
end;
Digitman (2005-01-24 09:05:00) [1]
> Sphinxx
просто собери оба проекта с опцией Build With Run-Time Packages, и не нужны будут никакие "шаромемы" .. правда, "таскать" придется bpl-модули
Sphinxx (2005-01-24 01:57:00) [2]ок, я разобрался, спасибо...
вот что скажу вдогонку тем, у кого возникает подобная проблема:
Есть такой модуль FastShareMem, он в отличие от ShareMem не требует библиотеки borlndmm.dll, т.е. ее не придется таскать вместе с исполняемым файлом, работает быстрее (как заверяет автор).
Sphinxx (2005-01-24 01:29:00) [3]Так что в данном случае сделать-то можно?
Sphinxx (2005-01-24 01:26:00) [4]вот кстати единственная строчка, которая эту функцию использует в основной программе (написана она на той же самой дельфе):
showmessage(getprops('Dell',editbox1.Text));
palva (2005-01-24 01:20:00) [5]Строка result создается в dll (одним менеджером памяти), а освобождатеся в основной программе при вторичном присваивании другой строки (в основной программе другой менеджер памяти). Если основная программа написана на Delphi той же версии, то, говорят, помогает uses ShareMem. Но по-моему это тоже извращение.