为什么此指针会引发访问冲突?

时间:2019-01-01 08:27:28

标签: windows pointers pascal

我尝试在代码中转换一个指针,但是它会引发访问冲突。

我在Internet上尝试了许多方法,但都失败了。

主程序:

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

以及制作过程:

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

 ...
end;

我希望得到指针a中的数字,该怎么办?

1 个答案:

答案 0 :(得分: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,而不是创建自己的包装器。

我希望对您有帮助...