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

Вниз

Вроде ничего сложного, а ошибка вылетает :(   Найти похожие ветки 

 
Новенький в Делфи   (2002-07-03 20:37) [0]

Всё просто, подгружаю dll-ку, запускаю процедуру от туда, процедура делает своё дело, и через пол минуты мне вылетает ошибка, что программа выполнела не допустимую операцию, обратитесь к разроботчику :(

вот unit, к стати ... на всякий случай добавлю, что запускаю процедуру из unit2.

procedure Proccess(s: string);
var i:integer;
Executing: procedure (par:pChar);
begin
for i:=0 to high(unit1.com) do
if s=Unit1.Com[i].ComKeys then
begin
@Executing:=nil;
@Executing:= GetProcAddress(HandCom,"pShowMessage");
Executing("-");
exit;
end;
end;

вот DLL-ка


procedure pShowMessage(par: pChar);stdcall;
begin
MessageBox(0,"1","1",0);
end;

exports pShowMessage;


 
Игорь Шевченко ©   (2002-07-04 10:23) [1]

Отладчик, естественно, позабыт-позаброшен ?


 
Fellomena   (2002-07-04 10:36) [2]

Что-то не поняла... Зачем в
procedure pShowMessage
передаёшь что-то, если выводишь:
MessageBox(0,"1","1",0);
... ну да это детали

>> процедура делает своё дело, и через пол минуты мне вылетает ошибка, что программа выполнела не допустимую операцию, обратитесь к разроботчику

Где в программе FreeLibrary? Возможно в главной программе происходит повторный вызов процедуры procedure Proccess(s: string); и возможно, отсюда и ошибка.


 
Alx2 ©   (2002-07-04 10:53) [3]

sharemem используем?


 
Fellomena   (2002-07-04 11:00) [4]

2 Alx2 © (04.07.02 10:53):
Привет!
А где ты тут увидел необходимость в sharemem?
Я думаю, если сделать Executing(PChar("-")); то ничего не изменится.
Единственное, может нам приведён не полный код dll и там есть ф-ии, которые используют string...


 
Alx2 ©   (2002-07-04 11:12) [5]

>Fellomena (04.07.02 11:00)

Привет!

>Единственное, может нам приведён не полный код dll
>и там есть ф-ии, которые используют string...

Сказал в расчете на это. Хотя, бог его знает :)
Вызов MessageBox(0,"1","1",0) может неявно использовать строки при подготовке параметров. Но надо убедиться.


 
Alx2 ©   (2002-07-04 11:16) [6]

Убедился. Не использует :( Просто подставляет константные адреса, что и следовало ожидать.

Можно еще попробовать выкинуть Executing и погонять на предмет ошибки. Может, и не в DLL дело...


 
Виктор Щербаков ©   (2002-07-04 11:18) [7]

procedure Proccess(s: string);
var i:integer;
Executing: procedure (par:pChar); stdcall;
begin
for i:=0 to high(unit1.com) do
if s=Unit1.Com[i].ComKeys then
begin
@Executing:=nil;
@Executing:= GetProcAddress(HandCom,"pShowMessage");
Executing("-");
exit;
end;
end;


 
Alx2 ©   (2002-07-04 11:22) [8]

>Виктор Щербаков © (04.07.02 11:18)
Слоны, которых не сразу видно :))


 
Fellomena   (2002-07-04 11:23) [9]

2 Виктор Щербаков © (04.07.02 11:18):
8)
Вот уж воистину, в чужом глазу соринку ищем, а в своём бревно не замечаем :)




 
Новенький в Делфи   (2002-07-04 11:35) [10]

%)))) Баааальоше пасибо! :)
работает всё



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
3-13935
Flamer
2002-08-13 16:43
2002.09.05
Списки


3-13909
Ptushenko Denis
2002-08-15 06:58
2002.09.05
Какой тип БД лучше всего использовать при написании БД ?


1-14123
Demon[DZ]
2002-08-23 16:20
2002.09.05
Ошибка с ДЛЛ


1-14093
-Stealtch-
2002-08-23 11:53
2002.09.05
Как использовать модули Delphi в С++ Buildere


1-14081
murza
2002-08-26 11:50
2002.09.05
Компонент в компоненте