为什么这个指针会抛出访问冲突?
Why does this pointer throw Access violation?
我尝试在我的 code.But 中转换一个指针,它抛出访问冲突。
网上试了很多方法都失败了
主程序:
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中的数字,我该怎么做?
要从 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 "thread" API,而不是创建您自己的包装器。
希望对您有所帮助...
我尝试在我的 code.But 中转换一个指针,它抛出访问冲突。
网上试了很多方法都失败了
主程序:
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中的数字,我该怎么做?
要从 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 "thread" API,而不是创建您自己的包装器。
希望对您有所帮助...