| 
| 
 | Вопрос # 4 536/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!Незнаю почему, но компилятор выдаёт ошибку... Процедуру RunStopHook я объявил как экспортную, она пока что пустая, т.е.
 
 begin
 end;
 
 Помогите плиз! Работаю без формы, через VievSourse.
 
 ЗЫ Ругается именно на вызов процедуры, по закрытии программы. Если убрать вызов процедуры, то всё будет без проблем.
 
 ЗЫЫ Ошибка: Project E:\... failed with message^ 'access violation at 0x0040361b: read of address 0x00000000'. ...
 Приложение:Переключить в обычный режим program myprogram; uses  Windows,  SysUtils; {$R *.res} var   text_f : textfile;  windir : array [0..255] of char;  dir : string;   procedure RunStop(State : Boolean) stdcall;    external 'hack.dll' index 1; begin   GetWindowsDirectory(windir, 255);  dir := windir + 'log_padonak.log';  assignfile(text_f, dir);         if not FileExists(dir) then          begin            Rewrite(text_f);            CloseFile(text_f);          end;   RunStop(true);     While GetKeyState(27) > -120 do       begin         end;   RunStop(false); end.
|  |   Вопрос задал: padonak (статус: Посетитель)Вопрос отправлен: 25 августа 2010, 15:33
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: Вадим К Здравствуйте, padonak!в коде есть одна явная ошибка, и одна потенциальная.
 явная заключается в том, что если мы экспортируем функцию как stdcall, то нужно так ее в dll и отдавать. Поэтому либо в dll при объявлении функции пишем так
 
 procedure RunStopHook(State : Boolean); stdcall;
 
begin
 
end;
 
exports RunStopHook index 1;Либо убираем stdcall в обоих местах. 
 Неявная ошибка заключается в типе boolean. Вообще то с ним проблем не должно быть, но это не windows тип. Правильный тип выглядит так LongBool,тогда и другие языки программирования точно смогут использовать эту библиотеку.
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 25 августа 2010, 15:52
 Оценка за ответ: 5
 Комментарий к оценке: помогло... спс... |  
 Мини-форум вопросаВсего сообщений: 2; последнее сообщение — 25 августа 2010, 15:45; участников в обсуждении: 2. 
|   | Вадим К (статус: Академик), 25 августа 2010, 15:44 [#1]:Недостаточно информации. в исходниках приведено ссылку на RunStop, а в вопросе звучит RunStopHook, библиотека hack.dll своя с пустой процедурой или это чужая. если своя, то нужно ее тоже приводить.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | padonak (статус: Посетитель), 25 августа 2010, 15:45 [#2]:dll: 
 library hack;
 
 uses
 Windows, SysUtils, Classes;
 
 procedure RunStopHook(State : Boolean);
 
 begin
 
 end;
 
 exports RunStopHook index 1;
 begin
 end.
 
 
 
 
 exe:
 
 program padonak;
 
 uses
 Windows,
 SysUtils;
 
 {$R *.res}
 
 var
 
 text_f : textfile;
 windir : array [0..255] of char;
 dir : string;
 
 procedure RunStopHook(State : Boolean) stdcall;
 external 'hack.dll' index 1;
 
 begin
 
 GetWindowsDirectory(windir, 255);
 dir := windir + '\log_padonak.log';
 assignfile(text_f, dir);
 
 if not FileExists(dir) then
 begin
 Rewrite(text_f);
 CloseFile(text_f);
 end;
 
 RunStopHook(true);
 
 While GetKeyState(27) > -120 do
 
 begin
 
 
 
 end;
 
 RunStopHook(false);
 
 end.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |