Форум: "Основная";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];
ВнизПроблема с 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c