Главная страница
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.015 c
6-14199
Avallon
2002-06-30 00:06
2002.09.05
Как настроить


14-14270
vasya_dvc
2002-08-10 23:23
2002.09.05
Лицензирование


1-14003
Melkosoft
2002-08-23 09:27
2002.09.05
Реестр


4-14318
asmer
2002-07-02 14:34
2002.09.05
EditBox


3-13971
a_ruslan
2002-08-16 14:58
2002.09.05
Сортировка по lookup полю