|
Вопрос # 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.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|