Почему этот указатель выбрасывает нарушение прав доступа? - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь перевести указатель в мой код. Но он выбрасывает нарушение прав доступа.

Я пробовал много способов в Интернете, но все они потерпели неудачу.

основная программа:

createthread(nil,0,@make,@cli,0,tmp);//cli is a longint

и процедура make:

procedure make(a:pointer);
var
 c:longint;
begin
 c:=PLongint(a)^;
 //here throw Access violation

 ...
end;

Я ожидаю получить число в указателе a, как я могу это сделать?

1 Ответ

0 голосов
/ 01 января 2019

Есть несколько вещей, которые вам нужно сделать, чтобы успешно вызвать функцию C (например, Win32 CreateThread() API) из Pascal.

Одна из них - установить правильную последовательность вызова: stdcall.

Другое - получить правильные указатели (ваш исходный вопрос).

Еще одна проблема заключается в том, чтобы убедиться, что объявление функции C написано с заглавной буквы правильно (например, CreateThread, а не createthread.

Вы не показали нам свою декларацию Pascal и не сообщили, какой компилятор Pascal вы используете.

Если вы используете Borland Pascal, Delphi или FreePascal, посмотрите здесь подробности о вызове Cиз Паскаля (и наоборот):

http://www.drbob42.com/delphi/headconv.htm

Но если вы используете какой-либо из этих трех Паскалей, подумайте над поиском существующего API-интерфейса «потока» Паскаля вместо создания собственногоОбертка.

Надеюсь, это поможет ...

...