Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
ВнизВроде ничего сложного, а ошибка вылетает :( Найти похожие ветки
← →
Новенький в Делфи (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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c