为什么这个指针会抛出访问冲突?

问题描述 投票:0回答:1

我尝试在代码中转换指针。但它引发了访问冲突。

我在网上尝试了很多方法,但都失败了。

主要程序:

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中的数字,我该怎么做?

windows pointers pascal
1个回答
2
投票

要从 Pascal 成功调用 C 函数(如 Win32

CreateThread()
API),您需要执行几件事。

其中之一是设置正确的调用顺序:

stdcall

其他是让指针正确(你原来的问题)。

另一个问题是确保 C 函数声明的大写正确(例如

CreateThread
,而不是
createthread

您没有向我们展示您的 Pascal 声明,也没有告诉我们您正在使用什么 Pascal 编译器。

如果您使用的是 Borland Pascal、Delphi 或 FreePascal,请在此处查看有关从 Pascal 调用 C 的详细信息(反之亦然):

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

但是,如果您使用这三个 Pascal 中的任何一个,请考虑查找现有的 Pascal“线程”API,而不是创建自己的包装器。

© www.soinside.com 2019 - 2024. All rights reserved.