Вопрос по dll и com-интерфейсах
Добавлено: 27 авг 2007, 19:43
Всем привет!
try
result:=true;
h:=LoadLibrary(PAnsiChar(path));
addr:=GetProcAddress(h,PChar('GetObject'));
dllobject:=addr;
TComponent(dllobject^).GetInterface(IUnitsInformation,intr);
new(info);
info^.name:=intr.GetName;
info^.version:=intr.GetVersion;
info^.path:=path;
addr1:=GetProcAddress(h,PChar('CloseModule'));
addr1;
FreeLibrary(h);
InfoList.Add(info);
except
result:=false;
exit;
end;
Этот код вылетает на строке InfoList.Add(info);(вообще говоря он вылетает после закрытия библиотеки) с ошибкой
---------------------------
Debugger Exception Notification
---------------------------
Project Monopolia.exe raised exception class EAccessViolation with message 'Access violation at address 004046DE in module 'Monopolia.exe'. Read of address 02B1F054'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Все переменные созданы интерфейс получается, длл нормальная(этот код неработает даже если 2 вызываемые из длл процедуры пустые). Что собствненно за нафиг такой?
try
result:=true;
h:=LoadLibrary(PAnsiChar(path));
addr:=GetProcAddress(h,PChar('GetObject'));
dllobject:=addr;
TComponent(dllobject^).GetInterface(IUnitsInformation,intr);
new(info);
info^.name:=intr.GetName;
info^.version:=intr.GetVersion;
info^.path:=path;
addr1:=GetProcAddress(h,PChar('CloseModule'));
addr1;
FreeLibrary(h);
InfoList.Add(info);
except
result:=false;
exit;
end;
Этот код вылетает на строке InfoList.Add(info);(вообще говоря он вылетает после закрытия библиотеки) с ошибкой
---------------------------
Debugger Exception Notification
---------------------------
Project Monopolia.exe raised exception class EAccessViolation with message 'Access violation at address 004046DE in module 'Monopolia.exe'. Read of address 02B1F054'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Все переменные созданы интерфейс получается, длл нормальная(этот код неработает даже если 2 вызываемые из длл процедуры пустые). Что собствненно за нафиг такой?