![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов функции из dll [D7, WinXP]
Vsr © (2005-07-27 14:28:00)Доброго времени суток! В приложении есть две функции: одна сохраняет настройки в реестр, другая их считывает. Решил перенести их в библиотеку.
library cd;
....
function ReadOptionFromRegistry(Option : TRadioButton; SubKey : PChar; Node: PChar) : boolean;
var R : TRegistry;
StateInt : byte;
St : boolean;
begin
R:=TRegistry.Create;
try
result:=R.OpenKey(SubKey,false);
if not result then exit;
if R.ValueExists(Node) then begin
StateInt:=R.ReadInteger(Node);
Move(StateInt,St,1);
Option.Checked:=St;
end;
finally
R.Free;
end;
end;
В момент вызова библиотеки на строке LibHandle := LoadLibrary(PChar('cd.dll')); ловлю exception "Cannot create application object in a shared object or library"
procedure TForm2.FormActivate(Sender: TObject);
var ReadOptionFromRegistry: TReadOptionFromRegistry;
begin
try
LibHandle := LoadLibrary(PChar('cd.dll'));
if LibHandle = 0 then
raise Exception.Create('Unable to Load DLL ...')
else
begin
try @ReadOptionFromRegistry := GetProcAddress(LibHandle, 'ReadOptionFromRegistry');
if @ReadOptionFromRegistry <> nil then
if ReadOptionFromRegistry(RadioButton1, PChar('Software\CDLibrary\Options'), PChar('CommonName')) then
begin
RadioButton1.Checked:=RadioButton1.Checked;
end;
except
on E: Exception do
ShowMessage('Exception error: ' + E.Message);
end;
end;
finally
FreeLibrary(LibHandle);
end;
end;
Понимаю, что в длл взяться Application неоткуда. А вот как передавать указатель на него, что-то не могу понять. Помогите разобраться.
evvcom (2005-07-27 15:04:00) [1]
> Решил перенести их в библиотеку.
И нафига? Build with runtime packages - галка естественно не стоит?
Vsr (2005-07-27 15:01:00) [2]:-(
не помогло
han_malign (2005-07-27 14:53:00) [3]uses Forms из DLL убери