![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызвать функцию exe из dll
petvv © (2011-08-29 09:59:00)Собственно сабж, как ???
Ф-ю dll из exe понятно, а наоборот ?
petvv (2011-08-29 10:49:00) [1]в натуре дибил
про***
вот это
ACOS:= TPCSCCard_ACOS.Create(nil);
Dimka Maslov (2011-08-29 10:44:00) [2]Что такое ACOS? Глобальная переменная? А кто её в dll инициализировать будет?
petvv (2011-08-29 10:38:00) [3]Может быть это и ошибка проектирования.
Проблема вот в чём.
Есть функция:
function UpdateReadersList : Boolean;
var
psa : PSafeArray;
i, ReadersCount : Integer;
Readers : BSTRArray;
ArrayData : pointer;
s:String;
begin
Result:=False;
try
psa := Info.ListReaders;
SafeArrayGetUBound(psa,1,ReadersCount);
SafeArrayAccessData( psa, ArrayData );
Readers := BSTRArray(ArrayData);
if ReadersCount<>0 then
begin
sReader:=Readers[0];
ACOS.ConnectionReader := sReader; *****************
Capture.InitializeCapture;
Monitoring.InitializeMonitoring;
Result:=True;
end;
SafeArrayDestroy(psa);
except
on E: EOleSysError do
Result:=False;
on E: Exception do
begin
Result:=False; <<<<<<<<<
s:=E.Message;
end;
end;
end;
Когда пишу сею функцию в ехе всё пучком фунциклирует, а когда ставлю её в dll в строке помеченной ***************** вываливаемся с AV в строку <<<<<<<<<
Где логика? Или у меня руки кривые.
Inovet (2011-08-29 10:28:00) [4]Перекрёстные вызовы exe<->dll - сорее всего ошибка проектирования.
petvv (2011-08-29 10:13:00) [5]Если не трудно, можно небольшой примерчик. Я только разбираюсь.
Dimka Maslov (2011-08-29 10:06:00) [6]Поскольку dll и exe структурно одно и тоже, в exe тоже могут быть экспортируемые функции. И пользоваться GetProcAddress тоже не запрещено. hInstance exeшника определяется как GetModuleHandle(nil)