Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.17;
Скачать: CL | DM;

Вниз

Проблема с DLL   Найти похожие ветки 

 
Sanyok   (2003-03-04 19:03) [0]

Здравствуйте!

Хочу подгрузить тулбар из dll-ки.

В dll-ке пишу:


function getPanel : TFrToolBar;
var Res : TFrToolBar;
but : TFrTBButton;
begin
Res := TFrToolBar.Create (nil);
but := TFrTBButton.Create(Res);
Result := Res;
end;

exports getPanel;



В вызывающей программе:


type
TForm2 = class(TForm)
Button1: TButton;
frDock1: TfrDock;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
_tb : TFRToolBar;
_btn : TFRTBButton;
...

procedure TForm2.Button1Click(Sender: TObject);
type TF = function : TFrToolBar;
var lh : THandle;
fun : TF;
begin
lh := LoadLibrary ("../dll/project1.dll");
try
if lh = 0 then raise Exception.Create("Unable to load DLL");
@fun := GetProcAddress(lh, "getPanel");
if not (@fun=nil)
then
begin
try
_tb := fun;
_tb.Parent := form2;
_tb.Top := 10;
_tb.Left := 10;
_tb.AddToDock (frDock1);
except
on E:Exception do ShowMessage (E.Message)
end;

end
else RaiseLastWin32Error;
finally
FreeLibrary(lh);
end;

end;



Выдает ошибку:
Cann"t assign a TFont to a TFont
и дальше много-много акцесс виолейшнов...

В чем проблема? Что я не учел?


 
petr_v_a ©   (2003-03-04 19:13) [1]

Build c runtime пакетами.
Иначе у EXE и DLL разные таблицы RTTI и TFont DLL действительно формально не равен TFont EXE


 
Sanyok   (2003-03-04 20:07) [2]

Не получается, то же самое выдает...

Вечером еще попробую на другом компе, конечно...


 
Yagoda ©   (2003-03-04 22:39) [3]

Странно это все странно .. вот эксперементальным путем выяснила, что ежели функцию дергать из другой процедуры то все ок: то есть:

function smd(Msg: PChar): integer;stdcall;external "DLLProject.DLL"
...
...
...
procedure TMainForm.Button2Click(Sender: TObject);
begin
smd(PChar("asdasd")); // Вот тут вылетает
end;
procedure TMainForm.Button1Click(Sender: TObject);
var
A: array[0..79] of Char;
begin
StrPCopy(A, Edit1.Text);
smd(PChar("sad")); // А вот тут все работает
Label1.Caption:=IntToStr(GetLenText(A));
end;


И где логика ???


 
oomneeq ©   (2003-03-04 22:57) [4]

smd - это вот это:

function ShowMyDialog(Application:TComponent,Msg: PChar): Boolean;
begin
Form1 := TForm1.Create(Application);
Form1.Label1.Caption := StrPas(Msg);
Result :=Form1.ShowModal;
Form1.Free;
end;

?

Тогда вместо Form1.Free напиши FreeAndNil(Form1);
С аппликэйшном непонятка, ты в ДЛЛ его передаешь?

А поповоду логики, то похоже потенциальная ошибка (использование указателя на несуществующий/уже убитый объект) есть в обоих вариантах, просто в одном из них "проносит".


 
Sanyok   (2003-03-05 11:18) [5]

>petr_v_a © (04.03.03 19:13)

Не работает, выдает то же самое....

Так что, тулбар из дллки подгрузить вообще невозможно? Посоветуйте что-нибудь, как можно сделать так, чтобы тулбары в приложении лежали в отдельных файлах, которые можно было бы менять по ходу работы?


 
Sanyok   (2003-03-05 18:03) [6]

up !


 
Sanyok   (2003-03-05 20:56) [7]

Ну что, вообще никто ничего подобного не делал? И никто ничего подобного не знает что-ли????


 
Sanyok   (2003-03-05 20:58) [8]

Ну что, вообще никто ничего подобного не делал? И никто ничего подобного не знает что-ли????


 
Sanyok   (2003-03-06 08:58) [9]

Подскажите пожалуйста нормальный форум, на котором есть ХОРОШИЕ специалисты по делфи, потому что тут вообще похоже никого не осталось...


 
REA ©   (2003-03-06 10:15) [10]

В DLL не будет работать. В BPL будет. Задавай конкретнее вопросы. Поищи форум - я сам недавно с этим возился.



Страницы: 1 вся ветка

Текущий архив: 2003.03.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
1-54033
Monak
2003-03-04 22:53
2003.03.17
Проблемки с файлами


1-53999
udet
2003-03-06 15:07
2003.03.17
создание файла


14-54310
Jeka
2003-03-01 15:04
2003.03.17
эмулятор unix


14-54166
ProtoSoft
2003-02-28 02:36
2003.03.17
Во блин, а правда Россияне, что у Вас собираются МАТЮКИ сделать..


14-54183
Supreme 2
2003-03-01 01:56
2003.03.17
Нужна компанента, которая будет плавно менять картинку на другую.